強大的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 🔜 持續編碼👨‍💻,自動部署🔨。

參考

相關文章
相關標籤/搜索