# 【學習筆記】用 GitHub Actions 實現 CI/CD CI/CD 幫助開發者透過自動化的方式持續進行測試、交付和驗證,讓開發者可以專注在開發上面,而 Github Actions 讓我們透過建立工作流(workflow),在 Github 上面完成 CI/CD,自動測試和部署 Github 上的 repo。 ## 檔案架構 工作流(workflow)設定檔必須放在 `.github/workflows/` 這個目錄下,GitHub 會偵測和執行放在這個目錄中的 YAML 檔案。 ``` repository/ ├── .github/ │ └── workflows/ │ └── workflow.yml ├── folder/ ├── README.md └── ... ``` ## 用 YAML 設定 workflow 以一個簡單的例子說明 workflow 的語法和執行方式: ```yaml name: Deploy my project to production on: push: branches: - main schedule: - cron: "0 0 * * 0" workflow_dispatch: ``` - `name` 是 workflow 的名稱,會顯示在 Github Actions 的頁面上。 - `on` 定義了什麼時候會觸發這個 workflow,可以設定多種觸發方式,例如:push、pull_request、schedule 等。 - `push` 定義 push 到指定分支的時候會觸發,在這個例子中指定的分支是 `main`。 - `schedule` 依照 cron 排程,指定的時間就會觸發。 - `workflow_dispatch` 允許手動在 GitHub Actions 頁面點擊按鈕來觸發這個 workflow。 一個標準的 `cron` 表達式有五個欄位,每個欄位都代表一個時間單位: |欄位|名稱 | 允許值 | 範例| | ---|---|---|---| 一 |分鐘| 0-59| `30` 代表每小時的第 30 分鐘執行| 二 |小時| 0-23 |`8` 代表每天上午 8 點執行| 三| 日| 1-31| `1,15` 代表每個月的 1 號和 15 號執行| 四| 月| 1-12| `*` 代表每個月都執行| 五| 星期 | 0-6(0 表示日)| `0` 代表每週日執行| ```yaml jobs: deploy: # job name that defined by yourself runs-on: ubuntu-latest steps: - name: Checkout my code uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Run my deployment script env: API_KEY: ${{ secrets.MY_API_KEY }} DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }} run: python deploy.py ``` - `jobs` 定義了這個工作流要做的一系列任務(jobs),一個工作流可以包含多個任務,它們可以並行或依序執行。 - `runs-on` 定義這個任務在哪種作業系統上運行,GitHub 有提供 Linux、Windows 和 macOS 虛擬機器。 - `steps` 包含了任務中要執行的所有步驟,每個步驟會依序執行。 - `name` 是步驟的名稱,會顯示在 logs 中。 - `uses` 用來引用一個已有的 GitHub Action。 - `actions/checkout` 這個 action 用來將儲存庫的程式碼下載到環境中。 - `actions/setup-python` 安裝 Python。 - `run` 用來執行 shell 指令。 - `env` 區塊用來設定這個步驟的環境變數,設定 `${{ secrets.SECRET_NAME }}` 可以安全讀取 GitHub Secrets 中儲存的密鑰。 [這裡](https://docs.github.com/en/actions/reference/workflows-and-actions/events-that-trigger-workflows)包含更多 Github Actions 的語法。 ## 添加 Actions secrets 在當前 repo 中,進入 `Settings` > `Secrets and variables` > `Actions` > `New repository secret` 來添加環境變數。 ## Refernece - https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax - https://medium.com/starbugs/%E5%AF%A6%E4%BD%9C%E9%96%8B%E6%BA%90%E5%B0%8F%E5%B7%A5%E5%85%B7-%E8%88%87-github-actions-%E7%9A%84%E7%AC%AC%E4%B8%80%E6%AC%A1%E7%9B%B8%E9%81%87-3dd2d70eeb
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.