1
0

😎完成forgejo-runner的流程

This commit is contained in:
LiuShen
2025-07-12 15:38:47 +08:00
parent 05a409d709
commit f27f493113
3 changed files with 74 additions and 18 deletions

View File

@@ -3,31 +3,34 @@ version: "3.9"
services: services:
forgejo_runner: forgejo_runner:
image: code.forgejo.org/forgejo/runner:7.0.0 image: code.forgejo.org/forgejo/runner:7.0.0
container_name: ${CONTAINER_NAME} container_name: ${CONTAINER_NAME:-forgejo-runner}
restart: always restart: always
networks: user: "1000:1000" # 非 root 用户运行容器
- 1panel-network
command: >- command: >-
bash -c ' /bin/sh -c '
if [ ! -f /data/.runner ]; then cd /data &&
forgejo-runner create-runner-file --connect \ if [ ! -s .runner ]; then
echo ">>> Registering runner..."
forgejo-runner register --no-interactive \
--instance ${FORGEJO_INSTANCE_URL} \ --instance ${FORGEJO_INSTANCE_URL} \
--token ${RUNNER_REGISTRATION_TOKEN} \
--name ${RUNNER_NAME} \ --name ${RUNNER_NAME} \
--secret ${RUNNER_SHARED_SECRET} ; --labels ${RUNNER_LABELS};
sed -i -e "s|\"labels\": null|\"labels\": [\"${RUNNER_LABELS}\"]|" /data/.runner ; forgejo-runner generate-config > config.yml
forgejo-runner generate-config --config /data/config.yml ;
sed -i -e "s| level: info| level: debug|" /data/config.yml ;
fi; fi;
forgejo-runner --config /data/config.yml daemon echo ">>> Starting daemon..."
forgejo-runner --config config.yml daemon
' '
volumes: volumes:
- ./data:/data - ./data:/data
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker-forgejo-runner.sock
environment: environment:
- FORGEJO_INSTANCE_URL=${FORGEJO_INSTANCE_URL} - FORGEJO_INSTANCE_URL=${FORGEJO_INSTANCE_URL}
- RUNNER_NAME=${RUNNER_NAME} - RUNNER_REGISTRATION_TOKEN=${RUNNER_REGISTRATION_TOKEN}
- RUNNER_LABELS=${RUNNER_LABELS} - RUNNER_NAME=${RUNNER_NAME:-default-runner}
- RUNNER_SHARED_SECRET=${RUNNER_SHARED_SECRET} - RUNNER_LABELS=${RUNNER_LABELS:-docker:docker://node:20-bookworm}
networks:
- 1panel-network
labels: labels:
createdBy: "Apps" createdBy: "Apps"

View File

@@ -0,0 +1,32 @@
#!/bin/bash
set -e
# 创建数据目录并设置权限
mkdir -p data
touch data/.runner
touch data/config.yml
mkdir -p data/.cache
# 设置为 forgejo-runner 镜像中的默认非 root 用户
chown -R 1000:1000 data
chmod 775 data/.runner
chmod 775 data/.cache
chmod g+s data/.runner
chmod g+s data/.cache
# 创建自定义 docker context 指向 /var/run/docker-forgejo-runner.sock
SOCK_PATH="/var/run/docker-forgejo-runner.sock"
CONTEXT_NAME="forgejo-runner-context"
# 如果 context 已存在,则先删除
if docker context inspect "$CONTEXT_NAME" >/dev/null 2>&1; then
docker context rm -f "$CONTEXT_NAME"
echo "已删除旧的 Docker context: $CONTEXT_NAME"
fi
docker context create "$CONTEXT_NAME" \
--docker "host=unix://$SOCK_PATH"
echo "✅ 初始化完成:"
echo " - 已创建 ./data 并配置权限"
echo " - 已创建 Docker context: $CONTEXT_NAME -> $SOCK_PATH"

View File

@@ -0,0 +1,21 @@
#!/bin/bash
set -e
CONTEXT_NAME="forgejo-runner-context"
SOCK_PATH="/var/run/docker-forgejo-runner.sock"
# 删除 Docker context
if docker context inspect "$CONTEXT_NAME" >/dev/null 2>&1; then
docker context rm -f "$CONTEXT_NAME"
echo "🗑️ 已删除 Docker context: $CONTEXT_NAME"
else
echo "⚠️ Docker context $CONTEXT_NAME 不存在,跳过删除。"
fi
# 删除 socket 文件(如果存在)
if [ -S "$SOCK_PATH" ]; then
rm -f "$SOCK_PATH"
echo "🗑️ 已删除 socket 文件: $SOCK_PATH"
else
echo "⚠️ Socket 文件 $SOCK_PATH 不存在,跳过删除。"
fi