GitHub Actions 如同九方皋相馬,見其所見,不見其所不見;視其所視,而遺其所不視。預設環境是讀不到 Code 的,要使用 actions/checkout 才能讀取 repo 內容。

今天我們要來討論如何使用 GitHub Actions 來自動化 Git 操作,例如自動編輯文件、提交(commit)變更以及推送(push)代碼到儲存庫中。這些操作可以讓你的開發流程更為順暢,尤其在一些重複性任務上,例如定期更新版本號、自動生成文件或部署後自動提交紀錄等。今天將介紹兩種方法:一種是手動使用 Shell 指令,另一種是使用現成的 GitHub Actions 函式庫。

今日範例程式:https://github.com/Edit-Mr/2024-GitHub-Actions/tree/main/3

國小複習:什麼是 Git?

我們小學四年級電腦課都學過 Git 是一個分散式版本控制系統,用於追蹤文件的變更、協作開發和版本管理。而要在 GitHub Actions 中自動化 Git 操作有以下兩種方法:

  1. 手動編寫 Shell 指令:

    • 使用基本的 Git 指令來完成自動提交和推送。
    • 這種方法適合有自定義需求的情境,例如在提交前進行特定檢查或修改。
  2. 使用現成的函式庫:

    • GitHub Marketplace 上有許多開源的 GitHub Actions 函式庫,可以用來簡化這些操作。
    • 這些函式庫可以更快速地實現自動化,並且通常已經涵蓋了常見的錯誤處理。

實作:手動使用 Shell 指令自動化 Git 操作

我們先來看看如何手動編寫 Shell 指令來自動提交和推送代碼。

步驟 1:建立工作流程文件

  1. 在儲存庫中,創建一個新的 GitHub Actions 工作流程文件,例如 .github/workflows/auto-commit.yml

步驟 2:編寫 YAML 配置文件

1name: 自動提交和推送
2
3on:
4    schedule:
5        - cron: "0 0 * * *" # 每天凌晨 12 點執行一次
6    workflow_dispatch: # 手動觸發
7
8jobs:
9    commit:
10        runs-on: ubuntu-latest
11
12        steps:
13            - name: 檢出代碼
14              uses: actions/checkout@v3
15
16            - name: 進行修改
17              run: |
18                  echo "Update on $(date)" >> update.log
19                  # 你可以在這裡添加更多自動化變更的指令
20
21            - name: 提交變更
22              run: |
23                  git config --global user.email "your-email@example.com"
24                  git config --global user.name "Your Name"
25                  git add .
26                  git commit -m "Automated commit on $(date)"
27
28            - name: 推送代碼
29              env:
30                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
31              run: git push origin main

YAML 文件解析:

  • schedule: 使用 cron 表達式來設定工作流程的自動觸發時間。這裡設定為每天凌晨 12 點自動執行。
  • workflow_dispatch: 允許手動觸發工作流程。
  • steps: 分別執行檢出代碼、進行修改、提交變更以及推送代碼。
  • git config: 設置提交時使用的用戶信息,使用過 git 的話你會知道這是必要的,否則提交會失敗。
  • GITHUB_TOKEN: 使用 GitHub 提供的內建密鑰來進行認證並推送代碼。

步驟 3:推送工作流程文件

1git add .github/workflows/auto-commit.yml
2git commit -m "Add auto commit and push workflow"
3git push origin main

應用範例:

  • 定期更新項目狀態: 可以每天自動更新一個狀態文件,記錄當天的構建或測試結果。
  • 自動生成文檔: 在代碼變更後,自動重新生成文檔並提交到儲存庫。

實作:使用現成的函式庫自動化 Git 操作

接下來,我們來看看如何使用現成的 GitHub Actions 函式庫來簡化自動化 Git 操作。

步驟 1:使用 stefanzweifel/git-auto-commit-action 函式庫

這個開源的 GitHub Actions 函式庫可以幫助我們簡單地實現自動化的提交和推送。

步驟 2:編寫 YAML 配置文件

1name: 使用套件自動提交和推送
2
3on:
4    schedule:
5        - cron: "0 0 * * *"
6    workflow_dispatch:
7
8jobs:
9    commit:
10        runs-on: ubuntu-latest
11
12        steps:
13            - name: 檢出代碼
14              uses: actions/checkout@v3
15
16            - name: 進行修改
17              run: |
18                  echo "Update on $(date)" >> update.log
19
20            - name: 自動提交
21              uses: stefanzweifel/git-auto-commit-action@v4
22              with:
23                  commit_message: "Automated commit on $(date)"
24                  branch: main
25                  commit_user_name: GitHub Actions
26                  commit_user_email: actions@github.com

YAML 文件解析:

  • stefanzweifel/git-auto-commit-action@v4: 使用這個函式庫來自動進行提交和推送。
  • commit_message: 設定自動提交時的訊息。
  • branch: 指定提交的分支。
  • commit_user_name:commit_user_email: 設定提交時的用戶訊息,這些已經在函式庫中預設好。

步驟 3:推送工作流程文件

1git add .github/workflows/auto-commit-action.yml
2git commit -m "Add auto commit and push workflow with action"
3git push origin main

應用範例:

  • 版本號自動更新: 每次 push 代碼時,自動增加版本號並提交。
  • 自動同步: 在分支間進行自動同步,保持不同環境的一致性。

常用技巧與注意事項

  1. 避免無限遞迴提交:
    • 當自動提交導致觸發條件發生變化時,可能會導致無限遞迴。要避免這種情況,可以設置條件或標記來限制提交次數。

你 push 之後,Acction 看到有人 push 所以也 push,Acction 看到有人 push 所以也 push,Acction 看到有人 push 所以也 push...

  1. 使用 GitHub Secrets:

    • 將敏感信息(如 GitHub Token、用戶憑證)儲存在 GitHub Secrets 中,並在工作流程中引用,以保證安全性。
  2. 檢查提交日誌:

    • 使用 git log 檢查自動提交的日誌,確保提交的內容正確且符合預期。
  3. 靈活使用 cron 表達式:

    • 根據需要設置自動觸發時間,例如每天、多次每天、每週等,來更好地控制自動化流程。

結語

透過這篇文章,我們探討了如何在 GitHub Actions 中自動化 Git 操作,無論是使用手動 Shell 指令還是現成的函式庫,這些技巧都能幫助我們更有效地管理專案,減少重複性工作,提升生產力。希望這些內容能為你在實際開發中帶來幫助。明天我們會來對檔案進行更多操作並上傳作為工件(artifact)。

毛哥EM

一位喜歡把簡單的事,做得不簡單的高三生。