Azure DevOps YAML管道手动干预任务与其他任务并行运行

5
我希望作业能够一个接一个地执行,第一个作业应控制以下作业的执行。
由于目前在Kubernetes之外的部署中没有可用的YAML管道批准,因此我正在使用手动干预来阻止作业运行。但显然,它并不会在之前停止作业,而是会停止即将到来的阶段。我做错了什么?我希望在干预时收到一些通知,但它立即失败并且根本不停止下一个作业。

enter image description here

这是部署 STG 阶段的代码部分,其中 parameters.interventionEnabled 被设置为 true
jobs:
- job: RunOnServer
  displayName: 'Reject or resume'
  pool: server
  continueOnError: false
  steps:
  - task: ManualIntervention@8
    displayName: 'Manual Intervention'
    timeoutInMinutes: 0
    inputs:
      instructions: 'reject or resume'
    enabled: ${{ parameters.interventionEnabled }}

- job: Deploy
  displayName: ${{ parameters.name }}
  pool:
    name: ${{ parameters.agentPoolName }}
  steps:
  - checkout: none # skip checking out the default repository resource

  - task: DownloadPipelineArtifact@2
    displayName: Download NPM build artifact
    inputs:
      artifact: ${{ parameters.artifactName }}
      buildType: 'current'
      targetPath: ${{ parameters.artifactPath }}

手动干预任务似乎只能在UI而非YAML中工作。需求描述正是由@Eric Smith提供的此路线图所述。 - Yang Shen - MSFT
2个回答

5

嗨 Andree,ManualIntervention@8 不支持在 YAML 中使用。它已经被路线图规划于2020\Q2

我想你想要使用的路线是使用带有批准通用环境类型

所以你可以像下面这样在 yaml 中定义一个部署任务和环境:

- deployment: DeploymentHosted Context
  displayName: Runs in Hosted Pool
  pool:
    vmImage: 'Ubuntu-16.04'
  # creates an environment if it doesn't exist
  environment: 'Dev'
  strategy:
    runOnce:
      deploy:
        steps:
        - bash: |
            echo This multiline script always runs in Bash.
            echo Even on Windows machines!

你可以使用GUI来保护环境。

  • 导航到Pipelines -> Environments
  • 选择环境(您可以预先创建它们)。
  • 然后添加一个批准

    approvals menu

approvals

与经典的发布定义并能够手动触发阶段相比,存在一些缺点。您可能不想让每个工件都成为每个阶段的候选项,如果您不批准环境,它最终会超时并报告失败。在此处评论中有其他很好的讨论。


谢谢,但问题是我不使用环境,因为此发布管道不会发布到AKS,而是将编译的React SPA应用程序发布到BLOB,因此在这种情况下环境不适用。 :( - Andree
2
@Andree,你可以创建一个通用环境来代表你的React SPA。环境不一定要是AKS。你可以创建没有资源的环境,然后按照上面的工作流程使用批准来保护它。 - Eric Smith
谢谢。我没有意识到这一点,它真的解决了我的情况。 - Andree

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接