使用jenkins 打包前端私服代码失败的问题

问题现象:

  • jinekins 流水线在yarn 编译前端私服依赖包的时候,报错,提示
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

【emm。。。之前的构建都是好好的,也不知道前端大哥啥时候去封装的前端代码,而且奇怪的是没有放在公共库里。。。。】

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 流水线的工作节点,使用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
        '''
        }
    }

}

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/6863

(0)
杰斯的头像杰斯
上一篇 2023年1月20日 下午2:50
下一篇 2023年1月31日 下午4:36

相关推荐

  • Docker安装部署Redis数据库

    通过Docker部署Redis,比起我们自己编译安装的方式,会更加方便容易管理。今天就来简单分享一下使用Docker部署Redis数据库。 1,拉取镜像 通过下列命令: 2,创建数据卷 通常,类似于MySQL,Redis作为数据库,我们最好还是需要将其配置和数据等等挂载到数据卷以持久化到宿主机。 仍然是使用具名挂载的方式方便管理。 这样就创建了两个数据卷分别…

    2023年1月11日
    96400
  • 一个由MySQL安全插件引发的生产问题

    一、背景 生产环境下遇到一个问题,有数据库节点的连接数略高,触发了连接数告警。登录上查看后,发现实际业务压力不大。查看processlist发现有大量状态为“Waiting in connection_control plugin”的等待连接。 mysql> select ID,HOST,DB,COMMAND,TIME,STATE,INFO from …

    2023年3月6日
    89700
  • Linux下安装PHP

    安装准备 安装PHP所需的系统库,可以扩展php更多功能 手动安装libiconv-devel(编译三部曲) 默认yum源中缺少libiconv-devel软件包,需要编译安装,用于php的编码转换 下载安装 国内镜像地址:http://mirrors.sohu.com/php/ 下载编译文件 编译安装 配置编译脚本 看到如下提示,说明编译成功了 进行编译安…

    2022年6月25日
    1.1K00
  • mysql之两个db实例中有两个表对比

    两个db实例中有两个表对比要确定两个数据库实例中的两个表是否存在差异,你需要比较这两个表的所有数据。这个过程可以通过多种方法实现,以下是几个常见的方法: SQL查询比较如果两个数据库相互可访问(例如,通过数据库链接),你可以编写SQL查询来比较它们的数据。以下是一个简单的例子,演示如何比较两个表的数据: 如果这些查询返回任何行,那么这些行就是两个表之间的差异…

    2024年7月4日
    1.8K00
  • 安装linux/Centos系统出现An Unknown Error Has Occurred报错原因和解决方法

    今天在给一个客户重装系统的时候出现: An Unknown Error Has OccurredThis program has encountered an unknown error. You may report the buy below or quit the program. This program has encountered an unk…

    2024年3月25日
    1.4K00

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信