【问题标题】:Azure DevOps - Pull Request Workflow and DeploymentsAzure DevOps - 拉取请求工作流和部署
【发布时间】:2020-08-07 09:56:00
【问题描述】:

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

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

  1. 从任何分支运行构建
  2. 如果源分支是 feature/* 或 release/* 并且构建成功,则向开发环境/资源运行部署作业
  3. 如果源分支是 release/*,则对 UAT 环境/资源运行部署作业
  4. 如果源分支是主分支,则将部署作业运行到实时/生产环境/资源

所以在 CI 的背后,这个工作流似乎工作正常,正确的阶段根据分支等运行。

然后我决定分支策略和拉取请求可能是代码质量的更好选择,而不是让任何主要分支直接提交,所以我开始重新设计 YAML 以进行帐户 - 主要是通过删除触发器来

trigger: none

这现在可以根据分支策略正常工作,只有在打开开发或主控的拉取请求时才会启动构建。

然而,这就是我对它应该如何工作以及我认为它是如何工作的有点困惑的地方......

首先 - 是否不可能在拉取请求的后面触发多阶段 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 中删除多阶段部署并恢复使用发布管道来处理拉取请求(可能有审批门??)

提前致谢!

【问题讨论】:

    标签: azure-devops azure-repos


    【解决方案1】:

    看起来像是 YAML 中的条件问题。

    如果管道由 PR 触发。 variables['Build.SourceBranch'] 的值将是 refs/pull/<PR id>/merge。上述条件startsWith(variables['Build.SourceBranch'], 'refs/heads/feature/')中的表达式为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/')
          )
        )
    

    【讨论】:

    • 谢谢 - 这确实是不正确的条件。我还需要重新添加触发器,但将它们限制为特定的分支通配符,现在所有工作都按预期工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    相关资源
    最近更新 更多