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

基于GitHub Actions实现Docker镜像自动打标签的方案咨询

基于私有GitHub实例的Docker镜像自动版本递增方案

核心逻辑

用Git标签存储版本号,全程依赖原生shell命令处理版本读取与递增,仅使用最基础的官方actions/checkout拉取代码,完全适配私有GitHub实例的权限限制。

完整工作流配置

name: 自动打Docker镜像版本标签

on:
  push:
    branches: [ main ] # 按需替换为你的主分支

jobs:
  构建并打标签:
    runs-on: ubuntu-latest # 替换为你的私有Runner镜像
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4
        with:
          fetch-depth: 0 # 必须拉取完整历史才能获取所有标签

      - name: 获取并计算新版本号
        id: get_version
        run: |
          # 查找最新的v开头语义化标签,无标签则从1.0.0开始
          LATEST_TAG=$(git tag --list "v*" --sort=-v:refname | head -n 1)
          if [ -z "$LATEST_TAG" ]; then
            NEW_VERSION="1.0.0"
          else
            # 去除v前缀,拆分版本号字段
            VERSION=${LATEST_TAG#v}
            MAJOR=$(echo $VERSION | cut -d. -f1)
            MINOR=$(echo $VERSION | cut -d. -f2)
            PATCH=$(echo $VERSION | cut -d. -f3)
            # 递增修订号(第三位)
            NEW_PATCH=$((PATCH + 1))
            NEW_VERSION="$MAJOR.$MINOR.$NEW_PATCH"
          fi
          echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT

      - name: 登录私有Docker仓库
        run: echo "${{ secrets.DOCKER_REGISTRY_PWD }}" | docker login your-registry.com -u "${{ secrets.DOCKER_REGISTRY_USER }}" --password-stdin
        # 若使用GitHub容器仓库,将地址替换为ghcr.io即可

      - name: 构建并推送镜像
        run: |
          docker build -t your-registry.com/your-image:${{ steps.get_version.outputs.new_version }} .
          docker push your-registry.com/your-image:${{ steps.get_version.outputs.new_version }}

      - name: 推送新Git版本标签
        run: |
          git config --global user.name "GitHub Actions"
          git config --global user.email "actions@github.com"
          git tag -a "v${{ steps.get_version.outputs.new_version }}" -m "自动打标签:${{ steps.get_version.outputs.new_version }}"
          git push origin "v${{ steps.get_version.outputs.new_version }}"

注意事项

  • 权限配置:确保GitHub Actions运行账号拥有推送Git标签的权限,Docker仓库的账号密码需存入私有实例的Secrets中,对应配置里的DOCKER_REGISTRY_USER和DOCKER_REGISTRY_PWD。
  • 版本规则调整:若需递增次要版本(如从1.0.0到1.1.0),可修改版本计算部分:
    NEW_MINOR=$((MINOR + 1))
    NEW_VERSION="$MAJOR.$NEW_MINOR.0"
    
    递增主版本同理,调整MAJOR字段即可。
  • 标签前缀自定义:若不需要v前缀,将所有v${...}替换为${...},并把git tag --list "v*"改为git tag --list "[0-9]*.[0-9]*.[0-9]*"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:07:38