forked from actions/act_runner
71 lines
2.4 KiB
Bash
Executable File
71 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# 如果 /data 目录不存在,则创建它
|
|
if [[ ! -d /data ]]; then
|
|
mkdir -p /data
|
|
fi
|
|
|
|
cd /data
|
|
|
|
# 运行器状态文件,默认为 '.runner'
|
|
RUNNER_STATE_FILE=${RUNNER_STATE_FILE:-'.runner'}
|
|
|
|
CONFIG_ARG=""
|
|
# 如果设置了 CONFIG_FILE,则添加配置文件参数
|
|
if [[ ! -z "${CONFIG_FILE}" ]]; then
|
|
CONFIG_ARG="--config ${CONFIG_FILE}"
|
|
fi
|
|
EXTRA_ARGS=""
|
|
# 如果设置了 GITEA_RUNNER_LABELS,则添加标签参数
|
|
if [[ ! -z "${GITEA_RUNNER_LABELS}" ]]; then
|
|
EXTRA_ARGS="${EXTRA_ARGS} --labels ${GITEA_RUNNER_LABELS}"
|
|
fi
|
|
if [[ ! -z "${GITEA_RUNNER_EPHEMERAL}" ]]; then
|
|
EXTRA_ARGS="${EXTRA_ARGS} --ephemeral"
|
|
fi
|
|
RUN_ARGS=""
|
|
if [[ ! -z "${GITEA_RUNNER_ONCE}" ]]; then
|
|
RUN_ARGS="${RUN_ARGS} --once"
|
|
fi
|
|
|
|
# 如果没有设置令牌,可以从文件中读取令牌,例如从 Docker Secret
|
|
if [[ -z "${GITEA_RUNNER_REGISTRATION_TOKEN}" ]] && [[ -f "${GITEA_RUNNER_REGISTRATION_TOKEN_FILE}" ]]; then
|
|
GITEA_RUNNER_REGISTRATION_TOKEN=$(cat "${GITEA_RUNNER_REGISTRATION_TOKEN_FILE}")
|
|
fi
|
|
|
|
# 使用与 https://github.com/vegardit/docker-gitea-act-runner 相同的 ENV 变量名称
|
|
test -f "$RUNNER_STATE_FILE" || echo "$RUNNER_STATE_FILE 丢失或不是常规文件"
|
|
|
|
# 如果运行器状态文件不存在或为空
|
|
if [[ ! -s "$RUNNER_STATE_FILE" ]]; then
|
|
try=$((try + 1))
|
|
success=0
|
|
|
|
# 此循环的目的是使其简单,当在 docker 中同时运行 act_runner 和 gitea 时,
|
|
# 使 act_runner 在出错之前等待一段时间以等待 gitea 变为可用。在单个 docker-compose 的上下文中,
|
|
# 可以通过健康检查做类似的事情,但这更灵活。
|
|
while [[ $success -eq 0 ]] && [[ $try -lt ${GITEA_MAX_REG_ATTEMPTS:-10} ]]; do
|
|
act_runner register \
|
|
--instance "${GITEA_INSTANCE_URL}" \
|
|
--token "${GITEA_RUNNER_REGISTRATION_TOKEN}" \
|
|
--name "${GITEA_RUNNER_NAME:-`hostname`}" \
|
|
${CONFIG_ARG} ${EXTRA_ARGS} --no-interactive 2>&1 | tee /tmp/reg.log
|
|
|
|
# 检查输出中是否有成功注册的消息
|
|
cat /tmp/reg.log | grep 'Runner registered successfully' > /dev/null
|
|
if [[ $? -eq 0 ]]; then
|
|
echo "成功"
|
|
success=1
|
|
else
|
|
echo "等待重试..."
|
|
sleep 5
|
|
fi
|
|
done
|
|
fi
|
|
# 防止从 act_runner 进程中读取令牌
|
|
unset GITEA_RUNNER_REGISTRATION_TOKEN
|
|
unset GITEA_RUNNER_REGISTRATION_TOKEN_FILE
|
|
|
|
# 启动 act_runner 守护进程
|
|
exec act_runner daemon ${CONFIG_ARG} ${RUN_ARGS}
|