Azure DevOps - 拉取请求工作流和部署
Azure DevOps - Pull Request Workflow and Deployments
我对如何使用拉取请求设置此工作流有点困惑。
我有一个现有的多阶段 YAML 构建管道,总而言之,它执行以下操作:
- 从任何分支运行构建
- 如果源分支是 feature/* 或 release/* 并且构建成功,则对 Development Environment/Resource 运行部署作业
- 如果源分支是 release/*
,则对 UAT Environment/Resource 运行部署作业
- 运行到 Live/Production Environment/Resource 的部署作业,如果源分支是 master
所以在 CI 之后,这个工作流程似乎工作正常,正确的阶段是 运行 取决于分支等
然后我决定分支策略和拉取请求可能是代码质量更好的选择,而不是让任何主要分支直接提交,所以我开始重新编写 YAML 以说明 - 主要是通过删除触发器到
trigger: none
这现在可以根据分支策略正常工作,只有在打开对 develop 或 master 的拉取请求时才会启动构建。
然而,这就是我对它应该如何工作以及我认为它如何工作有点困惑的地方....
首先 - 是否无法在拉取请求后触发多阶段 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%\inetpub\wwwroot\App'
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/')
中的express会是false,导致跳过该阶段。有关详细信息,请参阅 build variables。
您可以尝试使用variables['System.PullRequest.SourceBranch']
,它将评估为 PR 的源分支的值。查看 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/')
)
)
我对如何使用拉取请求设置此工作流有点困惑。
我有一个现有的多阶段 YAML 构建管道,总而言之,它执行以下操作:
- 从任何分支运行构建
- 如果源分支是 feature/* 或 release/* 并且构建成功,则对 Development Environment/Resource 运行部署作业
- 如果源分支是 release/* ,则对 UAT Environment/Resource 运行部署作业
- 运行到 Live/Production Environment/Resource 的部署作业,如果源分支是 master
所以在 CI 之后,这个工作流程似乎工作正常,正确的阶段是 运行 取决于分支等
然后我决定分支策略和拉取请求可能是代码质量更好的选择,而不是让任何主要分支直接提交,所以我开始重新编写 YAML 以说明 - 主要是通过删除触发器到
trigger: none
这现在可以根据分支策略正常工作,只有在打开对 develop 或 master 的拉取请求时才会启动构建。
然而,这就是我对它应该如何工作以及我认为它如何工作有点困惑的地方....
首先 - 是否无法在拉取请求后触发多阶段 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%\inetpub\wwwroot\App'
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/')
中的express会是false,导致跳过该阶段。有关详细信息,请参阅 build variables。
您可以尝试使用variables['System.PullRequest.SourceBranch']
,它将评估为 PR 的源分支的值。查看 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/')
)
)