Kri*_*ord 5 azure-devops azure-pipelines-build-task azure-pipelines
我想使用 Azure Pipelines 构建 Docker 映像,然后使用容器作业在构建的映像内运行测试。
图像应使用构建 ID 作为标记(或构建 ID、提交哈希和分支名称的组合)。如果我使用静态标记作为值(例如build),则有两个并行运行的两条管道可能会导致不必要的竞争条件。
构建步骤非常简单 - 登录、构建并推送到 Docker Hub。
但是,在指定测试作业以使用容器时,我无法使用变量。
这是一个有效的示例,但它不使用私有注册表。
variables:
- group: dockerCredentials
# contains: dockerUsername, dockerPassword
- name: imageName
value: azure-pipelines-test
- name: dockerRegistry
value: krsb
- name: fullImageName
value:
jobs:
- job: build
pool:
vmImage: 'Ubuntu-16.04'
steps:
- script: |
docker login -u $(dockerUsername) -p $(dockerPassword)
docker build -t '$(dockerRegistry)/$(imageName):$(build.buildId)' .
docker push '$(dockerRegistry)/$(imageName):$(build.buildId)'
displayName: 'docker build'
- job: test
dependsOn:
- build
pool:
vmImage: ubuntu-16.04
container:
image: $[ format('{0}/{1}:{2}', variables['dockerRegistry'], variables['imageName'], variables['build.buildId']) ]
endpoint: docker-hub-registry
steps:
- script: printenv
Run Code Online (Sandbox Code Playgroud)
如果我想使用私有注册表,我不会将容器指定为字符串,而是使用此语法(Docker 中心凭据在端点¹ 中指定):
# ...
container:
image: image-name:tag
endpoint: docker-hub-registry
Run Code Online (Sandbox Code Playgroud)
当我使用此语法时,我无法使用该$[ variables['name'] ]语法,这不会扩展,并且在管道运行时会输出错误:
##[command]/usr/bin/docker pull $[ format('{0}:{1}', variables['imageName'], variables['build.buildId']) ]
"docker pull" requires exactly 1 argument.
Run Code Online (Sandbox Code Playgroud)
如果我使用$(imageName):$(build.buildId).
是否可以在图像名称中使用变量?
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |