Jenkins CI/CD分离执行实践
在生产环境中,可能存在这样一种部署情况:生产服务器无法通过公网ip进行ssh访问,也就无法通过Jenkins的ssh命令进行部署。
我尝试使用以下方法解决:
- 局域网中(或者云服务器)部署Jenkins,用作代码编译和打包。
- 远程服务器中也部署一个Jenkins,执行拉取和构建
- 打包完成后通过Jenkins的Http Api来触发远程服务器的构建Job。
如何触发远程的job执行?
Jenkins的stage代码如下:
stage('部署') {
steps {
script {
def code = sh(
script: '''
curl -X POST http://XXX/jenkins/job/JOBNAME/buildWithParameters --user USER:TOKEN--data service=java -H 'Content-Type: application/x-www-form-urlencoded' -w "%{http_code}"
''',
returnStdout: true
).trim()
echo "HTTP Code: ${code}"
if (code != "201") {
error("触发 Jenkins2 失败,HTTP Code=${code}")
}
}
其中最关键的是执行curl命令,并判断返回code是否等于201。其中JOBNAME参数要替换为实际的job名称。Jenkins Http Api的更多内容可参考官网文档:https://www.jenkins.io/doc/book/using/remote-access-api/
用户的token可通过点击用户的头像,然后进行token的创建。


浙公网安备 33010602011771号