强大的Github Actions

前言

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

开始

咱们先看一个例子main.yml:git

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

基本概念

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

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

他们之间的关系以下:ubuntu

workfolw > job > step > action
复制代码

了解了基本概念以后,接下来咱们分析上面的任务都作了啥,服务器

  • 首先看到on,条件是push,分支是master,因此这个workflow触发的条件就是咱们在master分支push了代码,更多的触发条件能够看这里post

  • 而后就是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
  • 等待全部任务执行完毕,这次构建就完成了。ui

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

  • 上述使用的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 🔜 持续编码👨‍💻,自动部署🔨。

参考

相关文章
相关标签/搜索