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

如何使用GitHub Actions调用Makefile构建并推送镜像到Docker Hub

问题解答

可以使用GitHub Actions调用Makefile完成Docker镜像的构建与推送至Docker Hub的操作,完全适配你需要提前编译工具组件再打包镜像的场景。

方案1:全流程走Makefile执行

第一步:编写Makefile

提前在仓库根目录编写Makefile,包含前置编译、镜像构建、镜像推送的完整逻辑,示例如下:

# 定义镜像参数,支持外部传入覆盖
IMAGE_REGISTRY ?= docker.io
IMAGE_NAMESPACE ?= your-dockerhub-username
IMAGE_NAME ?= your-image-name
IMAGE_TAG ?= latest
FULL_IMAGE_NAME = $(IMAGE_REGISTRY)/$(IMAGE_NAMESPACE)/$(IMAGE_NAME):$(IMAGE_TAG)

# 前置编译工具组件
build-binary:
	mkdir -p bin
	# 这里替换为你实际的编译命令,比如Go、C++等语言的编译逻辑
	go build -o bin/your-tool cmd/tool/main.go

# 构建Docker镜像
build: build-binary
	docker build -t $(FULL_IMAGE_NAME) .

# 推送Docker镜像到Docker Hub
push:
	docker push $(FULL_IMAGE_NAME)

.PHONY: build-binary build push

第二步:编写GitHub Actions工作流配置

在.github/workflows/docker-publish.yml中编写如下配置,完成登录Docker Hub、调用Makefile执行全流程的操作:

name: Publish Docker image
on:
  push:
    branches: [ main ]

jobs:
  docker-publish:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and push via Makefile
        run: make build push IMAGE_TAG=${{ github.sha }}

方案2:仅用Makefile完成前置编译,复用官方构建推送Action

如果你需要复用docker/build-push-action的缓存、多平台构建等原生能力,只需要在官方流程前增加调用Makefile编译前置组件的步骤即可,示例如下:

name: Publish Docker image
on:
  push:
    branches: [ main ]

jobs:
  docker-publish:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Precompile tool components via Makefile
        run: make build-binary

      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

注意事项

  • 提前在GitHub仓库的「Settings - Secrets and variables - Actions」中配置DOCKERHUB_USERNAME(你的Docker Hub用户名)和DOCKERHUB_TOKEN(你的Docker Hub个人访问令牌),不要硬编码凭证到配置文件中
  • 确保Makefile内的所有路径都是相对于仓库根目录的,避免CI环境下出现路径找不到的问题
  • 如果需要多架构镜像构建,可在前置编译步骤适配对应架构,或在Makefile中集成Docker buildx相关命令实现跨架构构建

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:09:01