0

问题:如何在 YAML 管道中为以下上下文设置 CI/CD。

分支机构

  • 掌握
  • 释放/{ALPHABETICAL NAME} 例如。release/Albert 下一个版本是 release/Bertrand 等等。

环境

  • 接受:推送到主服务器上的所有内容
  • 测试:最新版本前。释放/伯特兰
  • 沙盒:最新版本-1(在这里我们可以测试修补程序)例如。释放/阿尔伯特
  • live:最新版本-1(带有修补程序)

最接近的解决方案

build:创建项目构件 build.yml

trigger:
- master
- release/*

pool:
  vmImage: 'ubuntu-latest'

steps:

- powershell: |
    New-Item -Path . -Name "testfile1.txt" -ItemType "file" -Value "This is a text string."

- publish: $(Pipeline.workspace)
  artifact: testArtifact

release-phase1:部署 master 分支以接受 release-phase1.yml

trigger: none

resources:
  pipelines:
    - pipeline: pipelineId
      source: build
      trigger:
        branches: 
        - master

pool:
  vmImage: 'ubuntu-latest'

jobs:
- deployment: DeployWeb
  environment: 'testenvironment'
  strategy: 
    runOnce:
      deploy:
        steps:
        - script: echo FOO

release-phase2:部署发布分支以测试 release-phase2.yml

trigger: none

resources:
  pipelines:
    - pipeline: pipelineId
      source: build
      trigger:
        branches: 
        - release/current

pool:
  vmImage: 'ubuntu-latest'

jobs:
- deployment: DeployWeb
  environment: 'testenvironment'
  strategy: 
    runOnce:
      deploy:
        steps:
        - script: echo FOO

release-phase3:将 release-1 分支部署到沙箱,并在手动批准后部署到实时 release-phase3.yml

trigger: none

resources:
  pipelines:
    - pipeline: pipelineId
      source: build
      trigger:
        branches: 
        - release/previous


pool:
  vmImage: 'ubuntu-latest'

jobs:
- deployment: DeployWeb
  environment: 'testenvironment'
  strategy: 
    runOnce:
      deploy:
        steps:
        - script: echo FOO

此解决方案无法满足我们需求的原因:

  • 发布分支的名称不是静态的。
  • 我们应该能够运行 release-phase3.yml 管道,而无需在此分支上运行构建。它应该从该分支的最新版本下载工件。事实并非如此。

短的目的

4

1 回答 1

0

由于您有多个分支(主分支和发布分支),因此会构建不同的分支并将其部署到不同的环境。因此,您可以尝试在每个分支中使用 CI 构建 yaml 管道,并将 CD 部署 yaml 管道放在主分支中的模板 yaml中。(您必须在每个分支中都有构建 yaml 文件才能构建此分支中的代码。您可以检查这个线程)。

下面是一个简单的例子。

在主分支

有 azure-pipelines.yml 和 template-deploy.yml。在 azure-pipelines.yml 中,该Environment值将作为参数传递给 template-deploy.yml。这样构建将被部署到其相应的环境中。

天蓝色管道.yml:

trigger: 
- master
- release/*

pool:
  vmImage: 'windows-latest'

resources:
  repositories:
    - repository: deploy
      type: git
      name: {project name}

jobs: 
- job: Build
  steps: 
  - script:  echo "start build job"

- template: template-deploy.yml@deploy
  parameters: 
    envir: "prod"

模板部署.yml:

parameters:
  envir: ""

jobs:
- deployment: DeployWeb
  environment: '${{parameters.envir}}'
  strategy: 
    runOnce:
      deploy:
        steps:
        - script: echo FOO

在发布分支中

您可以定义其单独的 ci 构建 yaml,如下例所示:

release-phase2 分支中的 azure-pipelines.yml:

pool:
  vmImage: 'windows-latest'

resources:
  repositories:
    - repository: deploy
      type: git
      name: {project name}

jobs: 
- job: Build
  steps: 
  - script:  echo "start build job"

- template: template-deploy.yml@deploy
  parameters: 
    envir: "test"
于 2020-02-10T02:21:41.463 回答