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

时间:2020-08-07 09:56:00

标签: azure-devops azure-repos

我对如何使用拉取请求设置此工作流程感到困惑。

我已经建立了一个现有的多阶段YAML构建管道,概括地说,该管道执行以下操作:

  1. 从任何分支机构运行构建
  2. 如果源分支是Feature / *或release / *并且构建成功,则将部署作业运行到Development Environment / Resource。
  3. 如果源分支为release / *,则对UAT环境/资源运行部署作业
  4. 如果源分支为master,则在Live / Production Environment / Resource中运行部署作业

因此,在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中删除多阶段部署,然后恢复使用发布管道进行拉取请求(也许带有批准门?)

谢谢!

1 个答案:

答案 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/')
      )
    )