Azure DevOps - 拉取请求工作流和部署

Azure DevOps - Pull Request Workflow and Deployments

我对如何使用拉取请求设置此工作流有点困惑。

我有一个现有的多阶段 YAML 构建管道,总而言之,它执行以下操作:

  1. 从任何分支运行构建
  2. 如果源分支是 feature/* 或 release/* 并且构建成功,则对 Development Environment/Resource 运行部署作业
  3. 如果源分支是 release/*
  4. ,则对 UAT Environment/Resource 运行部署作业
  5. 运行到 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/')
      )
    )