说明:
- 物料仓库被推送代码时,可以触发 github 的钩子(webhook)
- 钩子触发
工作流程(workflow)(如果仓库中有设置) 工作流程(workflow)是一段脚本,它会运行在 github 官方的免费云服务器上(公网 ip),你可以在流程里干任何事情- 一般用法是将
工作流程(workflow)用于持续集成服务(Continuous Integration,简称 CI),如: push 后自动构建,自动部署到 github 的 page 服务(可以是物料仓库本身或者是别的仓库),甚至自动部署到阿里云的 OSS 服务。
实践:
以push代码后:自动构建→自动部署github-page为例。 这里的源代码仓库(物料仓库)和github-page服务仓库分开,即不是同一个仓库。
1. 准备工作
- 在 github 创建一个 private token (第三方推送代码到你仓库需要此凭据)。
- 路径是:我的头像→setting→Developer setttings→Personal access tokens→Generate new token→勾选有效期、在Select scopes中勾选workflow的权限。
- 创建完之后一定要手动保存下来,后续会用到,
token内容只会展示一次。
- 进入物料仓库,添加 secret
token。(workflow中推送代码到指定仓库需要用到)。- 点击仓库的setting→Secrets→Add a new secret
- 给
secret添加名字(名字随便填,这里填ACCESS_TOKEN作为例子),secret内容则是第一步中创建的token。
2. 编写工作流程,构建github-page示例:
-
还是在物料仓库,编写 workflow 文件。
- 路径是固定的,仓库根目录创建此文件夹:
.github/workflows - 在此文件夹中创建任意
yml后缀的文件。如main.yml
name: CI # 什么时候执行 on: # 这里设置成push时,还可以进一步设置监听什么分支的push push: branches: [main] pull_request: branches: [main] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: # 当前工作流的任务,一般有test、build、deploy。但是一般看别人都是一个build包括了打包和发布。 build: # 初始环境选择 runs-on: ubuntu-latest steps: # name是指定显示在任务面板上的名字 - name: checkout # uses就是使用github官方action仓库的一些action uses: actions/checkout@master - name: install & build # run 是具体要执行的脚本 run: | node ./scripts/build.js - name: deploy # 继续使用官方仓库的一个action,注意看版本号 # 每个版本的参数名可能不一样,所以得去action的仓库查阅对应版本文档 uses: JamesIves/github-pages-deploy-action@4.1.4 # with指定参数,有时候是env,具体要看action的文档,这里的参数名大小写好像不敏感,因具体action而异。 with: FOLDER: dist # 当前物料仓库的构建产物所在目录,一般是打包出口如dist token: ${{ secrets.ACCESS_TOKEN }} # 物料仓库的secret设置,此例中secret token的命名为ACCESS_TOKEN, 有了这个,github action才有权限推送构建产物到你指定的仓库。 repository-name: Carnia/page # 目标仓库名字(注意格式,不是http链接),不填的话默认就是物料仓库本身。你甚至可以推送到别人的仓库,只要你有他的secret token。 GIT_CONFIG_NAME: carnia GIT_CONFIG_EMAIL: carnia@github.com BRANCH: gh-page # 目标仓库目标分支 target-folder: static # 目标仓库文件目录 - 路径是固定的,仓库根目录创建此文件夹:
- 推送代码到物料仓库的
main分支,git action就会开始自动运行构建、部署。最后会将dist目录下的产物推送到Carnia/page仓库里的gh-page分支(如果没有此分支则会自动创建)的static文件夹内。
3. 在对应的仓库开启github的page服务
- 详见git page
- 找到对应的入口网址。如 https://carnia.github.io/page/,打开即是构建后的产物目录。
rsync 同步构建产物到服务器示例
- 部署服务端。正常情况下可以直接在服务器pull代码再构建,但是能白嫖git action的服务器去构建何乐而不为呢,下面这个例子用到了rsync,需要在服务器上安装rsync,并开启对应的文件同步路径。流程是git action构建,然后同步文件到服务器,然后启用服务。
name: Deploy site files on: push: branches: - master # 只在master上push触发部署 paths-ignore: # 下列文件的变更不触发部署,可以自行添加 - README.md - LICENSE jobs: deploy: runs-on: ubuntu-latest # 使用ubuntu系统镜像运行自动化脚本 steps: # 自动化步骤 - uses: actions/checkout@v2 # 第一步,下载代码仓库 - name: Deploy to Server # 第二步,rsync推文件 uses: AEnterprise/rsync-deploy@v1.0 # 使用别人包装好的步骤镜像 env: DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} # 引用配置,SSH私钥 ARGS: -avz --delete --exclude='*.pyc' # rsync参数,排除.pyc文件 SERVER_PORT: "22" # SSH端口 FOLDER: ./ # 要推送的文件夹,路径相对于代码仓库的根目录 SERVER_IP: ${{ secrets.SSH_HOST }} # 引用配置,服务器的host名(IP或者域名domain.com) USERNAME: ${{ secrets.SSH_USERNAME }} # 引用配置,服务器登录名 SERVER_DESTINATION: /home/fming/mysite/ # 部署到目标文件夹 - name: Restart server # 第三步,重启服务 uses: appleboy/ssh-action@master with: host: ${{ secrets.SSH_HOST }} # 下面三个配置与上一步类似 username: ${{ secrets.SSH_USERNAME }} key: ${{ secrets.DEPLOY_KEY }} # 重启的脚本,根据自身情况做相应改动,一般要做的是migrate数据库以及重启服务器 script: | cd /home/fming/mysite/ python manage.py migrate supervisorctl restart web