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

如何在GitLab流水线中调用另一个仓库的Bash脚本?

GitLab流水线调用其他项目脚本的子模块错误解决方法

这个错误的核心是流水线环境中没有提供GitLab私有仓库的认证信息,导致用HTTPS地址克隆子模块时无法通过身份验证。以下是几种可行的解决方式:

方案一:改用SSH地址配置子模块

  • 本地修改项目B的子模块地址,替换为SSH格式:
    git submodule set-url a git@gitlab-ss.intranet.x.com:a.git
    git add .gitmodules
    git commit -m "切换子模块地址为SSH"
    git push
    
  • 流水线配置SSH认证:
    1. 生成SSH密钥对,将公钥添加到项目A的「Settings > Repository > Deploy keys」,按需勾选「Write access allowed」。
    2. 将私钥添加到项目B的「Settings > CI/CD > Variables」,变量名设为SSH_PRIVATE_KEY,类型选「File」。
    3. 在.gitlab-ci.yml中配置SSH环境:
      stages:
        - prepare
      
      prepare_job:
        stage: prepare
        before_script:
          - eval $(ssh-agent -s)
          - ssh-add < "$SSH_PRIVATE_KEY"
          - mkdir -p ~/.ssh
          - echo "Host gitlab-ss.intranet.x.com" >> ~/.ssh/config
          - echo "  StrictHostKeyChecking no" >> ~/.ssh/config
        script:
          - git submodule update --init --recursive
          - # 调用项目A的脚本,例如 ./a/your-script.sh
      

方案二:用CI_JOB_TOKEN通过HTTPS克隆子模块

GitLab流水线内置的CI_JOB_TOKEN可用于同一实例下的项目授权:

  • 打开项目A的「Settings > Repository > CI/CD access for projects」,允许项目B访问(或设置为「All projects」)。
  • 在项目B的.gitlab-ci.yml中添加认证配置:
    stages:
      - prepare
    
    prepare_job:
      stage: prepare
      script:
        - git config --global url."https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab-ss.intranet.x.com/".insteadOf "https://gitlab-ss.intranet.x.com/"
        - git submodule update --init --recursive
        - # 执行项目A的脚本
    

方案三:直接下载脚本(无需子模块)

若仅需调用单个脚本,可跳过子模块直接下载:

stages:
  - run-script

run_script_job:
  stage: run-script
  script:
    - # 替换分支名和脚本路径为实际值
    - curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab-ss.intranet.x.com/a/-/raw/main/your-script.sh" -o your-script.sh
    - chmod +x your-script.sh
    - ./your-script.sh

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:47:46