全部產品
Search
文件中心

Alibaba Cloud DevOps:使用 needs 文法控制任務依賴

更新時間:Mar 20, 2025

本文主要介紹如何使用 needs 文法控制 Job 執行順序。

  • 雲效流水線 YAML 支援 stages.<stage_id>.jobs.<job_id>.needs 文法定義 Job 依賴。

  • 典型情境如下:app1、app2 需要一起構建部署:app1構建任務依賴app1單元測試和app1代碼掃描任務都完成,app2構建任務依賴app2單元測試和app2代碼掃描任務都完成,app1和app2構建階段可以並行,以提升效率;app2部署依賴app1部署完成。

  • 上述情境樣本 YAML 和運行效果如下:

    image

    sources: 
      my_repo1:
        type: gitSample
        name: app1代碼源
        endpoint: https://atomgit.com/flow-example/spring-boot.git
        branch: master
      my_repo2:
        type: gitSample
        name: app2代碼源
        endpoint: https://atomgit.com/flow-example/node-expressjs.git
        branch: master
    defaultWorkspace: my_repo1
    stages:
      build_stage:
        name: 構建
        jobs:
          test_job1:
            name: app1單元測試
            steps:
              command_step:
                name: 執行命令
                step: Command
                with:
                  run: |
                    echo This is build job...
          scan_job1:
            name: app1代碼掃描
            steps:
              command_step:
                name: 執行命令
                step: Command
                with:
                  run: |
                    echo This is build job...
          test_job2:
            name: app2單元測試
            steps:
              command_step:
                name: 執行命令
                step: Command
                with:
                  run: |
                    echo This is build job...
          scan_job2:
            name: app2代碼掃描
            steps:
              command_step:
                name: 執行命令
                step: Command
                with:
                  run: |
                    echo This is build job...
          build_job1:
            name: app1構建
            # 聲明依賴任務,app1構建依賴app1單元測試和代碼掃描任務都完成
            needs: 
              - test_job1
              - scan_job1
            steps:
              command_step:
                name: 執行命令
                step: Command
                with:
                  run: |
                    echo This is build job...
          build_job2:
            name: app2構建
            # 聲明依賴任務,app2構建依賴app2單元測試和代碼掃描任務都完成
            needs: 
              - test_job2
              - scan_job2
            steps:
              command_step:
                name: 執行命令
                step: Command
                with:
                  run: |
                    echo This is build job...
      deploy_stage:
        name: 部署
        jobs:
          deploy_job1:
            name: app1部署
            steps:
              command_step:
                name: 執行命令
                step: Command
                with:
                  run: echo This is deploy env 1...
          deploy_job2:
            name: app2部署
            # 聲明依賴任務,app2部署依賴app1部署任務完成
            needs: deploy_job1
            steps:
              command_step:
                name: 執行命令
                step: Command
                with:
                  run: echo This is deploy env 2...