使用githubAction进行自动化部署
之前每次写完博客,都需要敲hexo deploy命令来发布上线,感觉很麻烦。回想公司使用Gitlab CI进行自动化部署前端项目,还是挺方便的。其实Github也提供了类似的功能,那就是Github Action。过程不算难,不过还是水篇文章记录下了。
为啥选 GitHub Action
目前我自己知道的比较常用的自动化部署方案有以下几种:
Gitlab CI,需要自建Gitlab仓库Jenkins,需要单独部署,发版的时候需要点一下Github Action,在Github仓库内置,而且不要钱
所以我选了Github Action。
上面这段文字显然是一堆废话,为了显示这个段落不是很水,顺带提一下啥是CI/CD。
CI/CD指的是持续集成(Continuous integration)和持续交付(Continuous delivery)。前者通过自动化的编译、发布、自动化测试来保障集成到主分支的代码不出现问题;后者是前者的支撑之一,它的目标在于让软件的构建、测试与发布变得更快以及更频繁。有一定规模的技术型公司一般很重视这个事情,也会有相应配套的基础设施(Gitlab仓库、Jenkins等),甚至更高级一点的还会用上容器化技术(docker、k8s、harbor等)。做这一切的目标都是为了使发版变得更加高效,且容错更高。
这部分涉及到的技术还是很多的,就是DevOps工程师的技术栈。感觉还是比较有趣的,以后有空再看看要不要学。
当然,个人博客项目搞啥自动化测试、CR都是没啥卵用的,只要管好自动化部署就行了。
部署过程
首先你的代码托管仓库要是Github,如果不是的话下面的操作就没啥必要了。
编写 yml
在仓库的根目录下创建.github/workflows/deploy.yml。我自己的yml文件内容像这样:
name: github pages
on:
push:
branches:
- master # push 到 main 分支时触发 jobs
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2 # If you're using actions/checkout@v2 you must set persist-credentials to false in most cases for the deployment to work correctly.
with:
persist-credentials: false
# checkout到你的hexo代码分支
ref: master
# hexo需要加载内部子模块
submodules: true
- name: Install and Build
run: |
npm install
npm run build
# 将静态页面部署至 ECS
- name: Deploy to ECS
uses: garygrossgarten/github-action-scp@release # 使用 scp 工具将静态页面远程复制到 ECS
with:
local: public # 待复制的本地文件路径
remote: /home/git/nginx/html # ECS 路径
host: xxx # ECS 域名 或 IP 地址
username: xxx # 登录用户名
password: xxx # 登录密码
port: xxx # scp 端口号(默认 22)其实过程也简单,在每次提交后Github仓库会帮我们执行上面的脚本,走检出分支、npm安装、打包、把产物挪到服务器的静态资源目录。
设置加密信息
上面的yml有一部分配置是部署到服务器上的,要写入一些比较敏感的信息。这部分信息不建议裸着写,而应该像下面这样:
#......
# 将静态页面部署至 ECS
- name: Deploy to ECS
uses: garygrossgarten/github-action-scp@release # 使用 scp 工具将静态页面远程复制到 ECS
with:
local: public # 待复制的本地文件路径
remote: /home/git/nginx/html # ECS 路径
host: ${{ secrets.HOST }} # ECS 域名 或 IP 地址
username: ${{ secrets.SSH_USERNAME }} # 登录用户名
password: ${{ secrets.SSH_PASSWORD }} # 登录密码
port: ${{ secrets.SSH_PORT }} # scp 端口号(默认 22)secrets字段要去仓库的Setting里面配置:

点击New reporisitory可以增加你想要加密的变量。
写在最后
完成上面的步骤,尝试提交文件更改到仓库,可以在这个地方看到任务执行情况:

不过目前执行的脚本依然还是传统的打包发版,以后有空探索下如何把前端工程打包成镜像,通过docker-compose进行部署。
