繁体   English   中英

Azure devops 中跳过的流水线阶段

[英]Skipped pipeline stage in Azure devops

问题

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

在此处输入图像描述

管道由 PR 触发,以 develop 作为目标分支。

管道.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"

问题

为什么 Dev 阶段没有运行? 在我看来, dev阶段的条件没有得到满足,但我不明白为什么。

在您的情况下, succeded被评估为

如果没有 arguments,则仅当依赖关系图中的所有先前作业都成功或部分成功时,才会评估为 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'))

我在这种情况下对此进行了测试,它的工作原理如上

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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM