如何在Azure DevOps管道中使用手动验证任务?

Tho*_*mas 6 azure-pipelines

我已经阅读了手动验证任务的官方文档

\n

这是我的 YAML 管道中的阶段之一:

\n
  - stage: Prod\n    dependsOn: QA\n    condition: and(succeeded(\'QA\'), eq(variables[\'Build.SourceBranch\'], \'refs/heads/release\'))\n    jobs:\n      - job: WaitForValidation\n        pool: server\n        displayName: Wait for approval\n        timeoutInMinutes: 4320\n        steps:\n          - task: ManualValidation@0\n            timeoutInMinutes: 1440 # task times out in 1 day\n            inputs:\n              notifyUsers: |\n                one@email.com\n                other@email.com\n              instructions: \'Approve the deployment to Prod\'\n      - template: build-and-deploy-stage.yml\n        parameters:\n          targetEnv: \'Prod\'\n          dataset: \'prod\'\n          token: $(deploymentTokenProd)\n
Run Code Online (Sandbox Code Playgroud)\n

这是build-and-deploy-stage.yml

\n
parameters:\n  - name: targetEnv\n    type: string\n  - name: dataset\n    type: string\n  - name: token\n    type: string\n\njobs:\n  - job: Deploy\n    displayName: Build and deploy to ${{ parameters.targetEnv }}\n    steps:\n      - task: NodeTool@0\n        displayName: \'Install Node LTS\'\n        inputs:\n          versionSpec: \'14.18.x\'\n      # \xe2\x80\xa6 not relevant but using parameters.dataset and parameters.token\n
Run Code Online (Sandbox Code Playgroud)\n

不幸的是,Deploy即使没有人手动批准/恢复管道,该作业仍会运行。

\n

只能在一个阶段结束时使用才能进入下一阶段吗?

\n

Tho*_*mas 6

我最终dependsOn在工作中使用了。


Juk*_*kaK 1

我认为你的问题是你的管道中实际上必须有作业,因为 yaml 模板中有一个指定的作业。还没有实际测试过它,但我认为第一个作业中的手动验证步骤仅适用于该作业,而另一个作业无论如何都会启动。

\n

可能有多种方法可以解决问题(通过添加 DependsOn 子句和/或将模板更改为仅包含步骤),但我实际上建议在 Azure DevOps 中添加一个环境(在 Pipelines -> Environments 下,让我们调用现在是“生产”),向该环境添加手动审批,并将生产阶段和作业更改为针对“生产”环境的部署作业。

\n

所以像这样:

\n
  - stage: Prod\n    displayName: "Deployment: Production"\n    dependsOn: QA\n    jobs:\n      - deployment: deploy_prod\n        displayName: Deploy Production        \n        pool: server\n        condition: and(succeeded(\'QA\'), eq(variables[\'Build.SourceBranch\'], \'refs/heads/release\'))\n        environment: Production\n        strategy:\n          runOnce:\n            deploy:\n              steps:\n                - template: build-and-deploy-stage.yml\n                  parameters: \n                    targetEnv: \'Prod\'\n                    dataset: \'prod\'\n                    token: $(deploymentTokenProd)\n
Run Code Online (Sandbox Code Playgroud)\n

模板只需以下步骤:

\n
parameters:\n  - name: targetEnv\n    type: string\n  - name: dataset\n    type: string\n  - name: token\n    type: string\n\nsteps:\n  - task: NodeTool@0\n    displayName: \'Install Node LTS\'\n    inputs:\n      versionSpec: \'14.18.x\'\n  # \xe2\x80\xa6 not relevant but using parameters.dataset and parameters.token\n
Run Code Online (Sandbox Code Playgroud)\n

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/environments?view=azure-devops

\n

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/deployment-jobs?view=azure-devops

\n