跳过 Azure DevOps 中的管道阶段

mee*_*kat 10 azure docker azure-devops azure-pipelines

问题

当触发下面的管道时,在Build 和 push之后不会运行Dev阶段。

在此输入图像描述

该管道由以开发为目标分支的 PR 触发。

管道.yaml

trigger:
  branches:
    include:
      - master
      - develop

pr:
  branches:
    include:
      - develop

stages:
  # Frontend tests: Triggered by opening new PRs to develop or updating pr to develop.
  - stage: FrontEndTests
    displayName: "Frontend tests"
    condition: eq( variables['Build.Reason'], 'PullRequest') #  Trigger stage only for PullRequests
    jobs:
      - template: /templates/pipelines/npm-unit-tests.yml@templates
        parameters:
          triggerType: ${{ variables.triggerType }}

  # Common build triggered by push to master or develop
  - stage: BuildPush
    displayName: "Build and push"
    condition: ne(variables['Build.Reason'], 'PullRequest') # Don't perform stage if PR triggered pipeline
    variables:
      envName: "common"

    jobs:
      - template: /templates/pipelines/dockerbuild-dashboard-client.yml@templates
        parameters:
          displayName: "Build docker image"
          deploymentName: "docker_build_push"
          dependsOn: ""

  # Dev deploy stage
  - stage: dev
    displayName: "Dev"
    dependsOn: BuildPush
    condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master'))
    variables:
      envName: "dev"

    jobs:
      - template: /templates/pipelines/webapprelease-dashboard-dev-client.yml@templates
        parameters:
          dependsOn: ""
          deploymentName: "publish_container_to_webapp"
          
  # Test deploy stage
  - stage: test
    displayName: "Test"
    dependsOn: BuildPush
    condition: and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/develop'))

    jobs:
      - template: /templates/pipelines/webapprelease-dashboard-test-client.yml@templates
        parameters:
          dependsOn: ""
          deploymentName: "publish_container_to_webapp"

  # Prod deploy stage
  - stage: prod
    displayName: "Prod"
    dependsOn: test
    condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
    variables:
      envName: "prod"

    jobs:
      - template: /templates/pipelines/webapprelease-dashboard-prod-client.yml@templates
        parameters:
          dependsOn: ""
          deploymentName: "publish_container_to_webapp"
Run Code Online (Sandbox Code Playgroud)

问题

为什么 Dev 阶段没有运行?在我看来,dev舞台的条件不具备,但我不明白为什么。

Krz*_*tof 13

在你的情况下succeded被评估为

如果不带任何参数,仅当依赖关系图中所有先前作业都成功或部分成功时,计算结果才为 True。

并FrontEndTests因此被跳过,同时被评估为错误。

请更改为

  condition: |
    and(
    or
    (
      in(dependencies.FrontEndTests.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
      in(dependencies.BuildPush.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
    ),
    ne(variables['Build.SourceBranch'], 'refs/heads/master'))
Run Code Online (Sandbox Code Playgroud)

我在这个案例上进行了测试,它的工作原理如上

pool:
  vmImage: 'ubuntu-latest'

stages:
- stage: build
  displayName: Build
  condition: eq( variables['Build.Reason'], 'PullRequest')
  jobs:
  - job: Build
    steps:
    - bash: echo "Build"
- stage: test
  displayName: Test
  condition: succeeded()
  jobs:
  - job: Test
    steps:
    - bash: echo "Test"
- stage: test2
  displayName: Test2
  condition: |
    or(
      in(dependencies.build.result, 'Succeeded', 'SucceededWithIssues', 'Skipped'),
      in(dependencies.test.result, 'Succeeded', 'SucceededWithIssues', 'Skipped')
    )
  jobs:
  - job: Test2
    steps:
    - bash: echo "Test2"
Run Code Online (Sandbox Code Playgroud)