iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
DevOps

不僅是程式碼代管平台 - Github 能做些什麼?系列 第 17

GitHub Self-hosted runners - 自訂代理程式環境的最佳選項

Self-hosted runners 介紹

在前面幾篇文章實作 GitHub Action Workflow,眼尖的讀者應該會發現,我們使用是 GitHub 所提供的 Runner,我們只需指定作業系統版本、SDK 即可,不需要自行維護作業系統、網路與安裝其他程式,其餘的工作皆依據 workflow 定義的去執行。缺點在於若不是 public repo,會有使用時間上的限制。理所當然,倘若公司或開發人員本身就擁有伺服器或虛擬機器,也可以使用自己的機器作為 Runner,除了不需要額外費用,也能高度自訂專屬的自動化流程,。

這種使用自己環境作為 Runner,我們稱之為 Self-hosted runners

如果 Self-hosted runners 超過 30 天未連接到 GitHub Action,則會自動從 GitHub 中刪除。

建議使用 Self-hosted runners 在 private repo,因為你不知道你 Fork 的 repo 是否有埋藏惡意程式

Self-hosted runners 維護上較為麻煩,除了作業系統,建置專案時所用的 SDK 也需要自行安裝,如 Build Tools for Visual Studio, JDK, Android SDK...等

Self-hosted runners 從管理層面來看,可以分成三類

  1. Repository-level runners,可以指定專屬於單一 Repo
  2. Organization-level runners,可以給組織內多個 Repo 使用
  3. Enterprise-level runners,可以在企業帳號中,給多個組織使用

Self-hosted runners 規格

可以作為 Self-hosted runners 的作業系統如下

  • Linux
    • Red Hat Enterprise Linux 7 or later
    • CentOS 7 or later
    • Oracle Linux 7
    • Fedora 29 or later
    • Debian 9 or later
    • Ubuntu 16.04 or later
    • Linux Mint 18 or later
    • openSUSE 15 or later
    • SUSE Enterprise Linux (SLES) 12 SP2 or later
  • Windows
    • Windows 7 64-bit
    • Windows 8.1 64-bit
    • Windows 10 64-bit
    • Windows Server 2012 R2 64-bit
    • Windows Server 2016 64-bit
    • Windows Server 2019 64-bit
  • macOS
    • macOS 10.13 (High Sierra) or later

建立 Repository-level runners

  1. 開啟你的 GitHub Repo > Settings > Actions > Runners > 點選 Add runner 按鈕

https://ithelp.ithome.com.tw/upload/images/20210916/20091494DO8c3cdUBT.png

  1. 選擇你的作業系統,你能發現,下方已經將安裝與設定語法提供給你,只需要複製語法,在自己的環境貼上即可
    https://ithelp.ithome.com.tw/upload/images/20210916/200914947OgCWYSgRx.png

  2. 我們實際行下載指令
    https://ithelp.ithome.com.tw/upload/images/20210917/20091494gkGkjmTvub.png

注意:當你執行 Invoke-WebRequest -Uri https://github.com/act... 若出現下列錯誤
https://ithelp.ithome.com.tw/upload/images/20210917/20091494jDyq24luO4.png
請輸入: [Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"

  1. 接下來我們進行設定,依序會回答一些問題,包含 Runner Group, Runner 名稱(預設伺服器名稱)、Label 、工作資料夾、是否註冊成服務(建議選Y),服務的帳號...等
    https://ithelp.ithome.com.tw/upload/images/20210917/2009149457ez1JtKjt.png

  2. 完成後,回到 GitHub Repo Runners 畫面,即可看見已經連結的 Runners
    https://ithelp.ithome.com.tw/upload/images/20210917/20091494qWY8eYlF79.png

  3. 若你要移除這個 Runner 之需要透過下列指令移除即可
    ./config.cmd --url [repo url] --token [xxx] remove
    https://ithelp.ithome.com.tw/upload/images/20210917/20091494y9uQh9OT6X.png

  4. 若你的 workflow 要使用這個 Self-hosted runner,只需要找到 runs-on,加上你前面設定 runner 時使用的label,依據我們的案例,改成 self-hosted 即可
    runs-on: self-hosted
    https://ithelp.ithome.com.tw/upload/images/20210917/20091494xJvBGfXfYc.png


閱讀完這篇文章,你會發現加入 Self-hosted runners 其實不難。但實際上在企業、組織中共用 Runner,要安裝那些套件、如何維護才是讓人頭痛。在下一篇文章,我們將介紹 Runner 的另一種應用: 常見代理程式架構與部署至 IIS

若喜歡我的文章,歡迎點 like, 分享與訂閱。


參考資料

https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners


上一篇
GitHub Action 實作持續交付 - 部署至 Azure App Service
下一篇
GitHub Action 實作持續交付 - 常見代理程式架構與部署至 IIS
系列文
不僅是程式碼代管平台 - Github 能做些什麼?30

尚未有邦友留言

立即登入留言