扩展课 E1
GitHub 与自动发布
扩展课。每次发布都要 scp、build、push,重复多了容易出错。把代码放到 GitHub,以后只要打一个版本标签,镜像就会自动构建好。
本课目标
- 用 SSH 密钥把代码推送到 GitHub 私有仓库。
- 写一个 GitHub Actions 工作流:推送版本标签时自动构建并推送镜像。
- 用新流程发布一个版本。
先懂概念
- GitHub:存放 Git 仓库的网站。代码多了一份异地备份,也方便和别人协作。
- GitHub Actions:GitHub 提供的自动化服务。你在仓库里写一个工作流文件,规定“发生什么事时,自动执行哪些步骤”。
- Secrets:保存在 GitHub 仓库设置里的密码,工作流运行时可以读取,但不会出现在代码里。GitHub 会尽量在日志里把它们遮住,但不要在工作流里主动打印它们。
新的发布流程:
本地 git tag v4 → git push → GitHub Actions 构建镜像 → 推送到 Docker Hub → 服务器 docker compose pull跟着做
1. 把公钥添加到 GitHub
注册 GitHub 账号。在自己电脑上显示公钥内容(公钥可以公开,私钥不行):
cat $HOME\.ssh\id_ed25519.pubcat ~/.ssh/id_ed25519.pub复制输出的一整行。在 GitHub 点右上角头像 → Settings → SSH and GPG keys → New SSH key,粘贴保存。然后测试:
ssh -T [email protected]第一次会询问是否信任 GitHub 的指纹。先对照 GitHub 官方公布的 SSH 指纹,一致再输入 yes。看到 Hi 你的用户名! You've successfully authenticated 就成功了。
2. 创建仓库并推送
在 GitHub 点 New repository,名称填 weekly-report,选择 Private(私有),不要勾选添加 README,创建。
在自己电脑上:
cd ~/ai-course/weekly-report
git remote add origin [email protected]:你的用户名/weekly-report.git
git push -u origin main
git push --tags刷新 GitHub 页面,能看到你的代码和提交记录。再确认一次仓库里没有 .env。
3. 添加 Secrets
先在 Docker Hub 再创建一个访问令牌,描述填 github-actions,权限 Read & Write。一个用途一个令牌,以后某一个泄露了,单独删除即可。
在 GitHub 仓库页面打开 Settings → Secrets and variables → Actions → New repository secret,添加两个:
| 名称 | 值 |
|---|---|
DOCKERHUB_USERNAME | 你的 Docker Hub 用户名 |
DOCKERHUB_TOKEN | 刚创建的令牌 |
4. 写工作流文件
在项目里创建 .github/workflows/docker.yml,可以让 Codex 帮你创建,内容如下:
name: docker
on:
push:
tags: ["v*"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/weekly-report:${{ github.ref_name }}意思是:推送以 v 开头的标签时,在 GitHub 提供的 Linux 机器上检出代码、登录 Docker Hub、按 Dockerfile 构建镜像,并以标签名作为镜像版本推送。
git add -A
git commit -m "自动构建镜像"
git push5. 用新流程发布 v4
随便改一点东西(比如让 AI 改一下页面标题),然后:
git add -A
git commit -m "修改标题"
git tag v4
git push
git push origin v4打开 GitHub 仓库的 Actions 标签,能看到一次正在运行的工作流。几分钟后变成绿色的对勾,Docker Hub 上就多了 v4。
在服务器上:
cd ~/apps/weekly-report
vim compose.yaml把版本改成 v4,然后:
docker compose pull
docker compose up -d从此不用再 scp 和在服务器上 docker build 了。
你应该看到
- GitHub 上有你的私有仓库,
Actions里的运行记录是绿色对勾。 - Docker Hub 上有
v4标签,服务器运行的是 v4。
常见问题
工作流失败,日志里有 unauthorized? 检查两个 Secrets 的名字是否完全一致、令牌是否有 Write 权限。
推送标签后没有触发工作流? 确认 docker.yml 已经推送到 GitHub 并且在 .github/workflows/ 目录下,标签以小写 v 开头。
git push 很慢或连不上? 中国内地访问 GitHub 不稳定,可以多试几次,或者换个时间。
自检
-
ssh -T [email protected]能认出我的用户名。 - 代码在 GitHub 私有仓库里,没有
.env。 - 推送版本标签后,Docker Hub 自动出现了对应版本。