一句話形容 Github Actions
Github 內建的 CI/CD。
![github-actions](/img/Screenshot_2020-05-02 kjj6198 animal-crossing-info.png "github-actions")
簡介
以往要做 CI,團隊中可能要花一些時間討論(吵架)CI 的解決方案,像是 CircleCI、DroneCI、Jenkins 等等,但是只要團隊當中將程式碼放在 Github 上面託管,就可以輕鬆和 Github 整合 CI,雖然的確不能說是萬靈丹、殺手鐧,但在一般要跑測試、甚至是 push and deploy 之類的場景我覺得都是蠻簡單就可以達到的,以下就來介紹一下 。
如何引入
只要在程式碼的根目錄當中加入 .github/workflows/your-workflow.yml
的描述檔就好。
相關資源
在開始之前,或許直接丟幾個文件連結按表操課更快。總之如果喜歡看完文件再動手的話可以參考:
- 導覽:https://github.com/features/actions
- 文件:https://help.github.com/en/actions
- Github Actions 套件:https://github.com/marketplace?type=actions
如何為自己的專案加入 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 Actions 怎麼用,下次設定起來應該就會比較快了。