:超详细!Jenkins Pipeline 实战教程,构建你的第一个 CI 项目)
文章简介在“DevOps 生态介绍三零基础入门 Jenkins部署成功后编译你的第一个项目”这篇文章中主要介绍了在Jenkins UI界面手动配置完成项目的前后端构建。今天这边文章主要介绍通过Jenkins pipeline来完成前后端项目的构建。备注今天这边文章直接上干货不具体介绍pipeline的语法直接根据我在用的Jenkinsfile文件进行实战介绍,这两个Jenkinsfile文件我个人觉得可以拿过来根据自己的实际情况修改下就能直接使用Jenkins pipeline构建前端项目#前端项目Jenkinsfile文件内容 pipeline { agent any tools { nodejs NodeJS } parameters { gitParameter( name: BRANCH, type: PT_BRANCH, defaultValue: master, branchFilter: origin/(.*), sortMode: DESCENDING_SMART, selectedValue: DEFAULT, description: 请选择要构建的分支 ) choice( name: RUN_COVERAGE, choices: [YES,NO], description: 请选择YES/NO ) } stages { stage(checkout_get_code) { steps { checkout([ $class: GitSCM, branches: [[name: */${params.BRANCH}]], userRemoteConfigs: [[ credentialsId: f245a11f-afe0-4ca4-aa2d-1e574724677d, url: https://codeup.xxxx.com/60b83b8301d20d58b8017/test-front.git ]] ]) } } stage(Build_front) { steps { nodejs(NodeJS) { // some block } sh cd $WORKSPACE/ npm config set registry https://registry.npmmirror.com #npm install -g pnpm9 pnpm install #pnpm -r --filtermain-ocbc run coverage build if [ ${params.RUN_COVERAGE} YES ]; then echo Running coverage tests... pnpm run coverage fi pnpm run build-ocbc } } stage(tar_package) { steps { sh echo tar package 开始... cd $WORKSPACE/packages/main-ocbo/dist tar -zcvf test-front.tar.gz * } } stage(CD) { steps { sshPublisher( publishers: [ sshPublisherDesc( configName: 192.168.1.170, transfers: [ sshTransfer( cleanRemote: false, excludes: , execCommand: #!/bin/bash DATEdate %Y-%m-%d-%H:%M:%S cd /tmp mkdir test-front chmod 755 test-front mv test-front.tar.gz test-front/ cd /tmp/test-front/ tar -zxvf test-front.tar.gz rm -f test-front.tar.gz chmod 755 * -R mv /data/app/test-front /home/backup/test-front.$DATE.bak mv /tmp/test-front /data/app/ , execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: [, ], remoteDirectory: /tmp/, remoteDirectorySDF: false, removePrefix: packages/main-ocbo/dist/, sourceFiles: packages/main-ocbo/dist/test-front.tar.gz ) ], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false ) ] ) } } } }Jenkins pipeline构建后端java项目#java 后端项目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.xxxx.com/60b83b301d20d58b8017/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-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(jacoco) { steps { jacoco() } } } }Jenkinsfile 注意事项1Jenkinsfile 文件名必须严格是“Jenkinsfile ”没有后缀之类的格式2Jenkinsfile 文件存放目录必须是在项目的根目录下与根pom.xml文件在同一目录下3每个项目都有很多分支不需要每个分支下都有Jenkinsfile文件可以单独创一个pipeline的分支就放一个Jenkinsfile文件构建时在选择业务分支进行构建即可。下一批文章将介绍“DevOps 生态介绍七Jenkins Pipeline 核心语法大全这一篇就够了”