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

如何用GitHub Action追踪其他仓库新版本并自动构建Docker镜像?

实现追踪目标仓库Release并自动构建Docker镜像的方案

一、调整触发条件,监听目标仓库的Release更新

修改你的CI.yml触发规则,除了原有代码提交触发,新增手动触发和外部仓库Release触发的规则,确保能实时追踪目标仓库的版本更新:

name: docker
run-name: auto build image

on:
  push:
    branches:
      - 'main'
  workflow_dispatch: # 手动触发,用于测试
  repository_dispatch: # 接收目标仓库Release发布的webhook触发
    types: [new_release] # 自定义事件类型,需和目标仓库webhook配置对应

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v2
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: Login to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      
      # 新增步骤:获取目标仓库最新Release的dpkg包下载地址
      - name: 获取目标仓库最新dpkg包URL
        id: get_package
        run: |
          # 替换为目标仓库的「用户名/仓库名」格式
          TARGET_REPO="target-owner/target-repo"
          # 调用GitHub API拉取最新正式Release的dpkg包地址(过滤.deb后缀)
          PACKAGE_URL=$(curl -s "https://api.github.com/repos/$TARGET_REPO/releases/latest" | jq -r '.assets[] | select(.name | endswith(".deb")) | .browser_download_url' | head -n1)
          echo "package_url=$PACKAGE_URL" >> $GITHUB_OUTPUT
      
      - name: Build and push
        uses: docker/build-push-action@v4
        with:
          push: true
          tags: leenhawk/hexo_env:latest
          build-args:
            - PACKAGE_URL=${{ steps.get_package.outputs.package_url }}

二、修改Dockerfile,支持通过构建参数安装指定dpkg包

将原有的APT安装逻辑替换为从指定URL下载并安装dpkg包,同时保留必要依赖:

FROM debian:unstable-slim
# 接收构建时传入的dpkg包URL参数
ARG PACKAGE_URL

RUN apt update -y && \
    # 安装基础依赖(wget用于下载包,git保留原需求)
    apt install -y git wget && \
    # 下载目标dpkg包到临时目录
    wget -O /tmp/target-package.deb "$PACKAGE_URL" && \
    # 安装dpkg包,若有依赖缺失自动补全
    dpkg -i /tmp/target-package.deb || apt install -f -y && \
    # 清理临时文件和APT缓存
    rm /tmp/target-package.deb && \
    apt clean && rm -rf /var/lib/apt/lists/*

三、配置目标仓库Webhook,触发当前构建

  1. 打开目标GitHub仓库的「Settings → Webhooks → Add webhook」
  2. Payload URL填写:https://api.github.com/repos/你的用户名/你的仓库名/dispatches
  3. Content type选择application/json
  4. Secret设置一个随机字符串(需在当前仓库的「Settings → Secrets and variables → Actions」中添加同名Secret,值一致)
  5. 触发事件选择「Releases」
  6. Payload填写:
{
  "event_type": "new_release",
  "client_payload": {}
}
  1. 保存Webhook,后续目标仓库发布新Release时会自动触发当前构建

补充:适配无latest标记的Release场景

如果目标仓库的Release仅带版本号、无latest标记,可调整获取包地址的命令,拉取所有Release后筛选最新正式版:

PACKAGE_URL=$(curl -s "https://api.github.com/repos/$TARGET_REPO/releases" | jq -r '.[] | select(.prerelease == false) | .assets[] | select(.name | endswith(".deb")) | .browser_download_url' | head -n1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:04:56