持续集成的执行方式

「CODING 持续集成」的执行方式为云主机,您可以自由的使用这台云主机来构建,可以安装 JDK,GCC 等构建工具,也可以使用预装的 Docker 来构建,以下提供了示例配置供参考。

本地模式

这种方式必须设置 agent 为 agent any,持续集成将在操作系统下运行构建程序。

 pipeline {
     agent any
     stages  {
         stage("检出") {
             steps {
                 sh 'ci-init'
                 checkout(
                   [$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
                   userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
                 )
             }
         }
         stage("环境") {
             steps {
                 sh 'apt update'
                   sh 'apt install -y maven'
                   sh 'java -version'
                   sh 'mvn --version'
             }
         }
         stage("构建") {
             steps {
                 echo "构建中..."
                 sh 'mvn package' // mvn 示例
                 echo "构建完成."
                 archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集构建产物
             }
         }
         stage("测试") {
             steps {
                 echo "单元测试中..."
                 sh 'make test' // make 示例
                 echo "单元测试完成."
                 junit 'target/surefire-reports/*.xml' // 收集单元测试报告的调用过程
             }
         }
         stage("部署") {
             steps {
                 echo "部署中..."
                 // 请在这里放置收集单元测试报告的调用过程,例如:
                 // sh 'mvn tomcat7:deploy' // Maven tomcat7 插件示例:
                 // sh './deploy.sh' // 自研部署脚本
                 echo "部署完成"
             }
         }
     }
 }

使用预装 Docker 构建

这种方式可以使用 hub.docker.com 上的镜像资源,或使用 Dockerfile 创建自定义镜像。可以构建任何语言,任何版本,例如:

 docker.image('maven:latest')
 docker.image('php:latest')
 docker.image('php:5.2.17')
 docker.image('go:1.11.00')

完整的例子:

 node {
     stage("检出") {
         sh 'ci-init'
         checkout(
           [$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]], userRemoteConfigs: [[url: env.GIT_REPO_URL]]]
         )
         sh 'pwd'
     }
     docker.image('maven:latest').inside("-v /root/.m2:/root/.m2") {
         stage("构建") {
                 echo "构建中..."
                 sh 'java -version'
                 sh 'mvn package -Dmaven.test.failure.ignore -Dmaven.test.skip=true' // mvn 示例
                 echo "构建完成."
                 archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true // 收集构建产物
         }
         stage("测试") {
                 echo "单元测试中..."
                 sh 'java -jar target/webflux-0.0.1-SNAPSHOT.jar &'
                 sleep 20
                 sh 'mvn test -Dmaven.test.failure.ignore' // mvn 示例
                 echo "单元测试完成."
                 junit 'target/surefire-reports/*.xml' // 收集单元测试报告的调用过程
         }
         stage("部署") {
                 echo "部署中..."
                 // 请在这里放置收集单元测试报告的调用过程,例如:
                 // sh 'mvn tomcat7:deploy' // Maven tomcat7 插件示例:
                 // sh './deploy.sh' // 自研部署脚本
                 echo "部署完成"
         }
     }
 }

相关文章