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

构建Docker镜像推送Cloudsmith时因时间不匹配报错求助

解决Docker镜像推送Cloudsmith时的"No such image"错误

问题核心是构建阶段和推送阶段生成的时间戳不统一——GitHub Actions每个run步骤都是独立的shell会话,你在两个阶段分别执行date命令,哪怕间隔几秒,生成的CURRENT_DATETIME都会不一样,导致推送时找不到对应标签的镜像。另外你重复构建了两次镜像,完全没必要。

直接按下面的方式修改工作流:

steps:
  - name: Checkout
    uses: actions/checkout@v4
    with:
      path: xyz
      token: ${{ secrets.abcdef }}

  # 提前生成全局统一的变量,通过GITHUB_ENV传递给所有后续步骤
  - name: Generate Global Variables
    run: |
      CURRENT_DATETIME=$(date +'%Y%m%d%H%M%S')
      GITHUB_REF_CLEAN="${GITHUB_REF#refs/heads/}"
      echo "CURRENT_DATETIME=$CURRENT_DATETIME" >> $GITHUB_ENV
      echo "GITHUB_REF_CLEAN=$GITHUB_REF_CLEAN" >> $GITHUB_ENV
      echo "IMAGE_TAG=${GITHUB_REF_CLEAN}-${CURRENT_DATETIME}" >> $GITHUB_ENV

  - name: Build Docker Image
    run: |
      # 只构建一次带时间戳的镜像,latest标签用tag命令复制,减少重复构建时间
      docker build -t myimage:${{ env.IMAGE_TAG }} -f ./myimage/Dockerfile .
      docker tag myimage:${{ env.IMAGE_TAG }} myimage:latest

  - name: 'login to Cloudsmith'
    uses: docker/login-action@v2
    with:
      registry: docker.cloudsmith.io
      username: nop-ss
      password: ${{ secrets.ZAR }}

  - name: 'push image to Cloudsmith' 
    run: |
      # 直接复用全局变量,确保标签和构建时完全一致
      docker tag myimage:${{ env.IMAGE_TAG }} docker.cloudsmith.io/org/repo/myimage:${{ env.IMAGE_TAG }}
      docker tag myimage:latest docker.cloudsmith.io/org/repo/myimage:latest
      docker push docker.cloudsmith.io/org/repo/myimage --all-tags 

关键修改点:

  • 新增Generate Global Variables步骤,把需要跨步骤复用的变量写入$GITHUB_ENV,后续步骤直接通过${{ env.XXX }}引用,避免重复生成不一致的变量
  • 构建阶段只执行一次docker build,用docker tag生成latest标签,减少重复构建的资源浪费
  • 推送阶段完全复用之前生成的标签变量,确保和构建的镜像标签完全匹配

内容的提问来源于stack exchange,提问作者Anup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:05:57