Jenkins pipeline对接新节点

34 阅读1分钟

背景

最近开发过程中部署新的节点,由于pipeline(流水线)中没有相关配置,所以需要新增参数、脚本以及ssh免密登录配置

Jenkins流水线采用参数化构建,主要两个参数,一个是分支名: branch,一个是部署环境(也就是节点ip): buildENV

步骤

1、新增节点参数

参数化构建中新增主机ip选项到buildENV参数中

2、修改流水线脚本

复制原有节点的脚本,修改即可

node("master") {
    withEnv(['PATH+bin=/home/xiao/node-v10.15.3-linux-x64/bin/bin:/usr/local/bin:/usr/bin/:/bin']) {
        stage("拉取代码"){
            echo  "WORKSPACE:${WORKSPACE}"
            echo  "JENKINS_HOME:${JENKINS_HOME}"
            echo  "JOB_NAME:${JOB_NAME}"
            echo  "WORKSPACE_TMP:${WORKSPACE_TMP}"
            echo  "WORKSPACE:${WORKSPACE}"
            checkout(
                [
                  $class: 'GitSCM',
                  branches: [[name: "*/${branch}"]],
                  doGenerateSubmoduleConfigurations: false,
                  extensions: [],
                  submoduleCfg: [],
                  userRemoteConfigs: [
                      [url: 'ssh://git@xx.xx/projectName.git']
                  ]
                ]
            )
        }
        stage("代码编译"){
            sh "npm run build"
        }
        stage("代码发布"){
            def machine
            def IP
            if (env.buildENV == "11.11.11.11") {
                machine = "xiao@11.11.11.11"
                IP = "11.11.11.11"
                def path = "/opt/web/tengine/data"
                
                sh "ssh ${IP} \"cd ${path} && rm -rf dist_bak && mv dist dist_bak\""
                sh "scp -r ${WORKSPACE}/dist ${machine}:${path}"
                sh "ssh ${IP} \"cd ${path} && sh replace.sh\""
            } else if (env.buildENV == "22.22.22.22") {
                // 新节点配置参考
                machine = "xiao@22.22.22.22"
                IP = "22.22.22.22"
                def path = "/opt/web/tengine/data"
                
                sh "ssh ${IP} \"cd ${path} && rm -rf dist_bak && mv dist dist_bak\""
                sh "scp -r ${WORKSPACE}/dist ${machine}:${path}"
                sh "ssh ${IP} \"cd ${path} && sh replace.sh\""
            }
        }
    }
}

更多配置请参考:Jenkins CD SSH Pipeline

3、新增节点的ssh免密登录配置

最关键的一步,主要用于在执行 pipeline 脚本过程中,能够使用ssh命令登录到目的主机上进行前端的一系列部署操作。

1. 沿用老节点的配置,不用生成新的rsa公私钥

2. 把 id_rsa.pub 添加到 新主机的 ~/.ssh/authorized_keys文件里

  1. 登录到 Jenkins 主机

  2. 配置ssh免密登录新主机

cd ~/.ssh/ 
ssh-copy-id -i id_rsa.pub u8@192.x.x.x

输入主机密码后,即可在目的主机的 ~/.ssh/authorized_keys文件里查看到 Jenkins 主机上的 id_rsa.pub

  1. 重启Jenkins主机的 sshd 服务
sudo systemctl restart sshd

或者: sudo service sshd restart

4、触发Jenkins 构建


我是 甜点cc,个人网站: blog.i-xiao.space/

唯有行动,才能战胜虚无!

公众号:【看见另一种可能】