半熟前端

軟體工程師 / 台灣人 / 在前端的路上一邊探索其他領域的可能性

軟體工程

如何為你的專案引入 Github Actions

一句話形容 Github Actions

Github 內建的 CI/CD。

github-actions

簡介

以往要做 CI,團隊中可能要花一些時間討論(吵架)CI 的解決方案,像是 CircleCI、DroneCI、Jenkins 等等,但是只要團隊當中將程式碼放在 Github 上面託管,就可以輕鬆和 Github 整合 CI,雖然的確不能說是萬靈丹、殺手鐧,但在一般要跑測試、甚至是 push and deploy 之類的場景我覺得都是蠻簡單就可以達到的,以下就來介紹一下 。

如何引入

只要在程式碼的根目錄當中加入 .github/workflows/your-workflow.yml 的描述檔就好。

相關資源

在開始之前,或許直接丟幾個文件連結按表操課更快。總之如果喜歡看完文件再動手的話可以參考:

如何為自己的專案加入 Github Actions

一個 workflow 裡頭有數個 jobs ,job 本身以數個 step 組成,step 可以是一個 github action、跑一個指令等等。大致上就像下面的範例:

name: your-name

# 可以使用的事件直接參考文件
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#on
on:
  push:
    branches:
      - master
    paths-ignore: # 有時候不想要改個文件也觸發 github actions,可以用這個 ignore
      - 'docs/**'
      - 'README.md'
      - 'LICENSE'
      - 'CONTRIBUTING.md'
    branches-ignore:
      - 'xxxx'
    tags-ignore:
      - 'v1.*'
env: # 塞 env variable
  PROJECT_ID: ${{ secrets.PROJECT_ID }}
  RUN_REGION: asia-northeast2
  SERVICE_ACCOUNT: ${{ secrets.SERVICE_ACCOUNT }}

jobs:
  setup-build-and-deploy:
    name: Setup gcloud and deploy
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
        with:
          version: '290.0.1'
          project_id: ${{ secrets.PROJECT_ID }}
          service_account_email: ${{ secrets.SA_EMAIL }}
          server_account_key: ${{ secrets.SA_KEY }}
          export_default_credentials: true
      - name: Deploy
        run: |-
          echo $SERVICE_ACCOUNT > /tmp/key.json && \
          gcloud auth activate-service-account --key-file /tmp/key.json && \
          gcloud app deploy --project "$PROJECT_ID"

比較進階的像是你想在 runtime 動態判斷,可以這樣子寫:https://help.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions

env:
  my_env_var: ${{ ALPHA ? 'A' : 'B' }}

Github Actions 在跑的時候本身會幫你塞一些 context 進去。

## 環境變數

環境變數可以在專案當中的 secret 裡頭設定,預設是只有 Collaborator 可以看到,其他人沒辦法透過 Pull Request 來將 secret 塞進去 Github Actions。

Github Secret

這篇文章算是隨手紀錄一下 Github Actions 怎麼用,下次設定起來應該就會比較快了。