首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有条件地使用Azure管道上的容器?

如何有条件地使用Azure管道上的容器?
EN

Stack Overflow用户
提问于 2021-11-20 13:00:19
回答 1查看 161关注 0票数 1

我有一个带有矩阵的AzP作业,其中需要在容器中运行(旧的编译器测试),如何在容器中有条件地运行jop?我尝试了下面的方法,但这似乎不起作用,即容器从未被使用过,尽管我很确定我遵循了文档中的所有指令

代码语言:javascript
复制
stages:
  - stage: Test
    jobs:
      - job: 'Linux'
        strategy:
          matrix:
            GCC_10:
              CXX: g++-10
              VM_IMAGE: ubuntu-20.04
            GCC_9:
              CXX: g++-9
              VM_IMAGE: ubuntu-20.04
            Clang_3_7:
              CXX: clang++-3.7
              VM_IMAGE: ubuntu-20.04
              CONTAINER: ubuntu:16.04
        pool:
          vmImage: $(VM_IMAGE)
        ${{ if variables['CONTAINER'] }}:
          container:
            image: $[ variables['CONTAINER'] ]
            options:  "--name ci-container -v /usr/bin/docker:/tmp/docker:ro"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-20 13:36:04

您不能使用来自matrix的变量来实现这一点,因为模板表达式(${{ }})呈现得非常早,而且它们无法访问这些变量。请参阅此页面以了解管道的处理方式:流水线运行顺序

  1. 首先,展开模板并计算模板表达式。 ..。
  2. 对于选择要运行的每个作业,将多个信任(策略:矩阵或策略:并行在YAML中)扩展为多个运行时作业。

但是,您可以通过使用运行时参数 (模板表达式可用)实现所需的结果:

代码语言:javascript
复制
parameters:
  - name: matrix
    type: object
    default:
      GCC_10:
        CXX: g++-10
        VM_IMAGE: ubuntu-20.04
      GCC_9:
        CXX: g++-9
        VM_IMAGE: ubuntu-20.04
      Clang_3_7:
        CXX: clang++-3.7
        VM_IMAGE: ubuntu-20.04
        CONTAINER: ubuntu:16.04

stages:
  - stage: Test
    jobs:
      - ${{ each item in parameters.matrix }}:
          - job: Linux_${{ item.Key }}
            pool:
              vmImage: ${{ item.Value.VM_IMAGE }}
            ${{ if item.Value.CONTAINER }}:
              container:
                image: ${{ item.Value.CONTAINER }}
                options: --name ci-container -v /usr/bin/docker:/tmp/docker:ro
            steps:
              - bash: echo CXX = ${{ item.Value.CXX }}

这将呈现给

代码语言:javascript
复制
parameters:
- name: matrix
  type: object
  default:
    GCC_10:
      CXX: g++-10
      VM_IMAGE: ubuntu-20.04
    GCC_9:
      CXX: g++-9
      VM_IMAGE: ubuntu-20.04
    Clang_3_7:
      CXX: clang++-3.7
      VM_IMAGE: ubuntu-20.04
      CONTAINER: ubuntu:16.04
stages:
- stage: Test
  jobs:
  - job: Linux_GCC_10
    pool:
      vmImage: ubuntu-20.04
    steps:
    - task: Bash@3
      inputs:
        targetType: inline
        script: echo CXX = g++-10
  - job: Linux_GCC_9
    pool:
      vmImage: ubuntu-20.04
    steps:
    - task: Bash@3
      inputs:
        targetType: inline
        script: echo CXX = g++-9
  - job: Linux_Clang_3_7
    pool:
      vmImage: ubuntu-20.04
    container:
      image: ubuntu:16.04
      options: --name ci-container -v /usr/bin/docker:/tmp/docker:ro
    steps:
    - task: Bash@3
      inputs:
        targetType: inline
        script: echo CXX = clang++-3.7
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70046143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档