强大的Github Actions

3,069 阅读3分钟

前言

github有一个神器,叫做Github Actions,基于它提供的自动化构建服务,我们可以进行构建,测试,打包,部署我们的代码项目,相对于jenkins这类构建服务,它最大的优势是提供了整套服务器环境,包括Linux,Windows,macOS这些可选的服务器,这样一来,我们就不需要把时间花在搭建服务器这类繁冗无意义的事情上,把精力集中在我们的构建脚本任务上。

开始

我们先看一个例子main.yml:


name: Flutter Web Build To Github Page
on:
  push:
    branches:
      - master
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: checkout
      uses: actions/checkout@master
      
    - name: build   
      uses: subosito/flutter-action@v1
      with:
        channel: 'stable'
    - run: flutter pub get
    - run: flutter channel master
    - run: flutter upgrade
    - run: flutter config --enable-web
    - run: flutter build web
    - run: cp ./CNAME ./build/web/CNAME
      
    - name: deploy
      uses: peaceiris/actions-gh-pages@v2.5.0
      env:
        PERSONAL_TOKEN: ${{ secrets.ACCESS_TOKEN }}
        PUBLISH_BRANCH: gh-pages
        PUBLISH_DIR: ./build/web

Github Actions的脚本任务是yml格式的,上面这个脚本的任务如name,就是使用flutter web构建web项目,然后把网站产物部署到GitHub Pages,打包部署一步到位。

基本概念

如上,Github Actions有几个关键字:

  • workflow: 就是指整个脚本运行的过程
  • on: 指的是触发任务的条件,如push等条件
  • job: 是运行在特定环境的一次任务,一个workflow包含多个job
  • step: 描述执行job的步骤,一个job包含多个step
  • action: 是每个step执行的命令,一个step包含多个action

他们之间的关系如下:

workfolw > job > step > action

了解了基本概念之后,接下来我们分析上面的任务都做了啥,

  • 首先看到on,条件是push,分支是master,所以这个workflow触发的条件就是我们在master分支push了代码,更多的触发条件可以看这里

  • 然后就是jobs,开始job之前,需要设定执行环境,也就是runs-on,我上面设置的是 ubuntu-latest;

  • 接着就是一个又一个的step:

    • checkout: 把master的分支切出来
    • build: 执行了一系列的flutter web构建命令,和平时在命令行做的操作没有差异。
      flutter pub get
      flutter channel master
      flutter upgrade
      flutter config --enable-web
      flutter build web
    
    • deploy: 部署操作,把上个step产生的产物推送到一个新分支gh-pages, 产物的输出文件夹是./build/web
  • 等待所有任务执行完毕,此次构建就完成了。

除此之外,上面的构建脚本还有几个要注意的地方:

  • 上述使用的actions/checkout其实是github提供的标准actions, 所以执行checkout操作,只需直接使用;

  • 除了标准actions,我们还可以使用开发者在marketplace发布的actions,像上述执行的flutter构建任务,是需要flutter环境的,而使用了subosito/flutter-action@v1,就无需关心环境问题,直接执行相应的构建命令即可;

  • 部署操作,推到GitHub Page需要配置ACCESS_TOKEN, 这个需要在GitHub项目的settings进行设置。

  • Github page默认是取的gh-pages分支,可以在CNAME配置自定义域名, 同时因为每次部署会把CNAME覆盖,所以会进行cp操作,把CNAME拷贝到产物文件夹一起进行部署。

总结

Github神器:

  • Github Actions ➡ 0服务器持续打包构建项目
  • Github Pages ➡ 0需服务器部署网站

Github Actions + Github Pages 🔜 持续编码👨‍💻,自动部署🔨。

参考