【问题标题】:How to add custom build tags for docker images in azure-pipelines.yml file?如何在 azure-pipelines.yml 文件中为 docker 图像添加自定义构建标签?
【发布时间】:2020-03-24 09:58:40
【问题描述】:

我们将 Azure DevOps 用于我们的项目。我有 azure-pipelines.yml 文件,它使用构建 id 到 docker 图像标签。但是,我们希望手动添加 docker 镜像 ID 作为构建定义的一部分。

是否可以将运行时参数从构建队列 rest api 传递到 azure-pipelines.yml 文件?

azure-pipelines.yml

trigger:
 - master

pool:
  vmImage: 'Ubuntu-16.04'

resources:
 - repo: self

variables:
  imageName: 'sampleapp1'
  dockerhubNS: 'kumaresh' 

steps:
 - task: Docker@2
   displayName: Login to Docker Hub
   inputs:
     command: login
     containerRegistry: dh-connection
- task: Docker@2
  displayName: Build and Push an image
  inputs:
    command: buildAndPush
    dockerfile: Dockerfile
    containerRegistry: dh-connection
    repository: $(dockerhubNS)/$(imageName)
    tag: $(appBuildNumber)

构建队列的请求正文

"definition": {
    "id": Build_Definition_Id,
    "name": extractDefinitionName,
    "type": "build"
 },
 "templateParameters": {
     "tag": "1"
 }

【问题讨论】:

  • 手动添加构建ID是什么意思?
  • 您可以创建一个变量并使用 $(Your_Tag) 将其传递给标签
  • 当我在标签中传递环境变量时,我得到了这个错误。 ##[error]invalid argument "***.azurecr.io/project:$(dockertagvar)" for "-t, --tag" 标志:无效的参考格式。为什么它不读取变量的内容?
  • @cell-in 你可以试试这个${{ parameters.tag }} 并请参考答案。

标签: azure-devops azure-devops-rest-api


【解决方案1】:

是否可以从构建队列 rest api 传递运行时参数 到 azure-pipelines.yml 文件?

不确定运行时参数的确切含义。但我想您正在寻找的是使用 rest api 进行队列构建以及同时将动态变量传递给管道。

示例场景:

这是我的azure-pipeline.yml

parameters:
- name: tag
  type: string
  default: 'aaa'

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: Docker@2
  displayName: build
  inputs:
    containerRegistry: DockerHub
    repository: {my docker repos}
    command: build
    Dockerfile: Docker/TestWebApi/Dockerfile
    tags: '${{ parameters.tag }}'

- task: Docker@2
  displayName: push
  inputs:
    containerRegistry: DockerHub
    repository: {my docker repos}
    command: push
    tags: '${{ parameters.tag }}'

可以看到,它需要的动态图片标签是参数tag。当我使用 rest api 对该管道进行排队时,它将被传递一个新值:

https://dev.azure.com/{org}/{project}/_apis/pipelines/{definition id}/runs?api-version=5.1-preview.1

主体:

{
  "resources": {
    "repositories": {
      "self": {
        "refName": "refs/heads/master"
      }
    }
  },
  "templateParameters": {
    "tag": "new"
  }
}

只需在请求正文中配置要传递给的变量即可。


添加:

  "variables": {
    "myVariable": {
      "value": "0325ApiQueue"
    }

【讨论】:

  • 我正在使用构建队列 api 来运行构建定义。如何在参数属性中添加值?
  • @KumareshBabuNS,您的意思是您在 YAML 管道中定义了参数属性吗?
  • 是的。我正在使用docs.microsoft.com/en-us/rest/api/azure/devops/build/builds/… 来运行构建定义。有一个选项“参数”。我们可以用来传递标签号吗?
  • @KumareshBabuNS,当然可以。请参阅我的更新答案。
  • @KumareshBabuNS。是的,以前的 api 适用于由 UI 配置的管道。对于 YAML 管道,您需要使用第二个管道,这是我在回答中分享的。很高兴知道你现在成功了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多