云效 Flow 流水线支持使用 template 语法来动态渲染流水线 YAML,满足多个相同或类似逻辑 Job 批量配置场景,满足多 Job 按需动态生成场景,帮助降低流水线 YAML 重复代码,灵活编排多任务。
前提条件
通过首行注释`template=true`
指定 template 模式,支持使用 `{{ }}`
定义模板,遵循 `go template`
原生语法;支持使用 `variables`
定义的变量作为参数渲染流水线。典型适用场景如下:
场景1:多操作系统、多SDK版本兼容性测试场景
# template=true
variables:
- key: osList
type: Object
value: ["linux", "windows"]
- key: jdkVersionList
type: Object
value: ["10", "11", "17"]
stages:
build_stage:
name: 兼容性测试
jobs: # 双层循环,生成 2*3 个Job
{{ range $os := .osList}}
{{ range $jdk := $.jdkVersionList}}
{{ $os }}_JDK{{ $jdk }}_job:
name: 测试-{{ $os }}-JDK{{ $jdk }}
my_step:
name: 执行命令
step: Command
with:
run: |
echo 'test on {{ $os }}-JDK{{ $jdk }}"
{{ end }}
{{ end }}
上述示例遍历["linux", "windows"]
2个操作系统、遍历["10", "11", "17"]
3个 JDK版本,使用template的range循环,生成 6 个相同逻辑的 Job。流水线运行效果如下:
场景2:多应用动态按需构建部署
# template=true
variables:
- key: appnames
type: Object
value: ["app1", "app2", "app3"]
sources:
{{ range $app := .appnames }}
repo_{{ $app }}:
type: codeup
name: 代码源名称-{{ $app }}
endpoint: https://codeup.aliyun.com/07880db8-fd8d-4769-81e5-04093aaf7b2b/{{ $app }}.git
branch: master
certificate:
type: serviceConnection
serviceConnection: wwnbrqpihykbiko4
{{ end }}
defaultWorkspace: repo_app1
stages:
build_stage:
name: 构建阶段
jobs:
{{ range $app := .appnames }}
build_job_{{ $app }}:
name: 构建任务-{{ $app }}
sourceOption: ['repo_{{ $app }}']
steps:
build_{{ $app }}:
step: Command
name: 构建-{{ $app }}
with:
run: "echo start build {{ $app }}\n"
{{ end }}
deploy_stage:
name: 部署阶段
jobs:
{{ range $app := .appnames }}
deploy_job_{{ $app }}:
name: 部署任务-{{ $app }}
needs: build_stage.build_job_{{ $app }}
steps:
build_{{ $app }}:
step: Command
name: 部署-{{ $app }}
with:
run: "echo start deploy {{ $app }}\n"
{{ end }}
上述示例根据应用配置多个应用代码源、多个应用构建任务、多个应用部署任务,可根据运行时输入环境变量appnames
动态决定部署几个应用。流水线运行效果如下:
说明
可以在预览模式页签中,可视化的设置自定义变量值。
文档内容是否对您有帮助?