Henry
发布于 2025-10-27 / 8 阅读
0
0

Gitea - Docker 部署 act_runner

背景简介

使用 Docker 部署 act_runner 替代二进制部署。

前置信息

  1. Docker 【Docker - Debian 安装
  2. Gitea【Gitea - 启用 CI/CD 系统 Actions 功能

详细信息

文件架构

gitea_act_runner/
  |-- docker-compose.yml
  |-- .env
  |-- data/
  |     |-- scripts/
  |     |     |-- entrypoint.sh

准备配置文件

  • 准备 .env 配置文件
# ======================================================
# 请根据您的实际情况修改以下变量
# ======================================================

# Gitea 实例地址
GITEA_INSTANCE_URL=https://your.gitea.domain

# 从 Gitea > Settings > Actions > Runners 获取的 Token
GITEA_RUNNER_REGISTRATION_TOKEN=<YOUR_RUNNER_TOKEN>

# Runner 的名称 (可选,默认为 vps-runner-docker)
GITEA_RUNNER_NAME=vps-runner-docker

# Runner 的标签 (可选,默认为 self-hosted,linux,x64,docker)
GITEA_RUNNER_LABELS=self-hosted,linux,x64,docker
  • 配置一键注册和启动脚本 script/entrypoint.sh
#!/bin/sh

CONFIG_FILE="/data/.runner"
DAEMON_PID=""

# 启动守护进程的函数
start_daemon() {
  echo "Starting runner daemon..."
  # 在后台启动守护进程,以便我们可以监控它
  /usr/local/bin/act_runner daemon &
  DAEMON_PID=$!
}

# 检查守护进程是否因认证失败而退出
check_daemon() {
  # 等待几秒,让守护进程有时间尝试连接
  sleep 5
  # 检查进程是否还在运行
  if ! kill -0 $DAEMON_PID 2>/dev/null; then
    echo "Daemon exited unexpectedly. Checking for auth error..."
    # 检查最近的日志中是否有认证错误
    if tail -n 20 /data/log/act_runner.log 2>/dev/null | grep -q "unregistered runner"; then
      echo "Auth error detected. Forcing re-registration..."
      rm -f "${CONFIG_FILE}"
      return 1 # 返回非零值表示需要重试
    fi
  fi
  return 0 # 返回零表示一切正常
}

# 主逻辑
if [ ! -f "${CONFIG_FILE}" ]; then
  echo "Runner not registered. Registering now..."
  /usr/local/bin/act_runner register
fi

# 尝试启动守护进程
start_daemon

# 检查守护进程状态
if ! check_daemon; then
  echo "Retrying registration and daemon start..."
  /usr/local/bin/act_runner register
  start_daemon
fi

# 保持容器运行
wait $DAEMON_PID
  • 准备 docker-compose.yml 配置文件
services:
  gitea-act-runner:
    image: gitea/act_runner:0.2.10
    container_name: gitea-act-runner
    restart: unless-stopped
    
    # 从 .env 文件中读取环境变量
    env_file:
      - ./.env
    
    volumes:
      # 持久化 Runner 的配置和注册信息
      - ./data:/data

部署容器

  • 启动 gitea-act-runner 服务
docker compose up -d
[+] Running 2/2
 ✔ Network act_runner_default  Created 
 ✔ Container gitea-act-runner  Started 

注册信息会保存在我们挂载的 ./data 目录中。

  • 查看 log
docker logs -f gitea-act-runner
.runner is missing or not a regular file
level=info msg="Registering runner, arch=amd64, os=linux, version=v0.2.10."
level=debug msg="Successfully pinged the Gitea instance server"
level=info msg="Runner registered successfully."
SUCCESS
time="2025-10-26T08:30:54Z" level=info msg="Starting runner daemon"
time="2025-10-26T08:30:54Z" level=info msg="labels updated to: [self-hosted:host linux:host x64:host docker:host]"
time="2025-10-26T08:30:54Z" level=info msg="runner: dev-act-runner-docker-1, with version: v0.2.10, with labels: [self-hosted linux x64 docker], declare successfully"
  • 查看 runner 信息


以上便是本文的全部内容,感谢您的阅读,如遇到任何问题,欢迎在评论区留言讨论。



评论