我对如何使用拉取请求设置此工作流程感到困惑。
我已经建立了一个现有的多阶段YAML构建管道,概括地说,该管道执行以下操作:
因此,在CI的背面,此工作流程似乎运行良好,根据分支等运行正确的阶段。
然后,我认为分支策略和拉取请求可能是一种更好的代码质量选择,而不是让任何主要分支直接提交,所以我开始对YAML进行返工,主要是删除触发条件,以< / p>
trigger: none
这现在可以根据分支策略正常运行,只有在对开发或主发布的拉取请求打开时,构建才会启动。
但是,这对我应该如何工作以及我认为它如何工作有点困惑....
首先-是否可能无法通过拉取请求(使用Azure Repos)触发多阶段YAML?在我的脑海中,我要做的只是介绍拉取请求和分支策略,但将多阶段部署保持不变。 但是,现在所有部署工作阶段都被跳过了-但这可能与我在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%\inetpub\wwwroot\App'
Parameters.VirtualPathForApplication: ''
Parameters.VirtualApplication: ''
environment: 'Development.Resource-Name'
.....
有什么我想念的吗? 还是我必须从YAML中删除多阶段部署,然后恢复使用发布管道进行拉取请求(也许带有批准门?)
谢谢!
答案 0 :(得分:1)
看起来像YAML中的条件问题。
如果管道是由PR触发的。值variables['Build.SourceBranch']
将为refs/pull/<PR id>/merge
。上述条件startsWith(variables['Build.SourceBranch'], 'refs/heads/feature/')
中的express将为false,这将导致跳过该阶段。有关更多信息,请参见build variables。
您可以尝试使用variables['System.PullRequest.SourceBranch']
,它将被评估为PR的源Branch的值。检查System variables了解更多信息。见下文:
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/')
)
)