how to use github action's self hosted runners
首先來講講爲何突然想要用這個功能咧? 因爲最近在進行淬鍊我的pomodoro side project裡面所說的下個階段! 所以一直開發新功能就需要一直build,本來我都是在本地build啦,但是後來想說做個CD所以就用github action寫了一下build的流程,一切其實都滿順暢的,直到最近有時候github action 的 job 會timeout,一開始我是設定15分鐘,我想說可能是配給我的機器有時候給我效能不好的,所以可能就會需要比較長的時間,我本地build其實包含download大概才3分鐘~ 不過後來即使我加大timeout設定,它依然很厲害的給我繼續 timeout,我想說有這麼扯的嗎 XD 所以就去找看看有沒有 issue,果然真的有,人客就是這個 https://github.com/actions/runner-images/issues/11509 ,熱騰騰的 issue 啊,由於我反覆測試,就默默把我的 github action free limit 給耗掉了。。
這到底是什麼問題呢
這個問題是因爲我用 github action 提供的 macos image 來建立 flutter app CD 流程,目前沒CI流程 lol 照理說要有 CI 比較好啦,只是這個 side project很多東西都還在整理脈絡中,寫測試對我來講是把力氣分散到其他地方了,對於往當前目標邁進的幫助不大,不過或許 AI 改天可以拿來實驗測試的部分一下,來看它多聰明~
轉回話題,其實結論就是這個 image 還十分不穩定,看看下面我的job花費精美隨機時間分佈,耗時25秒的是錯誤設定造成可以忽略不看,但是其他的~ 可以看出時間分佈差異非常大對吧,尤其是最近還時間久到30分鐘 timeout 了。。
正常7分鐘就可以結束的 job, 被搞到超過30分鐘都無法結束。。 但是我也不能就這樣去賭他總有一次會正常,免得我下個月的 limit 又被搞到! 所以這時候就要來研究一下 github action self hosted runner了, 看了一下官方文檔 https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners , 其實好像也沒啥特別需要理解的,基本上 self hosted runner 就是變成 github action 的 workflow 背後是用你自建的執行者。對我目前的用法來講,一些注意事項好像也不是特別需要注意~ 像下面這個
A self-hosted runner is automatically removed from GitHub if it has not connected to GitHub Actions for more than 14 days
開始來試試看吧
關於如何自建 runner,可以看官方這個文檔 https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners ,其實很詳細,以我的使用案例的話,就是如下選擇 macos image 跟 arm 架構
按照出現的指示跟著執行那些 commands 之後,出現如下圖就代表成功了
最後把你原本的 workflow yml 檔的 runs-on 改成 self-hosted,這個就是讓 github action 知道你這個 workflow 要讓哪個 runner 執行!
# runs-on: macos-15
runs-on: self-hosted
push 程式碼後,也確實觸發了 runner 執行 workflow!如下圖
總結
呼~ 算是一個解決 github action limit 被 macos 15 image搞到沒額度的問題了! 不過這個我覺得可能目前適合用在 private repo,除非你不介意被其他人使用的話,我好像沒看到權限去限制 runner 的使用,或許之後會增加? 總之給遇到同樣問題的人,一個參考的解決方式,不要傻傻的直接花錢買方案,我看 issue 很多人在抱怨花錢還被吃掉那麼多 quota。