背景
最近开发过程中部署新的节点,由于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
文件里
-
登录到 Jenkins 主机
-
配置ssh免密登录新主机
cd ~/.ssh/
ssh-copy-id -i id_rsa.pub u8@192.x.x.x
输入主机密码后,即可在目的主机的 ~/.ssh/authorized_keys
文件里查看到 Jenkins 主机上的 id_rsa.pub
- 重启Jenkins主机的 sshd 服务
sudo systemctl restart sshd
或者: sudo service sshd restart
4、触发Jenkins 构建
我是 甜点cc,个人网站: blog.i-xiao.space/
唯有行动,才能战胜虚无!
公众号:【看见另一种可能】