【gitea部署CICD】JDK 二进制和 runner 容器基础系统不兼容
·
你现在容器里能看到:
/opt/jdk21/bin
/opt/jdk21/lib
但执行:
/opt/jdk21/bin/java
报:
no such file or directory
这通常不是 java 文件不存在,而是 java 依赖的 glibc 动态链接器不存在。
原因是:
- 宿主机 JDK 是 Rocky / EL9 的 OpenJDK,依赖 glibc;
gitea/act_runner:0.6.1很可能是 Alpine / musl 环境;- Alpine 容器里没有
/lib64/ld-linux-x86-64.so.2; - 所以执行 glibc 版 Java 时会报
no such file or directory。
推荐方案:不要用 Docker 跑 act_runner,改成宿主机 systemd 跑
你的流水线要用:
- 宿主机 JDK 21
- 宿主机 Docker
/root/docker/docker-compose-deploy.yml/root/docker/deploy.sh
所以最稳的是让 act_runner 直接运行在宿主机,而不是跑在容器里。
1. 停掉 Docker Runner
docker stop gitea-runner-host
docker rm gitea-runner-host
2. 下载 act_runner 二进制
如果服务器能访问 Gitea 官方下载地址:
cd /usr/local/bin
curl -L -o act_runner \
https://dl.gitea.com/act_runner/0.6.1/act_runner-0.6.1-linux-amd64
chmod +x /usr/local/bin/act_runner
act_runner --version
如果服务器不能访问外网,可以在本地下载后传到服务器:
scp act_runner root@192.168.0.94:/usr/local/bin/act_runner
ssh root@192.168.0.94 "chmod +x /usr/local/bin/act_runner"
3. 准备 runner 工作目录
mkdir -p /root/docker/runner-host-data
cd /root/docker/runner-host-data
如果之前 Docker Runner 的 /data 挂载就是这个目录,里面应该已经有 .runner 文件:
ls -la /root/docker/runner-host-data
如果能看到 .runner,可以继续复用。
如果没有 .runner,重新注册:
cd /root/docker/runner-host-data
act_runner register \
--no-interactive \
--instance http://192.168.0.94:3003 \
--token <Gitea后台新建Runner的token> \
--name host-runner \
--labels ubuntu-latest:host
4. 生成配置文件
cd /root/docker/runner-host-data
act_runner generate-config > config.yaml
5. 创建 systemd 服务
cat > /etc/systemd/system/gitea-act-runner.service <<'EOF'
[Unit]
Description=Gitea Actions Runner
After=network.target docker.service
Requires=docker.service
[Service]
Type=simple
WorkingDirectory=/root/docker/runner-host-data
ExecStart=/usr/local/bin/act_runner daemon --config /root/docker/runner-host-data/config.yaml
Restart=always
RestartSec=5
User=root
Environment=JAVA_HOME=/usr/lib/jvm/java-21-openjdk-21.0.11.0.10-2.el9.x86_64
Environment=PATH=/usr/lib/jvm/java-21-openjdk-21.0.11.0.10-2.el9.x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[Install]
WantedBy=multi-user.target
EOF
6. 启动 Runner
systemctl daemon-reload
systemctl enable --now gitea-act-runner
systemctl status gitea-act-runner
看日志:
journalctl -u gitea-act-runner -f
应能看到类似:
runner: host-runner, with labels: [ubuntu-latest]
polling tasks
7. 验证环境
java -version
javac -version
docker version
docker compose version
bash /root/docker/deploy.sh status
工作流文件要不要继续用 /opt/jdk21?
如果改成宿主机 systemd 跑 runner,就不需要 /opt/jdk21 了,应该把工作流里的:
JAVA_HOME: /opt/jdk21
PATH: /opt/jdk21/bin:...
改回宿主机路径:
JAVA_HOME: /usr/lib/jvm/java-21-openjdk-21.0.11.0.10-2.el9.x86_64
PATH: /usr/lib/jvm/java-21-openjdk-21.0.11.0.10-2.el9.x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
更多推荐
所有评论(0)