背景
最近开发过程中部署新的节点,由于pipeline(流水线)中没有相关配置,所以需要新增参数、脚本以及ssh免密登录配置
Jenkins流水线采用参数化构建,主要两个参数,一个是分支名: branch,一个是部署环境(也就是节点ip): buildENV
步骤
1、新增节点参数
参数化构建中新增主机ip选项到buildENV参数中
2、修改流水线脚本
复制原有节点的脚本,修改即可
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 
 | 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文件里
- 登录到 Jenkins 主机 
- 配置ssh免密登录新主机 
| 12
 
 | cd ~/.ssh/ssh-copy-id -i id_rsa.pub u8@192.x.x.x
 
 | 
输入主机密码后,即可在目的主机的 ~/.ssh/authorized_keys文件里查看到 Jenkins 主机上的 id_rsa.pub
- 重启Jenkins主机的 sshd 服务
| 12
 3
 
 | sudo systemctl restart sshd
 或者: sudo service sshd restart
 
 | 
4、触发Jenkins 构建
![]()
问题及Reference
- 如果不是root用户,执行命令的时候可以在命令前加 - sudo
 
- SSH无密钥登陆 与 配置公钥后仍需要输入密码的解决方案 
- Linux主机之间ssh免密登录配置方法 
- 使用sshpass命令来进行明文免密登录 
- 使用代理服务器跳转连接远程Server