自由屋推书网—热门的小说推荐平台!

你的位置: 首页 > 其他程序

使用jenkins打包前端私服代码失败解决方法

2022-04-09 13:25:02

jinekins 流水线在yarn 编译前端私服依赖包的时候,报错,提示Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).,之前的构建都是好好的,也不知道前端大哥啥时候去封装的前端代码,而且奇怪的是没有放在公共库里.

Pipeline 流水线:

pipeline{
//指定运行此流水线的节点
agent { node { label "master"}}
//流水线的阶段
stages{
    //阶段1 获取代码
    stage("拉取代码"){
        steps{    
        checkout([$class: 'GitSCM', branches: [[name: '*/develop']], extensions: [], userRemoteConfigs: [[credentialsId: 'test', url: 'git@code.xx.net:xx-n/xx-fe-n/project-a/b/soter-admin.git']]])
        }
    }
    stage("打包编译"){
        steps{
        sh '''
        source /etc/profile && /usr/local/nodejs/bin/yarn && /usr/local/nodejs/bin/yarn build --mode development
        '''
        }
    }
    stage("部署"){  
        steps{
        sh '''
        bash /root/.jenkins/a/web/web-main.shell a-admin a-web-dev
        '''
        }
    }

}

一番排错后,发现是 没有使用机器私钥文件或者 jenkins 私钥凭证 拉取 gitlab中私有封装的依赖包,从而导致打包失败

发现只有在拉取代码阶段使用了 jenjins 上凭证id test 去拉取代码; 后面打包编译阶段,没有使用jenkins私钥凭证或者机器上私钥文件

解决思路:

封装的前端代码,放在公共库里【开发去改造】

前端代码的package.json 文件里,指定 gitlab用户名/密码 ,如下图所示【开发去改造】 不怎么地安全,还是算了把

jenkins 流水线的工作节点,使用Jenkins 添加ssh 私钥文件凭证【运维去改造】

最终,我采取了 使用Jenkins 添加ssh 私钥文件凭证 的方式,当构建结束后再自动删除 保留再机器上的私钥文件

虽说有点笨,但是短期内没有发现什么更好的额方法!!!

改造后Pipeline 流水线

pipeline{
//指定运行此流水线的节点
agent { node { label "master"}}
//流水线的阶段
stages{
    //阶段1 获取代码
    stage("拉取代码"){
        steps{    
        checkout([$class: 'GitSCM', branches: [[name: '*/develop']], extensions: [], userRemoteConfigs: [[credentialsId: 'test', url: 'git@code.xx.net:xx-n/xx-fe-n/project-a/b/soter-admin.git']]])
        }
    }

    stage("打包编译"){
        steps{
            withCredentials([sshUserPrivateKey(credentialsId: "test", keyFileVariable: 'keyfile')]) { 
        sh '''
        cp -rp ${keyfile} /root/.ssh/id_rsa
        chmod 600 /root/.ssh/id_rsa
        source /etc/profile && /usr/local/nodejs/bin/yarn && /usr/local/nodejs/bin/yarn build --mode development
        rm -rf /root/.ssh/id_rsa
        '''}
         }
     }

    stage("部署"){  
        steps{
        sh '''
        bash /root/.jenkins/a/web/web-main.shell a-admin a-web-dev
        '''
        }
    }

}

 

编辑推荐

热门小说