Azure YAML-Pipeline 跳过作业,我不知道为什么

Azure YAML-Pipeline skips jobs and I have no idea why

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

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

为了测试行为,我首先只 运行 前两个作业并部署到 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:
                               ...

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

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

中被跳过

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

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

当触发器设置为- release/*时。变量 variables['Build.SourceBranchName'] 将被计算为 /.

之后的分支名称

例如:

如果您从分支 release/release1.0 触发了管道。 variables['Build.SourceBranchName'] 的值将是 release1.0 而不是 release/release1.0。因此条件 contains(variables['Build.SourceBranchName'], 'release/') 将始终为 false,从而导致阶段 build_release 被跳过。

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

解法:

在条件中使用 variable Build.SourceBranch

修改条件如下:(release分支的yaml文件也要修改如下

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

注意:如果您手动触发了管道。请确保您的 select 从发布分支触发管道。或者管道默认从主分支触发。