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

如何在GitLab CI流水线中拉取同一实例的私有Go模块

解决GitLab CI拉取私有Go模块的SSH认证问题

核心问题拆解

本地能正常拉取是因为你已经配置了SSH信任和密钥,但CI环境是全新的容器,默认不会信任你的GitLab实例主机密钥,也没有能访问私有仓库的认证密钥,只设置GOPRIVATE根本不够,这才导致Host key verification failed报错。

具体解决步骤

1. 配置CI访问私有仓库的凭证

  • 生成SSH密钥对:本地执行ssh-keygen -t ed25519 -C "ci@your-org.com",一路回车生成无密码的密钥对。
  • 把公钥添加到私有Go模块所在仓库的部署密钥里(仓库设置→部署密钥→粘贴公钥,勾选"允许读取"即可)。
  • 把私钥存到当前CI项目的CI/CD变量中:变量名设为SSH_PRIVATE_KEY,类型选"变量",勾选"保护"和"掩码",避免泄露。

2. 在CI流水线中配置SSH环境

修改.gitlab-ci.yml的部署阶段,添加SSH初始化步骤:

deploy:
  stage: deploy
  before_script:
    # 安装依赖工具(如果基础镜像没带)
    - apt-get update && apt-get install -y openssh-client git
    # 初始化SSH目录并设置安全权限
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    # 自动信任GitLab主机密钥(替换成你的组织域名)
    - ssh-keyscan your-org-domain.com >> ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
    # 加载私有密钥
    - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
    - chmod 600 ~/.ssh/id_ed25519
    # 配置GOPRIVATE(这里设置比Dockerfile里更灵活)
    - go env -w GOPRIVATE="your-org-domain.com/"
  script:
    - go mod download
    # 你的后续部署命令...

3. 备选方案:用HTTPS替代SSH(更省心)

嫌SSH配置麻烦的话,直接用GitLab项目访问令牌走HTTPS:

  • 在私有Go模块所在仓库生成项目访问令牌,权限选read_repository。
  • 把令牌存到CI项目的变量GITLAB_TOKEN中。
  • 修改CI配置:
deploy:
  stage: deploy
  before_script:
    - go env -w GOPRIVATE="your-org-domain.com/"
    # 让Git自动用令牌访问私有仓库
    - git config --global url."https://oauth2:$GITLAB_TOKEN@your-org-domain.com/".insteadOf "https://your-org-domain.com/"
  script:
    - go mod download

4. 检查Docker镜像基础配置

如果用自定义Docker镜像,确保镜像里预装了git和openssh-client,别因为缺工具导致步骤失败。

内容的提问来源于stack exchange,提问作者StackEdd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:46:00