git - 无法在 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
...
我在这个问题的上下文中提供了文件的基本部分。如您所见,此自动化旨在执行以下操作:
- 克隆一个存储库。
- 在存储库中调用构建命令(我正在使用 R)。此步骤将在存储库文件夹中生成一些输出文件。
- 确保发布工件,我想发布整个存储库
repo
文件夹的内容。
注意我已将 GitLab 设置为使用 Docker 图像。我正在使用我在注册表中上传的 Unix 映像。
问题
问题发生在第一份工作中:render_site
. 一切都很好,命令被执行并且所有构建都很好。但是,该任务日志中的最后一行是:
Uploading artifacts...
WARNING: home/docker/repo/: no matching files
ERROR: No files to upload
故障排除
我了解问题出在我提供的路径中.gitlab-ci.yml
。我尝试了以下方法:
home/docker/repo/
/home/docker/repo/
repo/
没有任何效果。我们指定的这个路径,它与什么有关???文档提到:
您只能使用项目工作区中的路径。
这是什么意思?每次推送时我都在创建一个容器,并且我cd
在 中指定的命令中进入不同的目录.gitlab-ci.yml
,那么文档提到的项目工作区是什么?
解决方案
问题解决了。我的问题显然是因为对 GitLab 以及跑步者的工作方式缺乏了解。我缺少的是,运行程序在从指定的 Docker 映像创建容器后,实际上将在容器中创建一个带有提交的文件夹。
无用的克隆
因此,我所拥有的before_script
完全没有用。感谢@ensc 在评论中指出这一点。
项目路径
谈到这个问题,项目路径正是在指定提交处克隆存储库的容器中创建的目录。
推荐阅读
- php - PhpStorm 可以识别函数指针吗?
- javascript - 类不是构造函数,多个'require'
- javascript - 我的光线投射程序中出现奇怪的失真
- r - 如何使用字符/长字符串数据折叠和聚合行
- scala - 编译器未“选择”辅助构造函数
- sql - 根据选择中的计数列返回最大行
- php - Magento 2 Collection Date 按一小时过滤
- python - 如何从 Django 模板创建指向我的 React 应用程序的链接
- c++ - 如果在 DLL 和调用应用程序中使用 GPGPU API 会发生什么
- selenium - 在方法外将 Webdriver 声明为 null 并在方法内声明 Webdriver 时出现空指针异常