強大的Github Actions

少年阿濤發表於2019-11-01

前言

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 ? 持續編碼?‍?,自動部署?。

參考

相關文章