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

GitHub Workflows master分支构建Docker追加多标签实现方法

问题根因

双构建触发、镜像标签SHA不一致的核心原因是Pi-hole监控工作流拆分了两次独立git push操作:先推送版本标签,再推送master分支提交,两次推送分别匹配Docker构建工作流的「master分支推送」「pihole-**格式标签推送」两个触发规则,因此启动两次独立构建任务,两次构建独立运行,自然产出的镜像SHA不统一,还会重复覆盖latest标签。

修复方案

总共需要修改两处工作流配置,实现单次构建打全所有标签。

1. 修改Pi-hole版本监控工作流

将原有的两次拆分推送改为单次批量推送,避免产生多个触发事件。找到工作流中Commit latest release version步骤,替换原有推送逻辑:

- name: Commit latest release version
        if: steps.git-check.outputs.modified == 'true'
        run: |
          git config --global user.name 'Hossy'
          git config --global user.email 'Hossy@users.noreply.github.com'
          git commit -am "New Pi-hole release ${{ steps.pi-hole_ver.outputs.pihole-latest }}"
          git tag -am "Pi-hole ${{ steps.pi-hole_ver.outputs.pihole-latest }}" pihole-${{ steps.pi-hole_ver.outputs.pihole-latest }}
          # 一次性推送master分支和关联标签,避免产生两次独立push事件
          git push --follow-tags origin master

删除原配置中单独推送tag、单独推送master分支的两行git push命令。

2. 修改Docker镜像构建发布工作流

2.1 调整触发规则

移除工作流触发条件中对tag推送事件的监听,所有镜像构建统一由master分支推送事件触发,从根源避免重复触发:

on:
  schedule:
    - cron: '37 8 1,15 * *'
  push:
    branches: [ master ]
    # 删除原有的tags: [ 'pihole-**' ]配置
    paths-ignore: [ '.github/**' ]
  pull_request:
    branches: [ master ]
  workflow_dispatch:

2.2 补全代码检出步骤

在构建任务的steps最开头添加代码检出步骤,配置拉取完整提交历史和标签,用于后续自动识别版本标签:

steps:
      # 检出仓库完整代码,拉取全量历史与标签
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

2.3 调整元数据标签规则

修改Docker元数据提取步骤的标签规则,在master分支构建时自动识别当前提交绑定的pihole-**格式标签,和分支标签、latest标签合并输出:

- name: Extract Docker metadata
        id: meta
        uses: docker/metadata-action@v4.0.1
        with:
          images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
          tags: |
            type=schedule
            type=ref,event=branch
            type=ref,event=pr
            type=raw,value=latest,enable={{is_default_branch}}
            # 自动识别当前master提交上绑定的pihole-开头标签,作为镜像标签
            type=match,pattern=pihole-(.*),group=1,prefix=pihole-,enable=${{ github.ref == 'refs/heads/master' }}

其余登录、构建推送步骤保持原有配置不变即可。

效果验证
  • 手动提交更新到master分支(无新tag):仅触发1次构建,自动给镜像打master、latest两个标签,两个标签对应镜像SHA完全一致,历史版本标签不受影响。
  • 监控工作流检测到Pi-hole新版本自动提交:仅触发1次master分支推送对应的构建任务,构建时自动识别关联的版本标签,一次性给镜像打master、latest、pihole-v*.*三个标签,所有标签对应同一次构建产出的镜像,SHA完全一致,不会重复构建、重复覆盖标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:21:36