gitlab - 尝试从共享 docker 卷上传文件作为工件

gitlab - trying to upload files from shared docker volume as artifacts

我正在尝试从容器上传文件作为我的 gitlab 管道中的工件。我正在尝试创建一个共享卷。但我一定是做错了什么,因为我得到一个错误,没有文件可以上传。

我的gitlab-ci.yml文件中有如下逻辑:

variables:
  SHARED_PATH: testresults
  DOCKER_DRIVER: overlay2

deployDev:
  stage: deployDev
  environment:
    name: development
  script:
    - docker volume create ${SHARED_PATH}
    - docker build --platform linux/amd64 --target deployFunctionApp -t azuredeployserver .
    - docker run -v ${SHARED_PATH}:/builds/TestResults azuredeployserver
  artifacts:
    when: always
    paths:
      - ${SHARED_PATH}/test-results.xml
    reports:
      junit:
        - ${SHARED_PATH}/test-results.xml
  except:
    - main
  when: manual
  tags:
    - mac-pipelines

这是错误:

$ docker run -v ${SHARED_PATH}:/builds/TestResults azuredeployserver
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
Uploading artifacts for successful job
00:00
Uploading artifacts...
WARNING: testresults/test-results.xml: no matching files 
ERROR: No files to upload                          
Uploading artifacts...
WARNING: testresults/test-results.xml: no matching files 
ERROR: No files to upload                          
Cleaning up project directory and file based variables
00:00
Job succeeded

手动尝试

图像由管道构建后,我尝试从命令行手动执行此操作:

PS /Users/me/> docker 运行 --rm -i -v=testresults:/build/testresults azuredeployserver ls -lah /build/testresults

警告:请求的图像平台 (linux/amd64) 与检测到的主机平台 (linux/arm64/v8) 不匹配,未请求特定平台 总计 12K drwxr-xr-x 2 根根 4.0K 4 月 25 日 19:43。 drwxr-xr-x 3 根根 4.0K 4 月 26 日 12:47 .. -rw-r--r-- 1 root root 809 Apr 25 19:42 test-results.xml

所以我可以看到 XML 文件在那里 - 我只是不知道如何通过 gitlab 获取它 -ci.yml

如有任何帮助,我们将不胜感激。

编辑 1

我修改了脚本以尝试 docker cp 命令:

  script:
    - docker volume create ${SHARED_PATH}
    - docker build --platform linux/amd64 --target deployFunctionApp -t azuredeployserver .
    - docker run --name $DOCKER_IMAGE_BUILD_TAG_ID -v ${SHARED_PATH}:/builds/TestResults azuredeployserver
    - docker cp $DOCKER_IMAGE_BUILD_TAG_ID:/builds/TestResults/*.xml ./TestResults/*.xml

但我看到的错误是

$ docker run --name $DOCKER_IMAGE_BUILD_TAG_ID -v ${SHARED_PATH}:/builds/TestResults azuredeployserver
docker: invalid reference format: repository name must be lowercase.
See 'docker run --help'.
Uploading artifacts for failed job
00:00
Uploading artifacts...
WARNING: .TestResults/test-results.xml: no matching files 
ERROR: No files to upload                          
Uploading artifacts...
WARNING: .TestResults/test-results.xml: no matching files 
ERROR: No files to upload                          
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: exit code 125

现在看看我是否可以硬编码图像的名称来测试 docker cp 命令。但如果你看到我误入歧途的地方,我会洗耳恭听。 此外,我想如果我使用 docker cp 我可以摆脱与创建卷相关的所有内容吗?

SHARED_PATH=testresults docker volume create ${SHARED_PATH} 创建一个名为 testreults.

的 docker 卷

当你在工件部分引用 ${SHARED_PATH}/test-results.xml 时,你是在说,“在 GitLab Runner 的本地文件系统中寻找 testresults/test-results.xml,它不存在。

我认为这里最直接的选择是将文件从容器中复制到 GitLab Runner 可以访问它的地方。

Docker: Copying files from Docker container to host