我正在微软代理的Docker容器中运行Azure管道。容器在我的YAML文件的开头指定:
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文档或其他地方没有找到语法,我选择了一种与我对其他资源所做的类似的语法。
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:
[...]结果:“在此上下文中不允许模板表达式。”
第二次尝试:
也许压痕是问题所在。
[...]
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
[...]结果:“在此上下文中不允许模板表达式。”
第三次尝试:
不是压痕。也许它需要-在每个条件表达式的开头。
[...]
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
[...]结果:“没有预期的序列。”
第四次尝试:
我想,也许我需要将容器定义为资源。因此,我创建了容器资源,并验证了当我单独选择资源时,管道是否工作,而没有任何选择逻辑。然后,我将逻辑加回:
[...]
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
[...]结果:我们回到“在此上下文中不允许使用模板表达式”。
第五次尝试
也许我应该跳过条件逻辑,将容器标记转换为变量。
[...]
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容器的正确过程或语法是什么?
发布于 2022-10-07 02:19:43
在运行时选择Docker容器的正确过程或语法是什么?
若要使用If表达式和参数设置容器映像,需要在作业级别定义容器。
例如:
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"https://stackoverflow.com/questions/73979036
复制相似问题