愛爾蘭詩人葉慈:「學習不是注滿一桶水,而是點燃一把火。

這一個月的 GitHub Actions 真的十分刺激,因為今年要準備特選、要弄完手邊的專案、還要準備學測,所以能夠百忙之中抽出時間完成這個系列真的很不容易。鐵人賽的存在能我有機會能夠回顧我這一年都在研究甚麼,並系統性的整理出來。在這一年因為加入了中電會因此開始有大量的與他人協作專案和大量的部屬工作,發現與其跟組員吵誰要做甚麼事,有的人會忙,有的人不會做,有的人消失...這時不如交給 GitHub Action 吧,穩定又快速。

在這個系列當中我們從最基礎的操作開始,一步步深入到複雜的自動化流程。每天的研究與實作不僅讓我對 GitHub Actions 的能力有了更深刻的理解,也使我在實際應用中獲得了豐富的經驗。讓我們回顧一下我們這個月做了哪些事情吧。

我們每天在幹嘛?

  1. 靠著那 GitHub Actions,凡事都能做 我們認識了 GitHub Actions,設置了第一個工作流程,並運行了一個簡單的 Jest 測試。

  2. Hello World:運行 Shell 指令 我們探討了如何在 GitHub Actions 中運行 Shell 指令來進行各種操作。

  3. 幫我結帳 - 自動化 Git 操作 我們使用 actions/checkout 檢出代碼,探討如何在工作流程中操作 Git,實現自動化代碼管理。

  4. 弄好了給你 - 上傳與下載工件(artifact) 我們了解了如何在工作流程中處理文件,進行壓縮和解壓縮操作,並上傳作為工件(artifact)。這樣可以方便後續的操作和部署。

  5. 用 Prettier 統一天下 - 讓程式碼格式一致 我們認識了 Prettier,設置了自動格式化代碼文件並推送。這樣可以確保代碼風格一致,提高代碼可讀性,維護代碼品質。

  6. 有意見就說 - 編輯後自動提 Pull Request 我們探討了如何讓 GitHub Actions 編輯檔案後自動創建 PR,而不是直接推送代碼。這樣可以方便代碼審查和合併。

  7. 時間差不多囉 - 事件觸發器 我們認識了不同的事件觸發器,以及它們在工作流程中的應用。這樣可以根據特定事件自動執行工作流程。

  8. 今天不講 DVD,來談談 CI/CD - eslint 與 pylint 我們設置了基本的 CI 工作流程來運行 eslint 和 pylint,檢查代碼的風格和質量。這樣可以確保代碼符合規範。

  9. Jest Do It - 運行單元測試 我們使用 Jest 測試框架,設置並運行了各種不同的測試。

  10. 啊我就怕不相容 - 多平台測試 我們認識了矩陣策略,並使用它來測試多個 Node.js 版本。這樣可以確保代碼在不同平台和環境下的一致性與兼容性。

  11. 告訴你一個大秘密 - 如何在 GitHub Actions 中使用 Secrets 我們設置和使用 API 金鑰進行身份驗證。這樣可以安全地管理和使用敏感信息,避免泄漏。

  12. 一切都是有條件的 - 環境變數和條件運行 我們認識了環境變數和條件運行,根據不同的條件選擇性地執行任務。這樣可以靈活控制工作流程的執行,根據不同環境進行配置。

  13. 在碼頭等你 - 自動化 Docker 構建 我們了解了 Docker,設置了自動化 Docker 構建流程。這樣可以方便部署應用到不同環境中。

  14. 直上天雲 - 自動化部屬 我們一次時做了三個部屬,分別是 AWS S3、Heroku 和 Vercel。這樣可以實現無縫的部署過程,確保應用程序的最新版本隨時可用。

  15. 這是我家鑰匙 - SSH 自動化部署 我們實作了使用 SSH 將應用部署到遠程伺服器。這樣可以實現遠程伺服器的自動化部署,簡化部署過程。

  16. 解放你的 Release - 自動化版本控制與發布 我們自動創建 Git 標記並發布新版本。這樣可以管理版本控制和發布,追蹤版本變更和歷史。

  17. 有人在水 - 統計 Notion 待辦事項放到 Discord 頻道 我們透過 Notion API 和 Discord Webhook 實現了待辦事項的同步。這樣可以方便地查看還有多少任務待完成。

  18. 用 GitHub Actions 把 Issue 同步到 Notion 我們使用 Notion API 自動化 issue 管理。將 issue 和任務同步到 Notion,提高任務管理效率。

  19. 萬籟聚集 - 自動化 Issue 管理與集成第三方服務 我們探討了如何集成外部 API 和服務,自動化 GitHub issue 管理,並使用 CodeRabbit 自動進行代碼審查,Vercel 與 Zeabur 來實現自動化部屬。

  20. 渲染 Markdown 文件 - 自動生成和更新項目文檔 我們實作了自動生成和更新項目文檔的工作流程。這樣可以確保文檔始終更新,提高文檔的可讀性和維護性。

  21. 我沒錢買 MacBook - 自動化多平台 Python 應用打包 我們使用 PyInstaller 打包 Python 應用,並實現多平台自動化打包。這樣可以簡化應用的分發過程,支援不同操作系統。

  22. 特選簡章 Discord 通知 - 爬蟲腳本與數據處理 我們運行爬蟲腳本分析並存儲數據。每天自動抓取網站上的申請時間,如果有更新的話就使用 Discord 通知。

  23. 不在其位,不謀其政 - 多階段 CI/CD 流程 我們探討了如何串接多階段的 CI/CD 流程,包含構建、測試、部署。這樣可以管理複雜的工作流程,確保項目的每個階段都能自動化處理。

  24. 自動化性能測試 - 使用 GitHub Actions 進行負載測試與生成性能報告 我們運行負載測試並生成性能報告。這樣可以評估應用的性能,發現潛在的性能瓶頸。

  25. 自動化安全掃描與漏洞檢查 - 使用 Dependabot 和 GitHub Actions 我們使用 Dependabot 自動檢查依賴的安全性,檢查是否洩漏 secrets。這樣可以保障應用的安全性,及時發現和修補漏洞。

  26. 集成通知服務 - 在 GitHub Actions 中配置 Slack 通知和生成報告文件 我們配置 Slack 通知和生成報告文件。接著部屬到 GitHub Pages 上,這樣可以實時獲取工作流程的狀態,提高溝通效率。

  27. 優化工作流程運行時間:使用 GitHub Actions 快取來加速構建 我們使用 actions/cache 儲存依賴並加速構建。這樣可以提升工作流程的運行速度,節省時間和資源。

  28. 無國界倉庫 - 管理多倉庫的自動化工作流程 我們實現跨倉庫的代碼同步和自動化任務。這樣可以管理多個倉庫之間的協作,提高工作效率。

  29. 鐵人賽怕忘記發文?讓 GitHub Actions 每小時提醒你! 最後我分享了我為了這次鐵人賽製作的發文提醒工作流程。每天定時提醒我發文,讓我不會忘記。

我們學到了甚麼?

  1. 對 GitHub Actions 的全面掌握: 我們探討了如何設置基本的 Shell 指令,運行 CI 流程,使用 Prettier 格式化代碼,甚至是自動化 Docker 和雲端部署。發現 GitHub Actions 這個自動化工具如何在各種不同場景下提高效率。

  2. 從實作中探討: 每天的實作題目讓我們熟悉了各種實際問題的解決方案,從編寫自定義 Actions 到集成外部服務。特別是在設計多階段工作流程和進行性能測試時,不知道你有沒有體會到了細節管理的重要性,這就是自動化的真正價值。

  3. 效率優化: 在這個過程中,我們探討了如何使用環境變數、條件運行、快取等功能來優化工作流程的運行。這樣可以提高工作效率,節省時間和資源。

這 30 天的探討旅程不僅僅是技術上的挑戰,更是一種對自我的突破。探討和成長並不是一朝一夕的事,而是日積月累的結果。正如葉慈所說:「學習不是注滿一桶水,而是點燃一把火。」希望這段經歷能夠成為你們探索和探討的起點,也希望它能激勵你們在未來的技術道路上不斷前行。

感謝你們的陪伴和支持,希望這 30 天的系列能夠幫助你們更好地理解和運用 GitHub Actions。未來,我們還會有更多的技術挑戰,期待在探索的道路上再次相遇。我是毛哥EM,我們明年見。

毛哥EM

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