一、项目流程
- 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:80docker 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/testchmod 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}方式进行引用。