0

我最近为我的项目应用了多阶段 YAML,该项目由 CI 和 CD 组成。

之后,我将分支策略设置为在创建拉取请求时触发 CI 部分,方法是在 CD 阶段添加条件以跳过它。

trigger:
  branches: 
    include: 
    - master
  paths:
    include:
    ...

stages:
  - stage: Build
    jobs:
      - job: Build
        pool:
          vmImage: 'windows-latest'

        steps:
        ...
  
  - stage: Deploy
    condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
    displayName: 'Deploy'
    jobs:
      ... 

一旦拉取请求完成,整个 CI/CD 部分再次触发,因为主分支有新的代码被推入。有没有办法阻止 CI 再次运行,或者从以前的运行中下载工件,所以有点“恢复”光盘?

这个想法是在创建拉取请求时仅运行 CI,并在拉取请求完成后继续运行 CD。

4

1 回答 1

0

通过将 CI 和 CD 拆分为 2 个 yaml 文件来解决,其中 CD 消耗来自 CI 的工件。

当 PR 在具有路径过滤器的分支策略中设置触发器以指定 CI,并且 CD 设置为具有相同路径过滤器的相同分支的触发器时。这样,CD 将在 PR 完成后触发,因为分支已更新,然后它将下载 CI 在 PR 期间创建的工件。

于 2021-06-03T11:34:10.183 回答