我有一个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://[email protected]/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
...
我已在此问题的上下文中提供了文件的基本部分。如您所见,此自动化旨在执行以下操作:
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/
什么都行不通。我们指定的这条路径,它与???有什么关系? documentation提到:
您只能使用项目工作区内的路径。
这是什么意思?我每次推动时都会创建一个容器,并且我在cd
中指定的命令中将.gitlab-ci.yml
放入不同的目录中,那么文档提到的项目工作区是什么?
问题解决了。我的问题显然是因为对GitLab缺乏了解以及跑步者如何运作。我缺少的是,在从指定的Docker镜像创建容器之后,运行器实际上将在容器中创建具有提交的文件夹。
因此,我在before_script
所拥有的东西是完全没用的。感谢@ensc在评论中指出这一点。
回到这个问题,项目路径正是在容器中创建的目录,在该容器中,在指定的提交中克隆了存储库。