簡體   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