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

GitLab CI无法在Job间传递目录及文件问题求助

GitLab CI跨Job传递HOME目录文件的解决方案

GitLab CI的artifacts仅支持上传项目工作目录内的文件,你配置的/home/user是绝对路径,不属于项目目录范围,所以触发警告并导致文件上传失败,job_b自然无法获取到所需文件。

修改方案

核心思路是把需要传递的文件先放到项目内的临时目录,通过artifacts传递后,再在job_b中移回真实HOME路径:

  1. 在job_a中,创建项目内的临时目录模拟HOME结构,同时复制文件到真实HOME和临时目录(保证job_a正常执行Ansible)
  2. 配置artifacts指向项目内的临时目录
  3. 在job_b中,将下载的临时目录内容移回真实HOME路径,再执行Ansible剧本

修改后的完整CI配置

job_a:
  stage: build
  script:
    # 创建项目内的临时目录,复刻HOME的目录结构
    - mkdir -p ./ci_artifacts/${HOME}/.ssh ./ci_artifacts/${HOME}/files ./ci_artifacts/${HOME}/inventory ./ci_artifacts/${HOME}/a_playbooks ./ci_artifacts/${HOME}/roles
    # 同步复制文件到真实HOME和临时目录
    - cp $ssh_key ${HOME}/.ssh/ && cp $ssh_key ./ci_artifacts/${HOME}/.ssh/
    - cp config ${HOME}/.ssh/config && cp config ./ci_artifacts/${HOME}/.ssh/config
    - cp -r dir/files/ ${HOME}/files/ && cp -r dir/files/ ./ci_artifacts/${HOME}/files/
    - cp -r dir/inventory/ ${HOME}/inventory && cp -r dir/inventory/ ./ci_artifacts/${HOME}/inventory
    - cp -r playbooks ${HOME}/a_playbooks && cp -r playbooks ./ci_artifacts/${HOME}/a_playbooks
    - cp dir/ansible.cfg ${HOME}/ansible.cfg && cp dir/ansible.cfg ./ci_artifacts/${HOME}/ansible.cfg
    - cp dir/site.yml ${HOME}/site.yml && cp dir/site.yml ./ci_artifacts/${HOME}/site.yml
    - cp -r dir/roles ${HOME}/roles && cp -r dir/roles ./ci_artifacts/${HOME}/roles
    # 执行job_a的Ansible剧本
    - ansible-playbook -i ${HOME}/inventory/hosts.yml ${HOME}/site.yml
  when: manual
  artifacts:
    paths:
      - ./ci_artifacts/
    expire_in: 1 week

job_b:
  stage: build
  dependencies:
    - job_a
  script:
    # 将artifacts中的文件移回真实HOME路径
    - cp -r ./ci_artifacts/${HOME}/* ${HOME}/
    # 可选:验证文件是否正常部署
    - ls -lrth ${HOME}/.ssh/
    - ls -lrth ${HOME}/files/
    # 执行job_b的Ansible剧本
    - ansible-playbook -i ${HOME}/inventory/my-cluster/hosts.yml ${HOME}/a_playbooks/site.yml
  when: manual

关键说明

  • 临时目录./ci_artifacts/${HOME}完全复刻真实HOME的结构,确保job_b移动后文件路径与job_a完全一致
  • 复制文件时同步操作真实HOME和临时目录,既保证job_a能正常执行Ansible,又能收集文件到artifacts
  • job_b无需重复处理原始文件,直接通过artifacts传递的内容恢复HOME环境

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:33:16