GitHub Actions实现自动部署
每次部署 Go 项目,我都要先构建二进制文件,再上传到服务器,最后重启服务。这篇记录怎样用 GitHub Actions 串起这几步,让推送代码后能自动完成部署。
介绍
GitHub Actions 根据仓库事件运行工作流,可以用来构建、测试或部署。下面这个例子需要先分清五个概念:
| 概念 | 在这个部署流程里的作用 |
|---|---|
| Event | push 到指定分支时触发,也可以按 PR、定时或发布等事件触发 |
| Workflow | .github/workflows/ 下的 YAML 文件,组织整个自动化流程 |
| Job | 一组在指定 runner 环境中执行的步骤;多个 job 可以按依赖串行或并行 |
| Step | job 中的一步,执行命令或调用 action |
| Action | 可复用的操作,例如检出代码或准备 Go 环境 |
具体定义见 官方文档。这里用一个 job 完成构建、SCP 上传和远程重启服务,服务器上的目录、SSH 权限与 systemd 服务需要事先准备好。
配置 GitHub Actions
创建 GitHub Actions Workflow 文件
在项目的根目录下创建 .github/workflows/deploy.yml 文件。这个文件定义了你的自动化工作流流程。
1 | |
该配置文件的主要过程是:
- 编译生成二进制文件。
- 将二进制文件上传到服务器。
- 通过 SSH 重启已经配置好的
systemd服务。
配置 GitHub Secrets
为了确保 SSH 连接的安全性,你可以将敏感信息(如服务器 IP、SSH 密钥等)存储在 GitHub Secrets 中。
- 进入 GitHub 仓库的页面。
- 点击
Settings->Secrets and variables->Actions->New repository secret。 - 添加以下 Secrets:
SERVER_HOST: 服务器的 IP 地址或域名。SERVER_USER: SSH 连接使用的用户名。SSH_PRIVATE_KEY: 服务器的 SSH 私钥(需要在服务器上配置公钥)。
如何生成 SSH 密钥
你可以通过以下命令生成 SSH 密钥对:
1 | |
生成的私钥可以用于 SSH_PRIVATE_KEY,而公钥需要放置在你服务器的 ~/.ssh/authorized_keys 文件中。
验证部署
以上步骤完成,你可以推送main分支,然后看见github会自动开始构建,
成功后会有以下页面
到服务器也可以通过输入以下命令查看服务是否运行
1 | |
补充
如果还要自动创建或更新 systemd 服务文件,可以继续把相应命令放进工作流。上面的示例只处理已有服务的重启。
延伸阅读
GitHub Actions实现自动部署
https://blog.phlin.cn/2024/10/01/github-actions/