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