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

别再本地 docker build 了!教你用 GitHub Actions 搭建全自动流水线,真香
set 限制解除
别再本地 docker build 了!教你用 GitHub Actions 搭建全自动流水线,真香
原创
小明同学的笔记
小明同学的笔记
2025年12月19日 12:04 陕西
(摘要/推荐语:写完代码还要守着电脑等打包?上传镜像还要忍受家里的小水管?今天教你一招,把这些脏活累活全扔给 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 (设置)。
2.找到左侧的 Secrets and variables -> Actions 。
3.点击 New repository secret 。
我们需要添加两个“暗号”:
DOCKER_USERNAME :填你的 Docker Hub 用户名。
DOCKER_PASSWORD :填你的 Docker Hub 密码(或者 Access Token,建议用 Token 更安全)。
这样,GitHub 就在后台悄悄记住了你的身份,别人看代码是绝对看不到的。 第三步:告诉保姆“该干活了” 接下来,我们要写一个脚本,告诉 GitHub: “嘿,只要我更新了代码,你就立刻帮我干活!” 在你的项目根目录下,建立一个文件夹: .github/workflows (注意前面的点)。 在里面新建一个文件,名字随便取,比如 docker-publish.yml 。 复制下面这段代码进去(虽然是代码,但很好懂,我加了人话注释): YAML
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 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 的服务器正在疯狂为你通过云端宽带拉取依赖、编译代码。
通常几分钟后,那个圈圈变成绿色的对号。
这时候你去 Docker Hub 刷新一下,崭新的镜像已经躺在那儿了。
写在最后 为什么要折腾这个? 除了省电省网费,更重要的是它能让你 养成“自动化”的思维 。 以后无论你在哪里,用着多烂的电脑,甚至是用 iPad 写代码,只要你把代码往 GitHub 一推,云端的流水线就开始自动运转。 等哪天服务器挂了,你只需要一条拉取命令就能恢复,而不是满头大汗地在本地重新打包。 把重复的工作交给机器,把时间留给自己。 这才是程序员该有的“偷懒”方式。 趁热打铁,现在就去给你的项目加个 Actions 吧,那种看着绿灯自动亮起的感觉,真的很爽。
小明同学的笔记 分享好玩有用的技术,共同进步! 139篇原创内容
公众号 ,
预览时标签不可点
小明同学的笔记
微信扫一扫赞赏作者 喜欢作者
关闭
0人付费 更多
正在加载...
关闭
更多
系统错误,请稍后重试
返回 其它金额 更多
赞赏金额 ¥ 最低赞赏 ¥0
1 2 3 4 5 6 7 8 9 0 .
关闭
更多
搜索「」网络结果
当前内容可能存在未经审核的第三方商业营销信息,请确认是否继续访问。
继续访问 取消 微信公众平台广告规范指引
小明同学的笔记
赞 分享 推荐 写留言
: , , , , , , , , , , , , 。
视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看 分享 留言 收藏 听过
可在「公众号 > 右上角 > 划线」找到划线过的内容
我知道了
留言
关闭
更多
关闭
确认提交投诉
你可以补充投诉原因(选填)
确定
文档下载
导出为Markdown
下载
导出为Word
下载