我正在Microsoft托管代理上的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容器之间进行选择。但我无法找出在容器之间切换的正确语法。
首先尝试切换:
由于在微软官方文档或其他地方找不到语法,我选择了一种与其他资源类似的语法。
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:
[...]
结果:";在此上下文中不允许映射值&";,参考CCD_ 3线。
问题:
在运行时在Docker容器之间进行选择的正确过程或语法是什么?
在运行时在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"