跳到内容

元数据卡

  • 前置知识:全链路基本概念(上一页)
  • 预计时间:8 分钟
  • 完成标志:能理解 CI/CD 的基本概念,能看懂一个 GitHub Actions workflow 文件

你的进度

你手动走完了全链路。但第二天你又改了一行代码——你重复了五步操作:git pushmvn clean packagedocker builddocker pushssh serverdocker pulldocker restart……

"我能不能写一个脚本,让我推完代码它就全自动走完?"你问。"我不想再手敲这七条命令了——我总会漏掉一条的。"


问题:手动操作总会出错

你手动推送了一次,成功了。但第二天你又改了一行代码——然后重复了六步操作。第三天,你忘了一步。线上挂了。

"手动做第二次就是错的。"工坊主人说。"你要让机器替你走这些路。"

CI/CD 是什么

CI(Continuous Integration,持续集成):每次你推送代码,自动编译、测试、打包。

CD(Continuous Deployment,持续部署):在 CI 的基础上,自动部署到服务器。

GitHub Actions 是最流行的 CI/CD 工具之一。你在项目里加一个配置文件,每次 git push,GitHub 会自动运行你定义好的步骤。

在项目根目录创建 .github/workflows/deploy.yml

yaml
name: Deploy

on:
 push:
 branches: [main]

jobs:
 build-and-deploy:
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v4

 - name: Set up JDK 17
 uses: actions/setup-java@v4
 with:
 java-version: '17'
 distribution: 'temurin'

 - name: Build with Maven
 run: mvn clean package -DskipTests

 - name: Build Docker image
 run: docker build -t hello-atlas:${{ github.sha }} .

 - name: Log in to GHCR
 run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin

 - name: Push image
 run: |
 docker tag hello-atlas:${{ github.sha }} ghcr.io/${{ github.repository }}:latest
 docker push ghcr.io/${{ github.repository }}:latest

每次你 git push 到 main 分支,GitHub 就会自动:

  1. 拉取你的代码
  2. 安装 JDK 17
  3. 用 Maven 编译打包
  4. 构建 Docker 镜像
  5. 登录到 GitHub Container Registry
  6. 推送镜像

你可以去 GitHub 仓库页面的 Actions 标签页,看到每次构建的实时日志。


常见陷阱

GitHub Actions 构建失败,但本地能跑?

检查 GitHub Actions 的 Ubuntu runner 环境是否和你本地一致。常见的坑:GITHUB_TOKEN 权限不足——需要在 repo Settings → Actions → General 里启用读写权限。检查 .github/workflows/ 目录名拼写正确(是 workflows 不是 workflow)。


旅人笔记

CI/CD 就是让机器替你做完"编译→测试→打包→部署"的重复劳动。每次 git push,你的代码自动完成从编辑器到可运行服务的全过程。

下一步:部署到服务器

把代码推送到仓库只是中间一站。最终目标是让用户能访问到它。

看如何部署 →

Built with VitePress | Software Systems Atlas