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

如何在GitLab CI中获取Docker镜像内Go应用生成的文件

解决GitLab CI获取Docker容器内生成的XML文件问题

方案1:构建时直接导出文件到CI主机(推荐,需Docker 17.05+)

利用Docker BuildKit的--output参数,在构建镜像的同时把容器内生成的XML文件直接导出到CI运行环境的工作目录,后续即可通过artifacts收集。

修改后的CI配置:

test:
  stage: checks
  image: docker:latest
  services:
    - docker:dind
  script:
    # 开启BuildKit确保--output参数可用
    - export DOCKER_BUILDKIT=1
    # 构建镜像并将容器内指定路径的文件导出到CI主机的exported_files目录
    - docker build -t $serviceName -f file.qc --output type=local,dest=./exported_files .
  artifacts:
    paths:
      # 匹配导出的XML文件路径
      - ./exported_files/build/xyz/file.xml
    expire_in: 1 week # 可选,设置产物过期时间,避免占用存储

方案2:通过临时容器复制文件到CI主机

如果你的Docker版本不支持--output,可以先构建镜像,再启动临时容器将文件复制到CI工作目录:

修改后的CI配置:

test:
  stage: checks
  image: docker:latest
  services:
    - docker:dind
  script:
    # 构建镜像
    - docker build -t $serviceName -f file.qc .
    # 创建临时容器(仅用于复制文件,无需启动)
    - docker create --name temp_container $serviceName
    # 将容器内的XML文件复制到CI主机当前工作目录
    - docker cp temp_container:/build/xyz/file.xml ./test_result.xml
    # 清理临时容器
    - docker rm temp_container
  artifacts:
    paths:
      # 收集复制出来的文件
      - ./test_result.xml
    expire_in: 1 week

注意事项

  • 务必确认容器内的文件路径/build/xyz/file.xml完全正确,路径错误会导致文件复制失败
  • CI工作目录(即你提到的GOPATH/src/path/to/my/repository)是artifacts默认扫描范围,只要文件被复制到该目录下的任意位置,都能被正常收集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:45:20