You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自托管GitHub Actions Runner构建Docker时卡在Poetry私有依赖安装

问题排查与解决方案

针对你在ARC自托管Runner上构建Docker镜像时,卡在poetry install拉取私有GitHub依赖的问题,结合托管Runner正常的对比,给出以下排查和修复步骤:

1. 修正SSH密钥文件权限

SSH要求私钥文件权限必须是600(仅所有者可读可写),你当前工作流中生成的ssh-private-key文件权限可能不符合要求,导致Docker build时无法正常使用密钥。修改工作流中的密钥生成步骤:

- run: |
    echo "${{ secrets.SSH_PRIVATE_KEY }}" > ssh-private-key
    chmod 600 ssh-private-key

2. 确保Buildx使用容器驱动(适配Dind模式)

在Dind(Docker-in-Docker)环境下,默认的Buildx驱动可能无法正常转发SSH代理,需要显式指定docker-container驱动:

- uses: docker/setup-buildx-action@v3
  with:
    driver: docker-container

3. 完善Dockerfile中的SSH环境配置

你当前的Dockerfile中已添加ssh-keyscan,但可进一步完善目录和文件权限,同时增加SSH连接测试定位问题:

FROM python:3.12

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

WORKDIR /app
RUN python -m pip install poetry
RUN poetry config virtualenvs.create false

COPY pyproject.toml /app

# 修正.ssh目录和known_hosts权限
RUN --mount=type=ssh mkdir -p ~/.ssh && chmod 700 ~/.ssh
RUN --mount=type=ssh ssh-keyscan github.com > ~/.ssh/known_hosts && chmod 644 ~/.ssh/known_hosts
# 测试SSH连接到GitHub(调试用,后续可移除)
RUN --mount=type=ssh ssh -T git@github.com || echo "SSH连接测试完成"
# 启用Poetry的SSH调试日志,方便定位卡住原因
RUN poetry config git.ssh.command "ssh -v"
RUN --mount=type=ssh poetry install --no-interaction

CMD ["python", "app.py"]

添加ssh -v后,Poetry会输出详细的SSH克隆日志,可直观看到是连接超时、密钥验证失败还是其他环节出问题。

4. 检查自托管Runner的网络连通性

自托管Runner所在的K8s集群可能存在网络限制,导致无法访问GitHub的SSH端口(22):

  • 进入Runner Pod执行连通性测试:
    kubectl exec -n arc-runners <runner-pod-name> -- telnet github.com 22
    
    如果无法连通,需调整集群防火墙或网络策略,放行对github.com:22的访问。
  • 同时检查DNS解析是否正常:
    kubectl exec -n arc-runners <runner-pod-name> -- nslookup github.com
    

5. 调整Runner资源配置

如果自托管Runner的CPU/内存资源不足,也会导致poetry install过程卡住。对比GitHub托管Runner(ubuntu-latest默认2核4G),调整Helm安装时的资源限制:

helm install "${INSTALLATION_NAME}" \
    --namespace "${NAMESPACE}" \
    --create-namespace \
    --set githubConfigUrl="${GITHUB_CONFIG_URL}" \
    --set containerMode.type=dind \
    --set githubConfigSecret="${GITHUB_APP_SECRET}" \
    --set runner.resources.requests.cpu=2 \
    --set runner.resources.requests.memory=4Gi \
    --set runner.resources.limits.cpu=2 \
    --set runner.resources.limits.memory=4Gi \
    oci://ghcr.io/actions/actions-runner-controller-charts/gha-runner-scale-set

6. 确认私有仓库的SSH权限

确保你的SSH密钥对应的GitHub账号拥有<org>/core.git仓库的读取权限,可在本地用该密钥测试克隆:

git clone git@github.com:<org>/core.git

内容的提问来源于stack exchange,提问作者Nguyễn Đức Huy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:03:20