我对如何使用pull请求设置此工作流有点困惑。
我已经建立了一个现有的多阶段YAML构建管道,该管道概括如下:
- 从任何分支运行生成
- 如果源分支是feature/*或release/*并且构建成功,则向开发环境/资源运行部署作业
- 如果源分支已发布,则向UAT环境/资源运行部署作业/*
- 如果源分支是master,则运行到Live/Production Environment/Resources的部署作业
因此,在CI的背后,此工作流似乎运行良好,正确的阶段取决于分支等。
然后,我决定分支策略和pull请求可能是提高代码质量的更好选择,而不是让任何主要分支直接提交,所以我开始重新处理YAML,主要是通过删除的触发器
trigger: none
这现在可以根据分支策略正确工作,只有当打开对开发或master的pull请求时,构建才会启动。
然而,这就是我对这应该如何运作以及我认为它是如何运作感到有点困惑的地方。。。。
首先,是否不可能在pull请求后面触发多阶段YAML(使用Azure Repos(?在我的脑海中,我想做的只是引入拉取请求和分支策略,但保持对环境的多阶段部署。然而,部署作业阶段现在都被跳过了,但这可能与我在YAML中的条件有关,如下所示:
- stage: 'Dev'
displayName: 'Development Deployment'
dependsOn: 'Build'
condition: |
and
(
succeeded()
eq(variables['Build.Reason'], 'PullRequest'),
ne(variables['System.PullRequest.PullRequestId'], 'Null'),
or
(
startsWith(variables['Build.SourceBranch'], 'refs/heads/feature/'),
startsWith(variables['Build.SourceBranch'], 'refs/heads/release/')
)
)
jobs:
- deployment: Deploy
pool:
name: 'Development Server Agent Pool'
variables:
Parameters.WebsitePhysicalPath: '%SystemDrive%inetpubwwwrootApp'
Parameters.VirtualPathForApplication: ''
Parameters.VirtualApplication: ''
environment: 'Development.Resource-Name'
.....
我有什么东西不见了吗?或者,我必须从YAML中删除多阶段部署,并恢复使用Release Pipelines来处理拉取请求(可能有批准门??(
提前感谢!
这看起来像是YAML中的条件问题。
如果管道由PR触发,则值variables['Build.SourceBranch']
将为refs/pull/<PR id>/merge
。上述条件startsWith(variables['Build.SourceBranch'], 'refs/heads/feature/')
中的表达式将为false,从而导致跳过该阶段。有关详细信息,请参阅生成变量。
您可以尝试使用variables['System.PullRequest.SourceBranch']
,它将被评估为PR的源Branch的值。有关详细信息,请查看系统变量。见下文:
condition: |
and
(
succeeded(),
eq(variables['Build.Reason'], 'PullRequest'),
ne(variables['System.PullRequest.PullRequestId'], ''),
or
(
startsWith(variables['System.PullRequest.SourceBranch'], 'refs/heads/feature/'),
startsWith(variables['System.PullRequest.SourceBranch'], 'refs/heads/release/')
)
)