【问题标题】:How to structure Azure Devops Pipelines for test & Release environments?如何为测试和发布环境构建 Azure Devops Pipelines?
【发布时间】:2021-05-16 12:52:10
【问题描述】:

我是 Azure DevOps 的新手,我希望为我的项目创建正确的管道/发布结构。我正在努力了解如何构建我的代码,并为我的构建配置传递正确的值。

我已经创建了我的仓库和分支:

main(已发布/待发布代码的主分支)

feature/add_new_customer(每个工作的功能分支)

uat(合并多个功能提交的分支,专门用于发布前的测试)

我创建了一个构建管道,这为我创建了一个“azure-pipelines.yaml”文件,用于构建和发布构建文件。这是从我的分支触发的:

trigger:
- main
- feature/*
- uat

到目前为止一切顺利。但这是通过在 yaml 中静态/硬编码指定构建配置

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  **buildConfiguration: 'Release'**

我现在已经向我的管道 BuildConfig 添加了一个变量,并将其设置为“UAT”,这样我就可以像这样在我的 yaml 中引用:

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  **buildConfiguration: '$(BuildConfig)'**

这让我可以“动态”设置构建配置,但是如果我创建另一个管道,比如从主分支构建我的发布版本,这会创建一个 azure-pipelines-1.yaml,这肯定是错误的那么必须复制这些文件只是为了更改触发器分支?

是否有一种“正确”的方法可以根据我要签入的分支为不同的环境创建构建?我看过环境,但他们似乎只是为我提供了 VM 或 Kubernetes?我只是想构建一个 .net 框架的旧版 Web 表单应用程序,所以不需要任何花哨的东西。

我还没有开始部署过程!!! :D

【问题讨论】:

    标签: azure-devops azure-pipelines azure-pipelines-tasks


    【解决方案1】:

    当然,您可以拥有一个根据发布管道本身内的变量更改其行为的单一管道。您需要在运行构建时执行此操作,而不是在根变量级别。

    有两种方法可以做到这一点:

    • 构建任务中的 condition: 参数
    • YAML If 选择性地设置变量的语句。

    两者都适用于您的情况,我相信在您的情况下使用 if 语句是最好的。这是一个简单示例中的样子:

    name: Stackoverflow-Example-Variables
    trigger:
        - main
        - feature/*
        - uat
    stages:
        - stage: your_build_stage
          variables:
            - name: solution
              value: '**/*.sln'
            - name: buildPlatform
              value: 'Any CPU'
            - name: buildConfiguration
              ${{ if eq(variables['Build.SourceBranch'], 'refs/heads/main') }}:
                value: 'Release'
              ${{ if ne(variables['Build.SourceBranch'], 'refs/heads/main') }}:
                value: 'UAT'
          displayName: "Build Solution"
          jobs:
            - job: output_message_job
              displayName: "Output Message Job"
              pool:
                vmImage: "ubuntu-latest"
              steps:
                - powershell: |
                    Write-Host ${{ variables.buildConfiguration }}
                    Write-Host $(Build.SourceBranch)
                    
    
                
    

    【讨论】:

    • 非常感谢。正是我所追求的。如果可以的话,快速跟进一下,您现在会创建 3 个单独的发布管道还是一个带有用于 dev/qa/release 阶段的管道?如果是后者,我将如何确定要为正确的构建/环境检索哪些工件?
    • 因此,如果您使用的是 YAML,您将希望将发布阶段包含在与构建相同的管道中。我个人建议坚持使用两个管道,每个管道都能够执行构建和发布。一个人会构建和部署 Dev/QA,触发开发或 rc/* 分支。第二个将部署到 UAT/Production,由 main/master 触发。在您的环境配置中,还包括对 QA/UAT/Prod 的批准检查。
    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    相关资源
    最近更新 更多