要在 Azure DevOps 管道的 docker 任务中使用的自定义 BuildNumber

Custom BuildNumber to be used in docker task in Azure Devops pipeline

提问人:SMendi 提问时间:11/16/2023 最后编辑:SMendi 更新时间:11/16/2023 访问量:44

问:

在我的主管道中,我定义了管道运行的 BuildNumber/Build Name:

name: $(Date:yyyyMMdd).$(Rev:r)_Bugfix_for_workitem_$(work_item)
appendCommitMessageToRunName: false


Then I used this template 
steps:         
    - ${{ if ne(parameters.ContainerRegistry, '') }}:
        - task: Docker@2
          displayName: 'Docker Build'
          inputs:
              command: build
              containerRegistry: ${{parameters.ContainerRegistry}}
              dockerfile: ${{parameters.DockerFile}}
              buildContext: $(Build.SourcesDirectory)
              repository: ${{parameters.Repository}}
              arguments: --build-arg FEED_ACCESSTOKEN=$(VSS_NUGET_ACCESSTOKEN)
              tags: |                
                  latest
                  $(Build.BuildNumber) --- #This is working
                  echo "$(echo $(Build.BuildNumber) | cut -d'_' -f1)"  --- Not working , ##[error]ERROR: invalid tag "***.azurecr.io/:echo \"$(echo 20231116.1_Generic_for_workitem_$(work_item) | cut -d'_' -f1)\"": invalid reference format

在第三个标签中,我的目标是只提取日期和修订号,如 20231116.1,并去除剩余的名称 Bugfix_for_workitem$(work_item) 并将其用作 docker 任务中的标签。

问题是 docker 任务似乎不能直接执行 shell 命令。 如果我在 shell 命令或任务中使用此行,它能够去除名称。 echo “$(echo $(Build.BuildNumber) |切 -d'_' -f1)”

Docker Azure-DevOps YAML CICD

评论

0赞 Dou Xu-MSFT 11/17/2023
嗨 SMendi,您可以使用 task.setvariable 自定义 BuidNumber,然后在 docker 任务中使用此变量。

答:

0赞 Dou Xu-MSFT 11/16/2023 #1

Docker@2任务中的输入来看,默认值为 $(Build.BuildId)。恐怕标签应该是字符串而不是shell命令。tags

如果要自定义标签,可以在脚本中设置变量,然后在下面的 docker 任务中使用。

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      echo "##vso[task.setvariable variable=customBuildNumber;]"$(echo $(Build.BuildNumber) | cut -d'_' -f1)""

- task: Docker@2
          displayName: 'Docker Build'
          inputs:
              command: build
              containerRegistry: ${{parameters.ContainerRegistry}}
              dockerfile: ${{parameters.DockerFile}}
              buildContext: $(Build.SourcesDirectory)
              repository: ${{parameters.Repository}}
              arguments: --build-arg FEED_ACCESSTOKEN=$(VSS_NUGET_ACCESSTOKEN)
              tags: |  
                $(customBuildNumber)              

希望能有所帮助。

评论

0赞 Dou Xu-MSFT 11/20/2023
嗨,SMendi,很高兴知道答案可以帮助您解决此问题。如果可能的话,您也可以接受答案,这将帮助其他有相同问题的用户。