流水线编排
手册分类
- 1. 禅道DevOps解决方案介绍
- 1.1 关于禅道DevOps解决方案
- 2. 安装与升级
- 2.1 快速安装
- 3. 服务
- 3.1 管理服务
- 4. 代码库
- 5. 流水线
- 6. 制品库
- 6.1 管理制品库
- 7. 部署
- 8. DevOps设置
- 9. 命令行工具
- 9.1 安装及升级
- 9.2 status子命令说明
条件判断 分享链接
作者:赵红梅
最后编辑:赵红梅 于 2024-10-29 14:42:07
浏览量:379
本篇目录
条件判断指的是流水线中步骤的运行条件。
条件判断中有很多变量可以使用。
tip 提示
- 每个仓库可以创建多条流水线。
- 为触发器(如推送、合并请求和新建标签)创建流水线,可以减少对条件的需求。
以下是支持的条件比较操作符:
类型 | 操作符 |
---|---|
比较 |
== , !=
|
逻辑判断 |
not , and , or
|
正则匹配 |
matches
|
字符串 |
contains , startsWith , endsWith
|
以下是支持的函数:
类型 | 语法 |
---|---|
总是执行 |
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") }}