全部產品
Search
文件中心

Alibaba Cloud DevOps:使用 condition 文法控制任務是否執行

更新時間:Mar 20, 2025

本文主要闡述如何運用條件運算式(condition)來控制某個作業(Job)的執行與否,並提供若干常見的樣本情境。

使用 condition 條件判斷文法,支援引用環境變數,根據條件運算式判斷是否要執行某個 Job。以下樣本中 job2 的 condition 條件引用代碼源分支系統內容變數 "${CI_COMMIT_REF_NAME}" == "develop",當運行分支為 develop時執行 job2,否則跳過。樣本 YAML 代碼及運行效果如下:

image

sources: 
  my_repo:
    type: gitSample
    name: 範例程式碼源
    endpoint: https://atomgit.com/flow-example/spring-boot.git
    branch: master
stages:
  stage1:
    name: 階段1
    jobs:
      command_job1:
        name: job1
        steps:
          command_step:
            name: 執行命令1
            step: Command
            with:
              run: |
                echo This is Job1
  stage2:
    name: 階段2
    jobs:
      command_job2:
        name: job2
        # 條件判斷:運行分支為 develop 時執行該任務
        condition: | 
          "${CI_COMMIT_REF_NAME}" == "develop"		
        steps:
          command_step:
            name: 執行命令2
            step: Command
            with:
              run: echo This is Job2
  stage3:
    name: 階段3
    jobs:
      command_job3:
        name: job3
        steps:
          command_step:
            name: 執行命令3
            step: Command
            with:
              run: echo This is Job3
      command_job4:
        name: job4
        needs: command_job3
        steps:
          command_step:
            name: 執行命令4
            step: Command
            with:
              run: echo This is Job4

樣本情境1:前端應用未更新跳過構建,僅構建後端應用

某些前後端應用依賴情境,先構建前端應用產生靜態檔案、後端應用構建時引用前端靜態檔案。但並不是每個需求都涉及前端應用修改,可根據條件判斷前端應用是否需要構建。樣本中,使用流水線自訂環境變數 "${FRONT_APP_CHANGED}" == "true"作為任務 condition 條件,變數值為true時執行前端應用構建,否則跳過。

image

image

sources: 
  my_repo:
    type: gitSample
    name: 範例程式碼源
    endpoint: https://atomgit.com/flow-example/spring-boot.git
    branch: master
stages:
  build_stage:
    name: 構建
    jobs:
      front_build_job:
        name: 前端應用構建
        # 根據自訂環境變數判斷是否需要執行前端應用構建
        condition: |
          "${FRONT_APP_CHANGED}" == "true"
        steps:
          command_step:
            name: 執行命令
            step: Command
            with:
              run: |
                echo This is front app build job...
      backend_build_job:
        name: 後端應用構建
        needs: front_build_job
        steps:
          command_step:
            name: 執行命令
            step: Command
            with:
              run: |
                echo This is backend app build job...
  deploy_stage:
    name: 部署
    jobs:
      deploy_job:
        name: 部署任務
        steps:
          command_step:
            name: 執行命令
            step: Command
            with:
              run: echo This is deploy job...

樣本情境2:非視窗期發布需要人工審核、視窗期跳過人工審核

生產發布情境,非發布視窗期需要人工審核,而視窗期可以跳過人工審核。

image

sources: 
  my_repo:
    type: gitSample
    name: 範例程式碼源
    endpoint: https://atomgit.com/flow-example/spring-boot.git
    branch: master
stages:
  build_stage:
    name: 構建
    jobs:
      build_job:
        name: 構建任務
        steps:
          command_step:
            name: 執行命令
            step: Command
            with:
              run: |
                echo This is build job...
  approve_stage:
    name: 審批
    jobs:
      approve_job:
        name: 人工卡點
        # 運行分支為 master 時執行審批任務,請替換為實際的審批判斷條件
        condition: | 
          "${CI_COMMIT_REF_NAME}" == "master"		
        component: ManualValidate
        with:
          validatorType: users           # 驗證者類型為組織成員,通過阿里雲 ID 確定審核人員
          validateMethod: and            # 驗證方式 and:會簽(須所有審批人同意)or:或簽(一名審批人同意或拒絕即可)
          validators: 
            - 290591284908846966	       #通過阿里雲控制台擷取阿里雲 ID
  deploy_stage:
    name: 部署
    jobs:
      deploy_job:
        name: 部署任務
        steps:
          command_step:
            name: 執行命令
            step: Command
            with:
              run: echo This is deploy job...

樣本情境3:一次構建按需部署到多套環境

研發團隊情境有多套測試環境,按需使用。可以根據指定環境名稱按需部署到測試環境。

image

image

sources: 
  my_repo:
    type: gitSample
    name: 範例程式碼源
    endpoint: https://atomgit.com/flow-example/spring-boot.git
    branch: master
stages:
  build_stage:
    name: 構建
    jobs:
      build_job:
        name: 構建任務
        steps:
          command_step:
            name: 執行命令
            step: Command
            with:
              run: |
                echo This is build job...
  deploy_stage:
    name: 部署測試環境
    jobs:
      deploy_job1:
        name: 部署測試環境一套
        # 根據指定環境名按需部署
        condition: |
          "${ENVNAME}" == "ENV1"
        steps:
          command_step:
            name: 執行命令
            step: Command
            with:
              run: echo This is deploy env 1...
      deploy_job2:
        name: 部署測試環境二套
        # 根據指定環境名按需部署
        condition: |
          "${ENVNAME}" == "ENV2"
        steps:
          command_step:
            name: 執行命令
            step: Command
            with:
              run: echo This is deploy env 2...