You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps推送至AWS ECR的Docker镜像标签递增及latest设置方案

解决方案

要实现自动递增修订号和添加latest标签的需求,你可以按以下步骤修改Azure DevOps流水线配置:

1. 添加获取最新修订号的步骤

在登录AWS的步骤之后,新增一个脚本步骤来查询ECR仓库中当前的最新修订号,并计算出下一个版本号:

- script: |
    # 获取所有符合 MAIN_VERSION.SUB_VERSION.* 格式的镜像标签
    TAGS=$(aws ecr list-images --repository-name $(REPOSITORY_NAME) --region $(AWS_REGION) --query 'imageIds[*].imageTag' --output text | grep "^$(MAIN_VERSION).$(SUB_VERSION)\." | sort -V)
    
    # 如果没有找到对应标签,默认修订号为0
    if [ -z "$TAGS" ]; then
      NEW_REVISION=0
    else
      # 提取最新标签的修订号并加1
      LATEST_TAG=$(echo "$TAGS" | tail -n 1)
      REVISION=$(echo "$LATEST_TAG" | cut -d '.' -f 3)
      NEW_REVISION=$((REVISION + 1))
    fi
    
    # 将新修订号设置为流水线变量
    echo "##vso[task.setvariable variable=NEW_REVISION]$NEW_REVISION"
  displayName: 'Calculate new revision number'
  env:
    AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
    AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)

注意:需要确保$(REPOSITORY_NAME)变量已在dev变量组中定义,或者直接替换为你的ECR仓库名称。

2. 修改Docker任务,使用新修订号并添加latest标签

更新Docker@2任务的tags字段,同时指定递增后的版本标签和latest标签:

- task: Docker@2
  displayName: Build docker image
  inputs:
    repository: $(REPOSITORY_URI)
    command: buildAndPush
    tags: |
      $(MAIN_VERSION).$(SUB_VERSION).$(NEW_REVISION)
      latest

完整修改后的流水线配置

整合后的完整yaml代码如下:

# Docker
# Build a Docker image

trigger:
- master

resources:
- repo: self

variables:
  - group: dev

stages:
- stage: Build
  displayName: Build image
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: ubuntu-latest
    steps:
    - script: |
        aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com
      displayName: 'Login to AWS'
      env:
        AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
        AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)

    - script: |
        TAGS=$(aws ecr list-images --repository-name $(REPOSITORY_NAME) --region $(AWS_REGION) --query 'imageIds[*].imageTag' --output text | grep "^$(MAIN_VERSION).$(SUB_VERSION)\." | sort -V)
        
        if [ -z "$TAGS" ]; then
          NEW_REVISION=0
        else
          LATEST_TAG=$(echo "$TAGS" | tail -n 1)
          REVISION=$(echo "$LATEST_TAG" | cut -d '.' -f 3)
          NEW_REVISION=$((REVISION + 1))
        fi
        
        echo "##vso[task.setvariable variable=NEW_REVISION]$NEW_REVISION"
      displayName: 'Calculate new revision number'
      env:
        AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
        AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)

    - task: Docker@2
      displayName: Build docker image
      inputs:
        repository: $(REPOSITORY_URI)
        command: buildAndPush
        tags: |
          $(MAIN_VERSION).$(SUB_VERSION).$(NEW_REVISION)
          latest

关键说明

  • 脚本通过aws ecr list-images获取所有标签,用grep过滤出匹配主版本和次版本的标签,再用sort -V按版本号排序,确保拿到最新的修订号。
  • 如果是第一次构建(无对应标签),修订号默认从0开始,生成MAIN_VERSION.SUB_VERSION.0的标签。
  • Docker任务的tags字段支持多行输入,同时推送递增版本标签和latest标签到ECR。

内容的提问来源于stack exchange,提问作者Itzik.B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:47:41