0

我正在尝试在 Microsoft 托管和自托管(容器化)构建代理上运行的管道中使用容器作业模板。

ContainerJob 模板在运行时运行良好,Microsoft Hosted但在自托管代理中失败cannot run container inside a containerized build agent。错误是有道理的。

我想如果可以有条件地添加/删除以下部分,那么相同的容器作业模板在两个代理中都可以使用。

${{ if not(parameters.isSelfHosted) }}:
  container:
    image: ${{ parameters.generalImage}}
    endpoint: ${{ parameters.endpoint}} 
  environment: ${{ parameters.environment }}

但是条件始终为真,并且始终container添加部分并且始终在自托管代理中失败。我认为模板内不允许随意表达表达式。

我可以将此模板分成 2 个模板并将它们加载到各自的构建代理中,但这是最后的手段。非常感谢动态创建/更改模板的任何帮助。

4

1 回答 1

0

您在寻找有条件的容器工作吗?查看我的脚本:

parameters:
- name: isSelfHosted
  displayName: isSelfHosted
  type: boolean
  default: true
  values:
  - false
  - true

stages:
- stage: Build
  displayName: Build stage

  jobs:
  - job: Build
    displayName: Build
    ${{ if not(parameters.isSelfHosted) }}:
      container: mcr.microsoft.com/dotnet/core/sdk:2.2
      steps:
        - task: CmdLine@2
          inputs:
            script: |
                echo 2.2 SDK

    ${{ if eq(parameters.isSelfHosted, 'true') }}:
      container: mcr.microsoft.com/dotnet/core/sdk:2.1
      steps:
        - task: CmdLine@2
          inputs:
            script: |
                echo 2.1 SDK

我可以通过参数值选择哪个容器(.net core 2.1 或 .net core 2.2)isSelfHosted

它使用运行时参数,因此我可以在运行管道时管理条件(选中或取消选中该框):

在此处输入图像描述

更新:

请参阅带有参数的作业、阶段和步骤模板

将以下内容移动到模板文件中:

stages:
- stage: Build
  displayName: Build stage

  jobs:
  - job: Build
    displayName: Build
    ${{ if not(parameters.isSelfHosted) }}:
      container: mcr.microsoft.com/dotnet/core/sdk:2.2
      steps:
        - task: CmdLine@2
          inputs:
            script: |
                echo 2.2 SDK

    ${{ if eq(parameters.isSelfHosted, 'true') }}:
      container: mcr.microsoft.com/dotnet/core/sdk:2.1
      steps:
        - task: CmdLine@2
          inputs:
            script: |
                echo 2.1 SDK

那么主要azure-pipelines.yml应该是

parameters:
- name: isSelfHosted
  displayName: isSelfHosted
  type: boolean
  default: true
  values:
  - false
  - true

stages:
- template: templates/xxx.yml  # Template reference
  parameters:
    isSelfHosted: xxx (Value of isSelfHosted parameter)
于 2020-07-24T11:09:03.350 回答