全部產品
Search
文件中心

Alibaba Cloud DevOps:使用 template 文法動態配置流水線

更新時間:Mar 20, 2025

雲效 Flow 流水線支援使用 template 文法來動態渲染流水線 YAML,滿足相同或類似邏輯 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。

image

情境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動態決定部署幾個應用。流水線運行效果如下:

說明

可以在預覽模式頁簽中,設定可視化的自訂變數值。

image