流水线编排

条件判断 分享链接

作者:赵红梅 最后编辑:赵红梅 于 2024-10-29 14:42:07 浏览量:328

条件判断指的是流水线中步骤的运行条件。

条件判断中有很多变量可以使用。

tip 提示

  • 每个仓库可以创建多条流水线。
  • 触发器(如推送、合并请求和新建标签)创建流水线,可以减少对条件的需求。

以下是支持的条件比较操作符:

类型 操作符
比较 ==!=
逻辑判断 notandor
正则匹配 matches
字符串 containsstartsWithendsWith

以下是支持的函数:

类型 语法
总是执行 always()
故障时 failure()

下面的流水线示例,当目标分支main时,捕获合并请求事件,运行test步骤:

kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: test
        type: run
        when: |
          build.event == "pull_request"
          and
          build.target == "main"
        spec:
          container: ruby
          script: |-
            bundle install --jobs=3 --retry=3
            rake 

下面的这个条件判断,当非main分支的代码,触发合并请求事件时:

    when: |
      build.event == "pull_request"
      and
      build.target != "main" 

下面的示例,仅在build.action合并请求创建后,才触发:

 when: build.action == "pullreq_created"

分支判断

限制在哪个目标分支,执行流水线。

下面的示例,流水线的 build 步骤,只在目标分支名是 main, 或以 feature/ 开头时触发:

kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: build
        type: run
        when: |
          build.target == "main"
          or
          build.target startsWith "feature/"
        spec:
          container: golang
          script: |-
            go build
            go test 

条件判断可以通过正则表达式来匹配,效果一样:

 when: build.target matches "main|feature/.*"

事件

设置基于哪些事件执行流水线。

下面的示例,只有当手动触发流水线时,才执行clean cache步骤:

kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: clean cache
        type: run
        when: build.event == "manual"
        spec:
          container: node:18
          script: |-
            npm cache clean --force 

引用

基于Git 引用,限制流水线的执行。

Git引用(Git reference)它指的是指向某个特定对象(通常是提交、分支或标签)的指针,帮助用户在版本控制中追踪和管理代码的历史变化。这个概念在Git的操作中非常重要,因为它涉及到如何定位和引用不同的版本或分支。

例如,当你在Git中创建一个分支时,这个分支就是一个“Reference”,它指向某个特定的提交。这使得开发者能够轻松切换、比较和合并不同的代码版本。

下面的示例,仅当分支名是以 feature-开头,或创建tag时触发build步骤:

kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: build
        type: run
        when: |
          build.ref startsWith "refs/heads/feature-"
          or
          build.ref startsWith "refs/tags/"
        spec:
          container: golang
          script: |-
            go build
            go test 

状态

当流水线的状态符合条件时,触发相关的步骤。

下面的示例,仅当test步骤失败时,触发 notify 步骤:

kind: pipeline
spec:
  stages:
  - type: ci
    spec:
      steps:
      - name: test
        type: run
        spec:
          container: gradle:jdk10
          script: |-
            gradle assemble
            gradle check
      - name: notify
        type: plugin
        when: failure()
        spec:
          name: slack
          inputs:
            webhook: ${{ secrets.get("slack_webhook") }} 
返回顶部
徐亚京
高级客户经理
17663982076
2679672214
统一服务热线 4006-8899-23
我要提问提问有任何问题,您都可以在这里提问。 问题反馈反馈点击这里,让我们聆听您的建议与反馈。