DevOps 生态介绍(十一):从代码提交到镜像仓库的完整流水线(附Jenkinsfile

📅 2026/6/28 18:09:55
DevOps 生态介绍(十一):从代码提交到镜像仓库的完整流水线(附Jenkinsfile
文章简介此篇文章介绍了将docker 集成到Jenkins pipeline 中具体流程如下 checkout_get_code --- Build_jar ---tar_package---持续部署---build_and_push_image---jacoco 文章最后会附上完整JenkinsfileJenkins服务器配置 Docker 安装Docker安装步骤请参照“DevOps 生态介绍八docker dockerfile 命令介绍及构建项目的第一个镜像” 里面的步骤安装即可 Jenkins 登录acr 在Jenkins pipeline 过程中要将build image 推到镜像仓库Jenkins 需要先登录ACRJenkins 登录ACR步骤请参考“DevOps 生态介绍九别再只用 Docker Hub 了生产环境必知的 ACR 与 ECR 选型攻略” 这篇文章的ACR使用说明一栏即可Jenkins pipeline 下面是完整的Jenkinsfile 文件pipeline { agent any tools { maven Maven } parameters { gitParameter( name: BRANCH, type: PT_BRANCH, defaultValue: master, branchFilter: origin/(.*), sortMode: DESCENDING_SMART, selectedValue: DEFAULT, description: 请选择要构建的分支 ) booleanParam( name: SKIP_TEST, defaultValue: true, description: 是否跳过单元测试 ) choice( name: JDK_VERSION, choices: [JDK17,JDK21], description: 请选择JDK版本 ) } environment { JAVA_HOME tool ${params.JDK_VERSION} PATH ${env.JAVA_HOME}/bin:${env.PATH} } stages { stage(checkout_get_code) { steps { checkout([ $class: GitSCM, branches: [[name: */${params.BRANCH}]], userRemoteConfigs: [[ credentialsId: f245a11f-afe0-4ca4-aa2d-1e574724677d, url: https://codeup.aliyun.com/60b83b0db8301d20d58b8017/test.git ]] ]) } } stage(Build_jar) { steps { sh echo build jar java -version echo $JAVA_HOME mvn clean package \ -DskipTests${params.SKIP_TEST} } } stage(tar_package) { steps { sh echo tar package 开始... cd target tar -zcvf test.tar.gz \ ms-pats-mq-util-1.2.0-SNAPSHOT.jar } } stage(CD) { steps { sshPublisher( publishers: [ sshPublisherDesc( configName: 192.168.1.170, transfers: [ sshTransfer( cleanRemote: false, excludes: , execCommand: #!/bin/bash source /etc/profile cd /data/app/mq_util ./server.sh stop tar zxvf test.tar.gz sleep 2 rm -rf test.tar.gz BUILD_IDdontKillMe ./server.sh start sleep 2 , execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: [, ], remoteDirectory: /data/app/mq_util, remoteDirectorySDF: false, removePrefix: target/, sourceFiles: target/test.tar.gz ) ], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false ) ] ) } } stage(build_and_push_images ) { steps { sh DATEdate %Y%m%d docker build -t project_server . docker tag project_server:latest registry.cn-shanghai.aliyuncs.com/project_name/project_server:$DATE docker push registry.cn-shanghai.aliyuncs.com/project_name/project_server:$DATE docker rmi registry.cn-shanghai.aliyuncs.com/project_name/project_server:$DATE docker rmi project_server:latest echo docker build success } } stage(jacoco) { steps { jacoco() } } }}备注 1Jenkinsfile 文件中stage(build_and_push_images ) 的sh 这里我用的是单引号 2build image 需要用到Dockerfile 文件需要将Dockerfile文件放到项目的根目录下跟pom.xml 在同一目录下 3dockerfile 文件的编写格式请参照“DevOps 生态介绍八docker dockerfile 命令介绍及构建项目的第一个镜像” 4我这里的项目单独建了一个pipeline的分支专门是存放Jenkinsfile文件的这样便于管理只需要修改这个分支下的Jenkinsfile文件即可不需要修改所有分支下的Jenkinsfile。 上面完整的Jenkinsfile文件是能够正常跑通