GitHub Actions 筆記
若習慣使用 GitHub 作為版本庫的話,那 GitHub Actions 肯定很香。與 GitHub 版本庫串接神速;有著超大的 Marketplace 可以找到許多相關資源;與 GitLab CI 或 Drone CI 類似,可以使用 container 環境來執行整合或部署建置環境,真的非常好用。
本篇文章不會討論太深的技術細節,主要分享我在某些情境應用的解決方法。
PHP 套件樣版
我有自幹了一個 Composer 樣版基礎,裡面做了幾件事:
- 使用 shivammathur/setup-php 設定 PHP 環境,包括 Composer
- 安裝依賴、測試
- 使用 codecov/codecov-action 上傳覆蓋率報告
- 以上過程可以使用 matrix build 做多版本測試
前三點單純是去 Marketplace 找工具來用,第四點比較特別,設定方法如下:
jobs: |
matrix
裡是設定各個組合的變數,然後下面就可以使用 ${{ matrix.key }}
來取得對應組合的變數。
如果要把特定組合除外的話,可以在 matrix 加 exclude 參數;如果某些特定組合可以接受執行失敗的話,可以用 jobs.<job_id>.continue-on-error
設定,它也能接受 matrix 的變數。
Docker Image 建置與發布
過去幾年來,我還蠻熱衷做 Docker Image,使用 GitHub Actions 建置真的很方便。目前在 marketplace 用過覺得最好用的是 elgohr/Publish-Docker-Github-Action ,我目前的需求都能很好地解決:
- 指定 Dockerfile 位置 + matrix build
- 指定 Registry
- 在同個 IMAGE ID 上標多個 tag
- 偶爾會想手動建置
以 mileschou/xdebug 為例,指定 Dockerfile 只要在 with 加 dockerfile 參數即可:
dockerfile: 8.1/Dockerfile |
指定 Registry 是類似的做法,像 GitHub Container Registry 是用下面這個設定:
registry: ghcr.io |
值得一提的是,因為都是自家產品,所以產 token 的過程可以依版本庫自動授權,到 Repo Setting -> Actions -> General -> Workflow permissions 即可調整是否有寫入權限。最後帳密那裡可以這樣打:
username: mileschou |
secrets.GITHUB_TOKEN
是 GitHub Actions 預定義的變數,它會在啟動 Actions 的時候給你一個臨時的 token,權限範圍限制很多但合理,只有當下 Repo 的存取權限,以及 Registry 的權限(如果有設定的話)。
如果想要人工觸發 job 的話,可以在觸發條件加上下面這個 key 即可。這樣未來在 Actions 頁面就會看到可以自己觸發的按鈕。
on: |
小結語
GitHub Actions 真的很快!如果是寫開源在 GitHub 上的話,別懷疑,用 Actions 就對了。