基于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
相关产品推荐
相关产品推荐

