how to use github action's self hosted runners

# devops

首先來講講爲何突然想要用這個功能咧? 因爲最近在進行淬鍊我的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 了。。

/img/2025-03-04_16-57-46_screenshot.png

正常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 架構

/img/2025-03-04_22-40-20_screenshot.png

按照出現的指示跟著執行那些 commands 之後,出現如下圖就代表成功了

/img/2025-03-04_22-45-46_screenshot.png

最後把你原本的 workflow yml 檔的 runs-on 改成 self-hosted,這個就是讓 github action 知道你這個 workflow 要讓哪個 runner 執行!

# runs-on: macos-15
runs-on: self-hosted

push 程式碼後,也確實觸發了 runner 執行 workflow!如下圖

/img/2025-03-04_22-51-59_screenshot.png

總結

呼~ 算是一個解決 github action limit 被 macos 15 image搞到沒額度的問題了! 不過這個我覺得可能目前適合用在 private repo,除非你不介意被其他人使用的話,我好像沒看到權限去限制 runner 的使用,或許之後會增加? 總之給遇到同樣問題的人,一個參考的解決方式,不要傻傻的直接花錢買方案,我看 issue 很多人在抱怨花錢還被吃掉那麼多 quota。

If you like my content,

feel free to buy me a coffee

Enjoy crafting new things

Never stop learning.

Life is the sum of your daily habits.

Find things that you enjoy and please

Doit.

Feel free to connect with me.

Created by potrace 1.16, written by Peter Selinger 2001-2019

© Jing 2024. All rights reserved.