曾几何时,我们更新网站的流程是:本地打包 -> 打开 FTP 软件 -> 拖拽上传 -> 重启服务器。这不仅效率极低,而且一旦出错极难回滚。

自从全面切入 CI/CD(持续集成/持续部署)工作流后,我彻底解放了双手。今天来聊聊目前最推荐的轻量级方案:GitHub Actions。

什么是 GitHub Actions?

简单来说,它就是 GitHub 提供的一台免费服务器,当你每次提交代码 (Push) 时,它会自动按照你写好的脚本执行一系列动作:测试、编译、甚至通过 SSH 登录到你的服务器完成部署。

[在这里插入一张 GitHub Actions 成功运行通过的绿色打钩截图]

实战:部署一个静态博客

假设我们要自动部署一个前端项目,只需要在项目根目录新建 .github/workflows/deploy.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
name: Deploy Website
on:
push:
branches:
- main # 只有合并到 main 分支才会触发

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'

- name: Install and Build
run: |
npm install
npm run build

- name: Deploy via SCP
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SERVER_IP }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: "dist/"
target: "/var/www/my-website"

密钥管理

注意上面的 ${{ secrets.SERVER_IP }}。永远不要把服务器 IP 和私钥直接写在代码里!在 GitHub 项目的 Settings -> Secrets 中配置这些环境变量,既安全又优雅。

只要配置好这一次,以后所有的更新只需要敲一句 git push,剩下的事情去喝杯咖啡,机器会自动帮你完成。