首页 > 解决方案 > 无法在 GitLab CI/CD 中的作业之间传递工件

问题描述

我有一个 GitLab 项目,.gitlab-ci.yml看起来像这样:

stages:
  - build
  - deploy

image: registry.gitlab.com/myuser/myproj/ubuntuxenial:v1

before_script:
  - cd /home
  - mkdir docker
  - cd docker
  - git clone "https://xxx@github.com/myuser/myproj.git" repo
  - cd repo

render_site:
  stage: build
  artifacts:
    name: "$CI_JOB_NAME-$CI_COMMIT_REF_NAME--$CI_JOB_STAGE-$CI_COMMIT_REF_NAME"
    expire_in: 1 week
    paths:
      - home/docker/repo/
  script:
    - Rscript build.R

...

我在这个问题的上下文中提供了文件的基本部分。如您所见,此自动化旨在执行以下操作:

  1. 克隆一个存储库。
  2. 在存储库中调用构建命令(我正在使用 R)。此步骤将在存储库文件夹中生成一些输出文件。
  3. 确保发布工件,我想发布整个存储库repo文件夹的内容。

注意我已将 GitLab 设置为使用 Docker 图像。我正在使用我在注册表中上传的 Unix 映像。

问题

问题发生在第一份工作中:render_site. 一切都很好,命令被执行并且所有构建都很好。但是,该任务日志中的最后一行是:

Uploading artifacts...
WARNING: home/docker/repo/: no matching files      
ERROR: No files to upload

故障排除

我了解问题出在我提供的路径中.gitlab-ci.yml。我尝试了以下方法:

没有任何效果。我们指定的这个路径,它与什么有关???文档提到:

您只能使用项目工作区中的路径。

这是什么意思?每次推送时我都在创建一个容器,并且我cd在 中指定的命令中进入不同的目录.gitlab-ci.yml,那么文档提到的项目工作区是什么?

标签: gitdockergitlabgitlab-ci

解决方案


问题解决了。我的问题显然是因为对 GitLab 以及跑步者的工作方式缺乏了解。我缺少的是,运行程序在从指定的 Docker 映像创建容器后,实际上将在容器中创建一个带有提交的文件夹。

无用的克隆

因此,我所拥有的before_script完全没有用。感谢@ensc 在评论中指出这一点。

项目路径

谈到这个问题,项目路径正是在指定提交处克隆存储库的容器中创建的目录。


推荐阅读