首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure管道和码头容器:如何使用运行时参数在运行时选择容器?

Azure管道和码头容器:如何使用运行时参数在运行时选择容器?
EN

Stack Overflow用户
提问于 2022-10-06 19:19:40
回答 1查看 73关注 0票数 1

我正在微软代理的Docker容器中运行Azure管道。容器在我的YAML文件的开头指定:

代码语言:javascript
复制
pool:
  vmImage: ubuntu-latest

container: 
  image: mycompany.jfrog.io/xyz-docker-local/myimage:debian10
  options: --privileged
  endpoint: AzureToArtifactory

steps:
- script: |
    [...]

结果:工作正常

我定义了第二个容器,名为myimage:ubuntu22。我想使用一个运行时参数在Debian容器和Ubuntu容器之间进行选择。但我无法找到在容器之间切换的正确语法。

首先尝试切换:

由于在官方Microsoft文档或其他地方没有找到语法,我选择了一种与我对其他资源所做的类似的语法。

代码语言:javascript
复制
parameters:
- name: BuildArchitecture
  type: string
  default: 'x64 ubuntu 22'
  values:
  - 'x64 ubuntu 22'
  - 'x64 debian 10'

pool:
  vmImage: ubuntu-latest

container: 
  ${{ if eq(parameters.buildArchitecture, 'x64 ubuntu 22') }}:
    image: mycompany.jfrog.io/xyz-docker-local/myimage:ubuntu22
    options: --privileged
    endpoint: AzureToArtifactory
  ${{ else }}:
    image: mycompany.jfrog.io/xyz-docker-local/myimage:debian-10
    options: --privileged
    endpoint: AzureToArtifactory

steps:
[...]

结果:“在此上下文中不允许模板表达式。”

第二次尝试:

也许压痕是问题所在。

代码语言:javascript
复制
[...]
container: 
${{ if eq(parameters.buildArchitecture, 'x64 ubuntu 22') }}:
  image: mycompany.jfrog.io/xyz-docker-local/myimage:ubuntu22
  options: --privileged
  endpoint: AzureToArtifactory
${{ else }}:
  image: mycompany.jfrog.io/xyz-docker-local/myimage:debian-10
  options: --privileged
  endpoint: AzureToArtifactory
[...]

结果:“在此上下文中不允许模板表达式。”

第三次尝试:

不是压痕。也许它需要-在每个条件表达式的开头。

代码语言:javascript
复制
[...]
container:
- ${{ if eq(parameters.buildArchitecture, 'x64 ubuntu 22') }}:
  image: mycompany.jfrog.io/xyz-docker-local/myimage:ubuntu22
  options: --privileged
  endpoint: AzureToArtifactory
- ${{ else }}:
  image: mycompany.jfrog.io/xyz-docker-local/myimage:debian-10
  options: --privileged
  endpoint: AzureToArtifactory
[...]

结果:“没有预期的序列。”

第四次尝试:

我想,也许我需要将容器定义为资源。因此,我创建了容器资源,并验证了当我单独选择资源时,管道是否工作,而没有任何选择逻辑。然后,我将逻辑加回:

代码语言:javascript
复制
[...]
resources:
  containers:
  - container: ubuntu
    image: mycompany.jfrog.io/xyz-docker-local/myimage:ubuntu22
    options: --privileged
    endpoint: AzureToArtifactory
  - container: debian
    image: mycompany.jfrog.io/xyz-docker-local/myimage:debian-10
    options: --privileged
    endpoint: AzureToArtifactory

${{ if eq(parameters.buildArchitecture, 'x64 ubuntu 22') }}:
  container: ubuntu
${{ else }}:
  container: debian
[...]

结果:我们回到“在此上下文中不允许使用模板表达式”。

第五次尝试

也许我应该跳过条件逻辑,将容器标记转换为变量。

代码语言:javascript
复制
[...]
variables:
  - name: dockerTag
    ${{ if eq(parameters.buildArchitecture, 'x64 ubuntu 22') }}:
      value: 'ubuntu22'
    ${{ else }}:
      value: 'debian-10'

container: ubuntu
  image: mycompany.jfrog.io/xyz-docker-local/myimage:${{ variables.dockerTag }}
  options: --privileged
  endpoint: AzureToArtifactory

steps:
[...]

结果:“在此上下文中不允许映射值。”,指的是container.image行。

问题:

在运行时选择Docker容器的正确过程或语法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-07 02:19:43

在运行时选择Docker容器的正确过程或语法是什么?

若要使用If表达式和参数设置容器映像,需要在作业级别定义容器。

例如:

代码语言:javascript
复制
parameters:
- name: BuildArchitecture
  type: string
  default: 'x64 ubuntu 22'
  values:
  - 'x64 ubuntu 22'
  - 'x64 debian 10'

pool:
  vmImage: ubuntu-latest

jobs:
  - job:  job1
    container:
     ${{ if eq(parameters.buildArchitecture, 'x64 ubuntu 22') }}:
       image:  mycompany.jfrog.io/xyz-docker-local/myimage:ubuntu22
       options: --privileged
       endpoint: AzureToArtifactory
     ${{ else }}:
       image: mycompany.jfrog.io/xyz-docker-local/myimage:debian-10
       options: --privileged
       endpoint: AzureToArtifactory
    steps:
      - script: echo "1"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73979036

复制
相关文章

相似问题

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