From ece54efc14618e21bb713548fda5acf631635439 Mon Sep 17 00:00:00 2001 From: Voson Date: Fri, 23 Jan 2026 18:24:31 +0800 Subject: [PATCH] =?UTF-8?q?feat(gitea):=20=E6=B7=BB=E5=8A=A0=20runner=20?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=8A=9F=E8=83=BD=E6=96=87=E6=A1=A3=E5=92=8C?= =?UTF-8?q?=E5=BF=AB=E9=80=9F=E6=81=A2=E5=A4=8D=E5=91=BD=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- skill/gitea/create-runner.md | 39 ++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/skill/gitea/create-runner.md b/skill/gitea/create-runner.md index 7edf6b1..2ce1d5e 100644 --- a/skill/gitea/create-runner.md +++ b/skill/gitea/create-runner.md @@ -224,6 +224,45 @@ EOF # gitea-create-runner all "wibnIxvgeyYj3D7d53VTQvNxv0UVqArBwAtPFBWD" ``` +## 🔄 恢复离线 Runner + +**场景**:Runner 在 Gitea 服务器上被删除,但本地配置文件仍在。需要重新注册并上线。 + +**快速恢复命令**(针对 runner-Mac-mini4-host): + +```bash +cd ~/.config/gitea/runners/runner-Mac-mini4-host + +# 停止旧进程 +if [ -f pid ]; then kill $(cat pid) 2>/dev/null || true; fi + +# 加载配置并重新注册 +source ~/.config/gitea/config.env + +# 获取令牌(需要 jq) +token=$(curl -s -H "Authorization: token $GITEA_TOKEN" \ + "${GITEA_URL}/api/v1/admin/runners/registration-token" | jq -r '.token') + +# 生成标签 +OS=$(uname -s); ARCH=$(uname -m) +case "$OS" in Darwin) os="macOS";; Linux) os="ubuntu";; *) os="unknown";; esac +case "$ARCH" in arm64|aarch64) arch="ARM64";; x86_64) arch="x64";; *) arch="unknown";; esac +labels="self-hosted:host,${os}:host,${arch}:host,$(echo "${OS}-${ARCH}" | tr '[:upper:]' '[:lower:]'):host" + +# 重新注册并启动 +act_runner register --config config.yaml --instance "$GITEA_URL" \ + --token "$token" --name "runner-Mac-mini4-host" --labels "$labels" --no-interactive + +nohup act_runner daemon --config config.yaml > runner.log 2>&1 & +echo $! > pid +echo "✅ Runner 恢复完成 (PID: $(cat pid))" +``` + +**说明**: +- 确保 `config.yaml` 中的 `labels:` 配置为空(`labels: []`),注册时会使用命令行参数 +- 如果全局令牌权限不足,需要获取组织令牌(参考 runner-management.md) +- 恢复后 runner 会获得新的 ID,但名称和 labels 保持不变 + ### 方法三:完整脚本 如果你需要更多自定义选项,可以使用下面的完整脚本: