Jenkins Pipeline项目实战
一、项目流程
- Jenkins从git拉取指定tag代码
- Jenkins构建代码、镜像以及推送镜像到镜像库
- Jenkins通过Publish Over SSH通知远程服务器拉取镜像、远程服务器通过镜像启动容器
二、实现流程
1、从代码仓中拉取Jenkinsfile文件
2、从git拉取指定tag代码
配置Git参数:
剩下的部分需要在Jenkinsfile中完成 。
3、构建代码、镜像以及推送镜像到镜像库
构建代码镜像中需要引入容器端口以及宿主机端口变量,这是在参数构建中进行设置:
剩下的部分则在Jenkinsfile文件中完成。
三、Jenkinsfile文件
pipeline { // jenkins集群中的任一节点 agent any // 存放所有任务集合 stages { stage("拉取Git代码") { steps { checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: '6600bebe-4eec-4529-ac44-ef8', url: 'http://172.16.52.8/shenjianping/web_test.git']]]) } } stage("制作自定义镜像并且发布到Harbor") { steps { sh '''docker build -t 172.16.52.10:80/repo/${JOB_NAME}:$tag . docker login -u shenjianping -p ****** 172.16.52.10:80 docker push 172.16.52.10:80/repo/${JOB_NAME}:$tag''' } } stage("通知远程服务器拉取镜像,进行部署") { steps { sshPublisher(publishers: [sshPublisherDesc(configName: 'server02', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /usr/local/test chmod a+x deploy.sh ./deploy.sh 172.16.52.10:80 repo ${JOB_NAME} $tag $host_port $container_port''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'deploy.sh')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) } } } }
在Jenkinsfile文件中有的固定值,如 172.16.52.10:80 镜像仓库等可以使用environment声明成全局变量然后通过${variableName}方式进行引用。
作者:iveBoy
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。