From 34480c16e2e1d8a9cc38a9eb9f98a0d7b8ff544c Mon Sep 17 00:00:00 2001 From: csh Date: Thu, 7 May 2026 15:02:38 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20=E8=BF=81=E7=A7=BB=20docker=20compo?= =?UTF-8?q?se=20=E5=B9=B6=E4=BF=AE=E5=A4=8D=20runner=20=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEPLOYMENT.md | 92 +++++++++++++++--------------- docker-runner/common/check_crlf.sh | 14 ++--- docker-runner/common/entrypoint.sh | 4 +- docker-runner/common/register.sh | 12 ++-- docker-runner/common/setup.sh | 2 +- docker-runner/common/upgrade.sh | 2 +- tests/upgrade_test.sh | 12 ++++ 7 files changed, 75 insertions(+), 63 deletions(-) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 3e72174..5414b78 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -119,14 +119,14 @@ cd docker-runner/presets/standard-ubuntu-22/ #### 3. 构建并启动容器 ```bash -docker-compose build -docker-compose up -d +docker compose build +docker compose up -d ``` #### 4. 安装 Runner ```bash -docker-compose exec gitea-runner /data/setup.sh +docker compose exec gitea-runner /data/setup.sh ``` 脚本会自动探测最新 `act_runner` 版本作为默认值,然后提示你确认架构。 @@ -134,7 +134,7 @@ docker-compose exec gitea-runner /data/setup.sh #### 5. 注册 Runner ```bash -docker-compose exec gitea-runner /data/register.sh +docker compose exec gitea-runner /data/register.sh ``` 输入你的 Gitea 实例 URL 和注册令牌。 @@ -145,10 +145,10 @@ Runner 注册后会自动启动,无需重启容器。 ```bash # 查看容器日志 -docker-compose logs -f +docker compose logs -f # 查看 runner 状态 -docker-compose exec gitea-runner /data/manage.sh status +docker compose exec gitea-runner /data/manage.sh status ``` --- @@ -178,8 +178,8 @@ environment: #### 3. 构建并启动 ```bash -docker-compose build -docker-compose up -d +docker compose build +docker compose up -d ``` #### 4. 验证 Buildx 初始化 @@ -190,18 +190,18 @@ docker-compose up -d # ✓ arm64 support verified # ✓ amd64 support verified # ✓ Buildx configured successfully! -docker-compose logs -f +docker compose logs -f # 进入容器验证 -docker-compose exec gitea-runner docker buildx ls +docker compose exec gitea-runner docker buildx ls # 应该看到 gitea-multiarch builder ``` #### 5. 安装和注册 ```bash -docker-compose exec gitea-runner /data/setup.sh -docker-compose exec gitea-runner /data/register.sh +docker compose exec gitea-runner /data/setup.sh +docker compose exec gitea-runner /data/register.sh ``` Runner 注册后会自动启动。 @@ -216,52 +216,52 @@ Runner 注册后会自动启动。 ```bash # 列出所有 runners -docker-compose exec gitea-runner /data/manage.sh list +docker compose exec gitea-runner /data/manage.sh list # 查看所有 runners 状态 -docker-compose exec gitea-runner /data/manage.sh status +docker compose exec gitea-runner /data/manage.sh status ``` ### 日志管理 ```bash # 查看日志(最后 50 行) -docker-compose exec gitea-runner /data/manage.sh logs +docker compose exec gitea-runner /data/manage.sh logs # 指定行数 -docker-compose exec gitea-runner /data/manage.sh logs 100 +docker compose exec gitea-runner /data/manage.sh logs 100 # 实时跟踪日志 -docker-compose exec gitea-runner /data/manage.sh follow +docker compose exec gitea-runner /data/manage.sh follow ``` ### Runner 控制 ```bash # 启动 runner -docker-compose exec gitea-runner /data/manage.sh start +docker compose exec gitea-runner /data/manage.sh start # 停止 runner -docker-compose exec gitea-runner /data/manage.sh stop +docker compose exec gitea-runner /data/manage.sh stop # 重启 runner -docker-compose exec gitea-runner /data/manage.sh restart +docker compose exec gitea-runner /data/manage.sh restart # 删除 runner -docker-compose exec gitea-runner /data/manage.sh delete +docker compose exec gitea-runner /data/manage.sh delete ``` ### 升级 act_runner ```bash # 自动检查最新稳定版本,下载后重启所有已注册 runners -docker-compose exec gitea-runner /data/upgrade.sh +docker compose exec gitea-runner /data/upgrade.sh # 指定版本 -docker-compose exec gitea-runner /data/upgrade.sh --version 0.6.1 +docker compose exec gitea-runner /data/upgrade.sh --version 0.6.1 # 仅重启指定 runner -docker-compose exec gitea-runner /data/upgrade.sh --runner +docker compose exec gitea-runner /data/upgrade.sh --runner ``` `upgrade.sh` 只替换 `/data/bin/act_runner` 并重启 runner 进程,不会重新注册,也不需要重新输入 token。 @@ -270,14 +270,14 @@ docker-compose exec gitea-runner /data/upgrade.sh --runner ```bash # 注册新的 runner(使用不同名称) -docker-compose exec gitea-runner /data/register.sh +docker compose exec gitea-runner /data/register.sh ``` ### 交互式管理 ```bash # 运行交互式菜单 -docker-compose exec gitea-runner /data/manage.sh +docker compose exec gitea-runner /data/manage.sh ``` --- @@ -405,24 +405,24 @@ CMD ["/app"] ### Q1: 如何更新 Runner 版本? ```bash -docker-compose exec gitea-runner /data/upgrade.sh +docker compose exec gitea-runner /data/upgrade.sh # 脚本会自动从官方目录页检测最新 act_runner 版本 ``` 如需固定版本: ```bash -docker-compose exec gitea-runner /data/upgrade.sh --version 0.6.1 +docker compose exec gitea-runner /data/upgrade.sh --version 0.6.1 ``` ### Q2: 如何添加多个 Runners? ```bash # 多次运行注册脚本,每次使用不同名称 -docker-compose exec gitea-runner /data/register.sh +docker compose exec gitea-runner /data/register.sh # 查看所有 runners -docker-compose exec gitea-runner /data/manage.sh list +docker compose exec gitea-runner /data/manage.sh list ``` ### Q3: 容器启动失败 "exec format error" @@ -440,36 +440,36 @@ cd docker-runner/presets// sed -i 's/\r$//' ../../common/*.sh # 重新构建 -docker-compose down -docker-compose build --no-cache -docker-compose up -d +docker compose down +docker compose build --no-cache +docker compose up -d ``` ### Q4: 如何完全重置? ```bash # 停止并删除容器和卷 -docker-compose down -v +docker compose down -v # 删除数据目录 rm -rf runner-data # 重新构建 -docker-compose build --no-cache -docker-compose up -d +docker compose build --no-cache +docker compose up -d ``` ### Q5: 如何查看日志? ```bash # 容器日志 -docker-compose logs -f +docker compose logs -f # Runner 日志 -docker-compose exec gitea-runner /data/manage.sh logs +docker compose exec gitea-runner /data/manage.sh logs # 实时跟踪日志 -docker-compose exec gitea-runner /data/manage.sh follow +docker compose exec gitea-runner /data/manage.sh follow ``` ### Q6: Buildx 版 - 构建速度慢? @@ -508,7 +508,7 @@ platforms: ${{ github.ref == 'refs/heads/main' && 'linux/amd64,linux/arm64' || ' ```bash # 进入容器 -docker-compose exec gitea-runner bash +docker compose exec gitea-runner bash # 检查 builder docker buildx ls @@ -536,7 +536,7 @@ docker system df ```bash # 进入容器 -docker-compose exec gitea-runner bash +docker compose exec gitea-runner bash # 清理构建缓存(保留 builder) docker buildx prune @@ -552,10 +552,10 @@ docker buildx rm gitea-multiarch ```bash # 1. 停止所有容器 -docker-compose down +docker compose down # 2. 清理 Buildx(如果使用 Buildx 版) -docker-compose exec gitea-runner docker buildx rm gitea-multiarch +docker compose exec gitea-runner docker buildx rm gitea-multiarch # 3. 清理未使用的镜像 docker image prune -a @@ -593,7 +593,7 @@ runner-data/ ```bash # 1. 停止当前容器 cd docker-runner/presets// -docker-compose down +docker compose down # 2. 切换到新预设 cd ../buildx-ubuntu-22/ @@ -602,8 +602,8 @@ cd ../buildx-ubuntu-22/ cp -r ../standard-ubuntu-22/runner-data . # 4. 启动新预设 -docker-compose build -docker-compose up -d +docker compose build +docker compose up -d ``` --- diff --git a/docker-runner/common/check_crlf.sh b/docker-runner/common/check_crlf.sh index 1a2272f..c1d768e 100644 --- a/docker-runner/common/check_crlf.sh +++ b/docker-runner/common/check_crlf.sh @@ -90,9 +90,9 @@ if [ $FIXED_COUNT -gt 0 ]; then echo -e "${GREEN}✓ 所有问题已自动修复!${NC}" echo "" echo "建议执行以下命令重启容器:" - echo " docker-compose down" - echo " docker-compose build --no-cache" - echo " docker-compose up -d" + echo " docker compose down" + echo " docker compose build --no-cache" + echo " docker compose up -d" echo "" # 询问是否立即重启 @@ -100,13 +100,13 @@ if [ $FIXED_COUNT -gt 0 ]; then echo "" if [[ $REPLY =~ ^[Yy]$ ]]; then echo "正在重启容器..." - docker-compose down - docker-compose build --no-cache - docker-compose up -d + docker compose down + docker compose build --no-cache + docker compose up -d sleep 3 echo "" echo "容器状态:" - docker-compose ps + docker compose ps echo "" echo "查看日志:" docker logs gitea-runner --tail=30 diff --git a/docker-runner/common/entrypoint.sh b/docker-runner/common/entrypoint.sh index 9a39bc0..aaa5044 100644 --- a/docker-runner/common/entrypoint.sh +++ b/docker-runner/common/entrypoint.sh @@ -185,7 +185,7 @@ else echo "⚠ act_runner not installed yet!" echo "" echo "Please run the setup script first:" - echo " docker-compose exec gitea-runner /data/setup.sh" + echo " docker compose exec gitea-runner /data/setup.sh" echo "" echo "Container is waiting..." @@ -243,7 +243,7 @@ if [ $RUNNER_COUNT -eq 0 ]; then echo "⚠ No runners registered yet!" echo "" echo "Please run the register script to add a runner:" - echo " docker-compose exec gitea-runner /data/register.sh" + echo " docker compose exec gitea-runner /data/register.sh" echo "" fi diff --git a/docker-runner/common/register.sh b/docker-runner/common/register.sh index 860697e..99b4408 100644 --- a/docker-runner/common/register.sh +++ b/docker-runner/common/register.sh @@ -11,7 +11,7 @@ if ! command -v act_runner &> /dev/null; then echo "✗ act_runner is not installed!" echo "" echo "Please run the setup script first:" - echo " docker-compose exec gitea-runner /data/setup.sh" + echo " docker compose exec gitea-runner /data/setup.sh" exit 1 fi @@ -301,10 +301,10 @@ echo " .runner: $(ls -lh .runner 2>/dev/null | awk '{print $5}' || echo 'N echo " config.yaml: $(ls -lh config.yaml 2>/dev/null | awk '{print $5}' || echo 'N/A')" echo "" echo "Useful commands:" -echo " View logs: docker-compose exec gitea-runner /data/manage.sh logs ${RUNNER_NAME}" -echo " Follow logs: docker-compose exec gitea-runner /data/manage.sh follow ${RUNNER_NAME}" -echo " Check status: docker-compose exec gitea-runner /data/manage.sh status" -echo " Restart: docker-compose exec gitea-runner /data/manage.sh restart ${RUNNER_NAME}" +echo " View logs: docker compose exec gitea-runner /data/manage.sh logs ${RUNNER_NAME}" +echo " Follow logs: docker compose exec gitea-runner /data/manage.sh follow ${RUNNER_NAME}" +echo " Check status: docker compose exec gitea-runner /data/manage.sh status" +echo " Restart: docker compose exec gitea-runner /data/manage.sh restart ${RUNNER_NAME}" echo "" # 显示最近的日志 @@ -327,6 +327,6 @@ if [ -f "/var/log/supervisor/runner-${RUNNER_NAME}.err.log" ]; then echo "$ERR_CONTENT" echo "" echo "Check full error log with:" - echo " docker-compose exec gitea-runner cat /var/log/supervisor/runner-${RUNNER_NAME}.err.log" + echo " docker compose exec gitea-runner cat /var/log/supervisor/runner-${RUNNER_NAME}.err.log" fi fi diff --git a/docker-runner/common/setup.sh b/docker-runner/common/setup.sh index a742734..c96827f 100644 --- a/docker-runner/common/setup.sh +++ b/docker-runner/common/setup.sh @@ -134,7 +134,7 @@ if curl -L "$DOWNLOAD_URL" -o "$INSTALL_PATH"; then echo "" echo "Next steps:" echo "1. Register the runner:" - echo " docker-compose exec gitea-runner /data/register.sh" + echo " docker compose exec gitea-runner /data/register.sh" echo "" echo "2. Start using the runner after registration." echo "" diff --git a/docker-runner/common/upgrade.sh b/docker-runner/common/upgrade.sh index ae7f4f7..242f5f3 100644 --- a/docker-runner/common/upgrade.sh +++ b/docker-runner/common/upgrade.sh @@ -29,7 +29,7 @@ fail() { } extract_version_number() { - sed -nE 's/.*version[[:space:]]+([0-9]+\.[0-9]+\.[0-9]+).*/\1/p' | head -n 1 + sed -nE 's/.*version[[:space:]]+v?([0-9]+\.[0-9]+\.[0-9]+).*/\1/p' | head -n 1 } extract_versions_from_listing() { diff --git a/tests/upgrade_test.sh b/tests/upgrade_test.sh index 57eeb75..5f1fd01 100644 --- a/tests/upgrade_test.sh +++ b/tests/upgrade_test.sh @@ -55,6 +55,17 @@ EOF "pick_latest_version should return the highest semantic version" } +test_extract_version_number_accepts_v_prefix() { + local actual + actual=$(extract_version_number <<'EOF' +act_runner version v0.6.1 +EOF +) + + assert_eq "0.6.1" "${actual}" \ + "extract_version_number should accept version output with a leading v" +} + fake_latest_version() { echo "0.6.2" } @@ -81,6 +92,7 @@ test_resolve_latest_version_or_fallback_uses_fallback() { test_extract_versions_from_listing test_pick_latest_version +test_extract_version_number_accepts_v_prefix test_resolve_latest_version_or_fallback_prefers_latest test_resolve_latest_version_or_fallback_uses_fallback