4

即使我设置了 System.Debug=True,除了“作业被跳过”之外,我没有得到任何其他信息。字面意思就是这四个字。

我在 Azure Devops 上创建了一个 YAML-Release 管道,它基本上运行这些作业:

  • 工作:build_release
  • 工作:部署:deploy_test
  • 工作:部署:deploy_stage

为了测试行为,我首先只运行了前两个作业并部署到 TEST。现在我想部署到 STAGE 但似乎管道仅在我从头开始/创建新版本时才起作用。但我现在想做的是将已经存在的版本从 TEST 部署到 STAGE。当我尝试通过重新运行管道来做到这一点时,Azure 会跳过所有步骤。为什么会这样?我怎样才能避免这种情况并重新运行管道?我没有设置任何条件。

编辑附加信息:

管道结构


trigger:
    - release/*

variables:
     ...

resources:
    -   repo: self


pool:
    vmImage: $(vmImageName)

stages:
    -   stage: build_release
        displayName: 'awesome build'
        condition: contains(variables['Build.SourceBranchName'], 'release/')
        jobs:
            -   job: build_release
                steps:
                    ...

    -   stage: deploy_test
        displayName: 'awesome test deploy'
        jobs:
            -   deployment: deploy_test
                environment: 'test'
                strategy:
                    runOnce:
                        deploy:
                            steps:
                               ...

    -   stage: deploy_stage
        displayName: 'awesome stage deploy'
        jobs:
            -   deployment: deploy_stage
                environment: 'stage'
                strategy:
                    runOnce:
                        deploy:
                            steps:
                               ...

我尝试以两种不同的方式触发它,但结果相同(所有内容都被跳过): A. 我创建了一个新版本,它是之前部署的版本的副本。B. 我点击了运行管道。

4

2 回答 2

6

该问题是由condition: contains(variables['Build.SourceBranchName'], 'release/')您为 stage 指定的条件引起的build_release

当触发器设置为- release/*. 变量variables['Build.SourceBranchName']将被评估为 . 之后的分支名称/

例如:

如果您从分支触发了管道release/release1.0。的值variables['Build.SourceBranchName']release1.0代替release/release1.0. 所以条件contains(variables['Build.SourceBranchName'], 'release/')永远是假的,这导致阶段build_release被跳过。

在此处输入图像描述

并且,如果您没有指定 stagedeploy_test和 stage的依赖关系deploy_stage,则下一个阶段将默认依赖于上一个阶段。所以这两个阶段也被跳过了,因为阶段build_release被跳过了。这就是为什么您看到所有步骤都被跳过的原因。

在此处输入图像描述

解决方案:

在条件中使用变量。 Build.SourceBranch

更改条件如下:(发布分支中的 yaml 文件也应更改如下

- stage: build_release
  displayName: 'awesome build'
  condition: contains(variables['Build.SourceBranch'], 'release/') #use Build.SourceBranch

注意:如果您手动触发了您的管道。请确保您选择从发布分支触发管道。或者默认情况下,管道将从主分支触发。

在此处输入图像描述

于 2020-12-15T03:35:29.833 回答
0

这里的问题是,在创建管道运行时,听起来好像没有选择部署阶段。因此,在管道的编译时,该阶段被跳过,因为它被定义为在该运行中被跳过。

至于您正在运行什么,第一个问题是运行 deploy_stage 的这些更改是在主分支中吗?除非另有说明,否则默认情况下管道将针对主分支运行。

于 2020-12-14T16:34:08.627 回答