剪藏#剪藏#小明同学的笔记

别再本地 docker build 了!教你用 GitHub Actions 搭建全自动流水线,真香

2025 年 12 月 22 日1 分钟
分享Twitter / XTelegram微博

(摘要/推荐语:写完代码还要守着电脑等打包?上传镜像还要忍受家里的小水管?今天教你一招,把这些脏活累活全扔给 GitHub 免费帮你干。建议收藏实操。)

说实话,你是不是也经历过这种“垃圾时间”:

代码终于写完了,兴冲冲地在本地终端敲下 docker build,然后……

电脑风扇开始狂转,CPU 温度飙升,你甚至不敢切出去看视频,生怕卡顿。好不容易构建完了,还要 docker push,盯着那个慢吞吞的进度条,祈祷网络别断。

这一套流程下来,少说十几二十分钟没了。如果中间发现有个标点符号写错了?好家伙,推倒重来。

这就叫“被工具玩了”,而不是“玩工具”。

今天我要给大家安利一个我用了很久、相见恨晚的神器组合:GitHub Actions + Docker Hub

简单说,就是把“构建”和“上传”这两件费时费力的事,从你的本地电脑,转移到 GitHub 的服务器上去做。

Github Action 是 Github 推出的一个持续集成和持续交付的平台,能够让你自动化你的编译、测试和部署流程。

重点是:它完全免费,速度飞快,而且全自动。

这就好比你写好菜谱(代码),不用自己进厨房(本地构建),直接把菜谱扔给微软请的免费大厨(GitHub Actions),他做好了直接端上桌(发布到 Docker Hub)。

怎么搞?我不整那些虚头巴脑的概念,直接上实操,保姆级教程,包教包会。

第一步:准备好你的“菜谱”和“厨房”

首先,你得有个 GitHub 账号,和一个 Docker Hub 账号(存镜像的地方)。

在你的 GitHub 项目里,必须得有一个 Dockerfile。这个大家都懂,就是告诉机器怎么打包你的程序。

第二步:把“钥匙”交给 GitHub(关键!)

这是很多新手最容易卡住的地方。

你要让 GitHub 帮你上传镜像,你得给它权限,但你肯定不能把密码直接写在代码里吧?那样全世界都看见了。

正确做法是这样:

1.打开你的 GitHub 仓库,点击 Settings(设置)。

Notion image

2.找到左侧的 Secrets and variables -> Actions

Notion image

3.点击 New repository secret

Notion image

我们需要添加两个“暗号”:

  • DOCKER_USERNAME:填你的 Docker Hub 用户名。

  • DOCKER_PASSWORD:填你的 Docker Hub 密码(或者 Access Token,建议用 Token 更安全)。

Notion image

这样,GitHub 就在后台悄悄记住了你的身份,别人看代码是绝对看不到的。

第三步:告诉保姆“该干活了”

接下来,我们要写一个脚本,告诉 GitHub:“嘿,只要我更新了代码,你就立刻帮我干活!”

在你的项目根目录下,建立一个文件夹:.github/workflows(注意前面的点)。 在里面新建一个文件,名字随便取,比如 docker-publish.yml

复制下面这段代码进去(虽然是代码,但很好懂,我加了人话注释):

YAML

JAVASCRIPT
name: Build and Push Docker Image

on:
  push:
    branches: [ master ] # 构建的分支,可以根据需要修改
  pull_request:
    branches: [ master ] # 触发构建的分支,可以根据需要修改
  workflow_dispatch: # 添加 workflow_dispatch 事件,支持手动触发

jobs:
  build:
    name: Push Docker image to multiple registries
    runs-on: ubuntu-latest
    # 显式声明权限,遵循最小权限原则
    permissions:
      packages: write # 推送镜像到 GHCR
      contents: read  # 读取源码
      attestations: write # 写入构建证明
      id-token: write # OIDC 认证,用于签名
    steps:
      # 1. 检出代码
      - name: Check out the repo
        uses: actions/checkout@v4
	 # 2. 安装 QEMU (支持 ARM64 等多架构)
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      # 3. 初始化 Buildx (使用 docker-container 驱动)
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
	 # 4. 登录 Docker Hub
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      # 5. 登录 Registry
      - name: Log in to the Container registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      # 6. 生成元数据 (Tags & Labels)
      - name: Extract metadata (tags, labels) for Docker
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            jumploop/webssh # Docker Hub仓库名称
            ghcr.io/${{ github.repository }}
          tags: |
            latest
            ${{ github.sha }}
      # 7. 构建并推送 (核心步骤)
      - name: Build and push Docker images
        id: push
        uses: docker/build-push-action@v6
        with:
          context: .
          file: ./Dockerfile
          push: true
          platforms: linux/amd64,linux/arm64
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
      # 8. 镜像签名与证明 (增强安全性)
      - name: Generate artifact attestation
JAVASCRIPT
        uses: actions/attest-build-provenance@v2
        with:
          subject-name: ghcr.io/${{ github.repository }}
          subject-digest: ${{ steps.push.outputs.digest }}
          push-to-registry: true

第四步:见证奇迹

保存,提交代码,Push 到 GitHub。

现在,你可以关掉终端,去倒杯咖啡,或者刷刷手机。

打开 GitHub 仓库的 Actions 标签页,你会看到一个小绿点在转圈。点进去,你会发现 GitHub 的服务器正在疯狂为你通过云端宽带拉取依赖、编译代码。

Notion image

Notion image

通常几分钟后,那个圈圈变成绿色的对号。

Notion image

这时候你去 Docker Hub 刷新一下,崭新的镜像已经躺在那儿了。

Notion image

写在最后

为什么要折腾这个?

除了省电省网费,更重要的是它能让你养成“自动化”的思维

以后无论你在哪里,用着多烂的电脑,甚至是用 iPad 写代码,只要你把代码往 GitHub 一推,云端的流水线就开始自动运转。

等哪天服务器挂了,你只需要一条拉取命令就能恢复,而不是满头大汗地在本地重新打包。

把重复的工作交给机器,把时间留给自己。 这才是程序员该有的“偷懒”方式。

趁热打铁,现在就去给你的项目加个 Actions 吧,那种看着绿灯自动亮起的感觉,真的很爽。

原文地址: https://mp.weixin.qq.com/s?__biz=MzIxODI1MzYyNQ==&mid=2247487555&idx=1&sn=1489ea40871d1e7f227c324b2d2a20e0&chksm=964ab4afd2c42c406728a83c8bdcacd45eed4783a73f0f4c97a9aad42c2c86a3864d8423fe47&mpshare=1&scene=1&srcid=1222x0zeokYWEq7S027EgUGu&sharer_shareinfo=3cddd9791c265fc82af2cc9b64da8c9c&sharer_shareinfo_first=3cddd9791c265fc82af2cc9b64da8c9c#rd

相关文章