专栏首页finleyMaJenkins2 学习系列10 -- 多分支pipeline构建

Jenkins2 学习系列10 -- 多分支pipeline构建

一个项目可能会有很多分支,Jenkins 支持创建多分支pipeline的任务。

创建多分支项目

新建 "Item" 直接选择 "Multibranch Pipeline" 即可

image.png

配置页面有很多选项,大致讲下

image.png

image.png

使用 when 指令

我们需要判断针对不同分支做不同事情,使用 if else 比较low,不够优雅

stage("deploy to test") {
  steps {
      script {
          if (env.GIT_NAME == 'testing') {
            echo 'deploy to test'
          }
     }
   }
}

可以使用when指令

stage("deploy to test") {
  when {
    branch 'testing'
    steps {
      echo 'deploy to test'
    }
  }
}

stage("deploy to prod") {
  when {
    branch 'production'
    steps {
      echo 'deploy to prod'
    }
  }
}

when指令的用法

when指令允许pipeline根据给定的条件,决定是否执行阶段内的步骤。when指令必须至少包含一个条件。when指令除了支持branch判断条件,还支持多种判断条件。

  • changelog:如果版本控制库的changelog符合正则表达式,则执行
  • changeset:如果版本控制库的变更集合中包含一个或多个文件符合给定的Ant风格路径表达式,则执行
when {
  changeset "**/*.js"
}
  • environment:如果环境变量的值与给定的值相同,则执行
when {
  environment name: 'DEPLOY_TO', value: 'production'
}
  • equals:如果期望值与给定的值相同,则执行
when {
  equals expected: 2, actual: currentBuild.number
}
  • expression:如果Groovy表达式返回的是true,则执行 当表达式返回的是字符串时,它必须转换成布尔类型或null;否则,所有的字符串都被当作true处理。
when {
  expression {
    return env.BRANCH_NAME != 'master'
  }
}
  • building Tag:如果pipeline所执行的代码被打 了tag,则执行
  • tag:如果pipeline所执行的代码被打了tag,且tag名称符合规则,则执行 如果tag的参数为空,即tag (),则表示不论tag名称是什么都执行,与buildingTag的效果相同。
when {
  tag "release-*"
}

tag 条件支持comparator参数,支持的值如下: -- EQUALS:简单的文本比较。

when {
  tag "release-3.1", comparator: "EQUALS"
}

-- GLOB (默认值):Ant风格路径表达式。由于是默认值,所以使用时一般省略。完整写法如下:

when {
  tag "release-*", comparator: "GLOB"
}

-- REGEXP:正则表达式。使用方法如下:

when {
  tag "release-\\d+", comparator: "REGEXP"
}

tag条件块非常适合根据tag进行发布的发布模式。

以上介绍的都是单条件判断,when指令还可以进行多条件组合判断。

  • allOf:所有条件都必须符合。下例表示当分支为master且环境变量DEPLOY TO的值为production时,才符合条件。
allOf {
  branch "master";
  environment name: 'DEPLOY_TO', value: 'production'
}

注意,多条件之间使用分号分隔。

  • anyOf:其中一个条件为true, 就符合。下例表示master分支或staging分支都符合条件。
anyOf {
  branch "master";
  branch "staging";
}

Generic Webhook Trigger 插件在多分支pipeline场景下的应用

Generic Webhook Trigger 在之前已经介绍过,可以这么传参

    triggers {
        GenericTrigger(
            genericVariables: [
              [key: 'ref', value: '$. ref']
            ],
            token: env.JOB_NAME ,
            regexpFilterText: '$ref',
            regexpFilterExpression: 'refs/heads/' + env.BRANCH_NAME,
        )
    }

env.BRANCH_NAME 为当前pipeline的分支名

参考

converting-conditional-to-pipeline/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • docker学习系列12 轻松实现 mysql 主从同步

    docker的一大好处是在本地可以很方便快速的搭建负载均衡,主从同步等需要多主机的环境。 可以说是极大方便了运维成本和难度。 本节在本地搭建mysql的一主...

    mafeifan
  • Mac 共存 Java JDK 8和9

    正常安装 JDK 1.8 和 JDK 9 即可, JAVA 8 对应的就是 JDK 1.8,JAVA 9 对应的 JDK 9。

    mafeifan
  • RxJS 学习系列 11. 合并操作符 concat, merge, concatAll

    这节讲非常重要同时非常容易混淆的合并操作符,从名字上次都是合并,但是区别还是蛮大的,我会尽量结合Marble Diagram(弹珠图)解释清楚。

    mafeifan
  • 【Canvas】232-Canvas 最佳实践(性能篇)

    Canvas 想必前端同学们都不陌生,它是 HTML5 新增的「画布」元素,允许我们使用 JavaScript 来绘制图形。

    pingan8787
  • AV1显著超越H.265和VP9?—MSU最新比较公布

    前言 最新的编码质量对比研究表明,视频编码标准AV1在质量已经登顶,但在编码速度方面仍与VP9、HEVC相差甚远。同时,莫斯科国立大学(MSU)开启了一项从主观...

    用户1324186
  • PaddlePaddle发布v0.10.0版

    我们非常高兴发布了PaddlePaddle V0.10.0版,并开放了新的Python API。 之前在v0.9.0版,完成一个训练或预测任务至少需要两份pyt...

    用户1386409
  • 游戏领域区块链探索

    中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

    netkiller old
  • 调教属于你的“贾维斯”(给自己挖了一个很大的坑)

    人工智能离我们有多远?你觉得只有战胜柯杰的阿尔法狗才算是人工智能吗?看看周围:你的美颜相机、你刷的抖音推荐、你手机上的语音助手……甚至包括给你送外卖的小哥分配,...

    Crossin先生
  • CAS 5.3.1系列之客户端对接(五)

    我们要接入客户端可以常用第三方的库cas-client-autoconfig-support来对接,比较快捷,迅速实现,或者可以用cas-client-supp...

    用户1208223
  • 【DP】873. Length of Longest Fibonacci Subsequence

    A sequence X_1, X_2, ..., X_n is fibonacci-like if:

    echobingo

扫码关注云+社区

领取腾讯云代金券