#!/usr/bin/env bash # act_runner를 Gitea에 직접(127.0.0.1:9003) 붙도록 재등록한다. # # 문제: nginx(https://git.zioinfo.co.kr)를 경유해 등록하면 runner가 "declare successfully" # 까지는 가는데 작업을 가져오지 않고, 재기동해야만 대기 중이던 작업을 집어간다. # act_runner의 작업 수신은 long-poll인데 그 앞의 nginx가 proxy_buffering 기본값(on)과 # proxy_read_timeout 300s 로 서 있어 연결이 물린 채로 남는 것으로 보인다. # # 해결: runner와 Gitea가 같은 서버에 있으므로 nginx를 거칠 이유가 없다. # 루프백으로 직접 붙이면 프록시 계층이 사라진다. set -euo pipefail RUNNER_DIR=/opt/arko-dev/runner INSTANCE=http://127.0.0.1:9003 SCOPE=somang4819/arko_renual GITEA_USER=$(stat -c %U /var/lib/gitea) echo "=== 1. runner 중지 ===" systemctl stop arko-dev-runner || true echo "=== 2. 기존 등록 백업 ===" TS=$(date +%Y%m%d_%H%M%S) [ -f "$RUNNER_DIR/.runner" ] && mv "$RUNNER_DIR/.runner" "$RUNNER_DIR/.runner.bak_$TS" && echo "백업: .runner.bak_$TS" echo "=== 3. 등록 토큰 발급 ===" TOKEN=$(su - "$GITEA_USER" -s /bin/bash -c \ "gitea actions generate-runner-token --config /etc/gitea/app.ini --scope $SCOPE" 2>/dev/null | tr -d '\r\n ') [ -n "$TOKEN" ] || { echo "토큰 발급 실패"; exit 1; } echo "발급 완료" echo "=== 4. 직접 연결로 재등록 ($INSTANCE) ===" cd "$RUNNER_DIR" /usr/local/bin/act_runner register --no-interactive \ --instance "$INSTANCE" \ --token "$TOKEN" \ --name arko-dev-runner \ --labels "arko-dev:host" echo "=== 5. 기동 ===" systemctl start arko-dev-runner sleep 10 systemctl is-active arko-dev-runner journalctl -u arko-dev-runner -n 8 --no-pager | tail -8