如何为测试和发布环境构建 Azure Devops Pipelines?

时间:2021-02-12 18:50:59

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

我是 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 框架遗留网络表单应用程序,所以不需要任何花哨的东西。

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

1 个答案:

答案 0 :(得分:2)

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

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

  • 构建任务中的条件:参数
  • 有选择地设置变量的 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)
                

            
相关问题