Jenkins Pipeline 持续集成

Jenkins Pipeline 持续集成

在使用Pipeline之前请确保Jenkins是2.x版本以上,并且安装了Pipeline插件。

1. when 条件判断

条件:多分支
Jenkins 可以同时监控多个分支。在集成的过程中,有的分支提交代码可能需要测试,通过之后才能合并;有的分支提交代码可能是可以部署了,我们可以根据不同的分支决定持续集成的操作,通过when方法可以设置stage执行的条件:

pipeline{
  stages{
    stage("init"){
      when {
         branch 'dev'// 当代码的分支为dev 执行当前stage
      }
    }
  }
}

创建build时需要配合多分支Pipeline使用,这个特性可以通过Pipeline可视化体现出来。

条件:构建参数
创建Build时候可以设置构建参数,通过参数化构建过程增加一个选项参数,设置名称为TargetImage,然后就可以设置when条件了:

when { environment name: 'TargetImage', value: 'Test' }

上面的条件意思为:当对参数TargetImage选择的选项为Test时才执行当前stage。

2. 支持多个git仓库

我们可以在一个Build中依赖多个git仓库,并且将其代码克隆到不同的文件夹内。
正常情况下客隆一个项目的写法:

checkout([$class: 'GitSCM', branches: [[name: '*/dev']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'https://xxx.xxx.git']]])

假如可以指定客隆到本地的目录,那么写多个checkout指令就可以在一个Build中支持多个源码仓库了;可以在checkout中指定一个extension来设置克隆源码到本地目录:

extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'model-dissector']]

完整的指令如下:

checkout([$class: 'GitSCM', branches: [[name: '*/dev']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'model-dissector']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'https://xxx.xxx.git']]])

我们也可以使用Jenkins自带的代码模板生成,在流水线语法中选择名称为checkout: Checkout from version control,然后添加一个Additional Behaviours 选择 Checkout to a sub-directory就可以了。

3. 并行执行

如果测试阶段有多个单元测试,为了提高速度可以将这些单元测试并行执行。
通过Jenkins可以在Stage中创建并行执行的子Stage,并且为这些Stage分配不同的运行节点。

pipeline{
  stages{
    stage("init"){
      parallel{ // 创建并行的子stages
        stage("init 1"){
            // do some thing
        }
        stage("init 2"){
            // do some thing
        }
      }
    }
  }
}

在上述配置的stagesinit 1 init 2 中可以分别执行不同的单元测试,并同时运行达到节省时间的目的,这个优势在单元测试较多时候表现比较明显。

4. 参数化构建

内置对象env 可以从该对象中取值。先给build添加一个选项参数叫name然后两个值:

  • Zhang
  • Li

如图:

Pipeline配置如下:

pipeline {
    agent any
    stages {
        stage('Checkout'){
                    steps{
                        print(env)
                        print(env.name)
                    }
                 }
    }
}

构建一下,输出为:

Started by user admin
Running in Durability level: PERFORMANCE_OPTIMIZED
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/Hypernets_Benchmark
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Checkout)
[Pipeline] echo
org.jenkinsci.plugins.workflow.cps.EnvActionImpl@37a4cd70
[Pipeline] echo
Zhang
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS
posted @ 2020-01-16 21:51  oaksharks  阅读(800)  评论(0编辑  收藏  举报