Azure YAML-Pipeline 跳过作业,我不知道为什么
Azure YAML-Pipeline skips jobs and I have no idea why
即使我设置了 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:
...
我尝试以两种不同的方式触发它,但结果相同(所有内容都被跳过):
答:我创建了一个新版本,它是先前部署版本的副本。
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 从发布分支触发管道。或者管道默认从主分支触发。
即使我设置了 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:
...
我尝试以两种不同的方式触发它,但结果相同(所有内容都被跳过): 答:我创建了一个新版本,它是先前部署版本的副本。 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 从发布分支触发管道。或者管道默认从主分支触发。