📢 [文章新增公告] 新增 為 Kubernetes 而生的 GitOps 工具 - ArgoCD 介紹與說明統一機密、身份與加密的管理系統 - HashiCorp Vault 介紹與說明 文章,歡迎點擊前方連結前往查看 💙
目前 Blog 頁籤支援折疊側邊欄功能,在閱讀文章會更方便,歡迎多加利用 💪
在 AWS EC2 macOS 上安裝 Gitlab-Runner 注意事項

在 AWS EC2 macOS 上安裝 Gitlab-Runner 注意事項

發布於 2025-02-25 · 最後更新於 2025-10-24

會寫此文章主要原因是公司會需要打包多個 IOS APP,之前是使用 github 來進行打包,但因為費用以及管理問題,所以想測試改用 AWS 的 EC2 macOS 來當作 Runner。


建立 macOS Runner 機器

AWS 能夠建立 macOS 的 EC2 Instances,使用的 instance_type 會是 mac2.metal 或 mac1.metal,這兩種型號的差異可以參考 AWS 官方文件,且會需要使用專用主機(Dedicated Hosts),這個專用主機開下去,只能 24 小時後才可以關閉。

IaC 上需要多設定 create_dedicated_hosthost_id,下面說明兩個設定:

create_dedicated_host:如果是 macOS 才需打開此設定,會自動建立專用主機,自動把 host_id 帶入。

host_id:由於專用主機 24 小時內不能刪除,所以當刪除 macOS 的 EC2,有時候專用主機還會存在,這時候新的 EC2 可以直接把 host_id 帶入,就可以沿用,不需要額外再建立專用主機 (記得把 create_dedicated_host 關閉)。


說明

上面的 IaC 是我使用 Terraform 所寫的 EC2 module,後續會出文章來說明每一個 IaC 如何使用,到時候也會更新連結到這篇文章。


另外根據 instance_type 會需要選擇對應的 ami,例如:instance_type 是 mac2.metal,mac2.metal 是 arm 架構,就需要選擇 arm 的 ami,也要記得選對 OS 版本。


不同的 instance_type 需要選擇對應的 AMI

不同的 instance_type 需要選擇對應的 AMI


macOS EC2 注意事項

在測試的過程中,有發現一些 macOS EC2 的限制,提供給大家參加(有些上面有提到):

  1. 需要選擇 macOS 版本 (macOS Sequola、macOS Sonoma、macOS Ventura)

有不同的 OS 版本可以選擇

有不同的 OS 版本可以選擇


  1. 只有兩種機器規格可以選擇,分別是:
    • mac1.metal:12 vCPU、32 G MEM
    • mac2.metal (ARM 架構):8 vCPU、16 G MEM

  1. 建立需要用專用主機 (所以 IaC 需要有多選擇租賃類型、以及專用主機 ID),建立專用主機後,mac 類型專用主機需要等 24小時後,才可以釋放

  2. 不能使用 Spot Instance


會顯示無法使用 Spot VM

會顯示無法使用 Spot VM


  1. 內建有 SSM,但建立完機器不能馬上連線,需要等約 5 分鐘

  2. 如果要建立 AMI 後,還需要使用機器,記得把重啟機器選項關掉,macOS 機器重啟會蠻久的

  3. 關機+destroy 需要約 10 分鐘

  4. 測試建立 macOS 的 AMI 正常 (資料有保留)

  5. macOS 預設安裝的資料會佔用 9.6G 左右的 Disk 空間 (ami-09c1170ae6e30597d,規格:macOS Sonoma、mac2.metal)


預設的 Disk 使用情況

預設的 Disk 使用情況


安裝 Gitlab-Runner

需要切換到 ec2-user 內,並執行此腳本,記得要輸入大寫的單位名稱 (此為公司設計的命名規則,可以依照自己需求修改)

#!/bin/bash

# 取得系統架構
ARCH=$(uname -m)

# 要求輸入符合格式的大寫單位名稱
while true; do
    read -p "請輸入大寫的英文單位名稱: " UNIT_NAME
    if [[ "$UNIT_NAME" =~ ^[A-Z]+(-[A-Z]+)?$ ]]; then
        break
    else
        echo -e "無效的單位名稱,請輸入符合格式的值\n"
    fi
done

# 基本下載 URL
BASE_URL="https://s3.dualstack.us-east-1.amazonaws.com/gitlab-runner-downloads/latest/binaries/gitlab-runner-darwin"

# 根據架構選擇檔案名稱
if [ "$ARCH" == "arm64" ]; then
    FILE_NAME="arm64"
else
    FILE_NAME="amd64"
fi

if [ ! -f /usr/local/bin/gitlab-runner ]; then
    # 下載並安裝
    echo "下載 GitLab Runner,架構:$ARCH"
    sudo curl --output /usr/local/bin/gitlab-runner "${BASE_URL}-${FILE_NAME}"

    sudo chmod +x /usr/local/bin/gitlab-runner
fi

gitlab-runner register --non-interactive \
    --name "$UNIT_NAME-MacOS-Runner" \
    --url "<GitLab Domain>" \
    --registration-token <GitLab Token> \
    --executor shell \
    --tag-list "$UNIT_NAME-MacOS-Runner"

完成後,請執行以下指令來執行 Runner,會將 Log 寫到 gitlab-runner.log

gitlab-runner run > gitlab-runner.log 2>&1 &

注意!不要使用 gitlab-runner start,避免遇到 FATAL: Failed to start gitlab-runner: exit status 134 錯誤


使用 start 會噴 134 錯誤

使用 start 會噴 134 錯誤


這個問題官方文件也有說明,start 會需要 LaunchAgent,然後 LaunchAgent 需要先透過 GUI 登入才可以,官方文件:Install GitLab Runner on macOS | GitLab Docs