我一直在尝试制作一个 GitLab CI/CD 管道来部署我的 MEAN 应用程序。我有三个阶段:1. 测试 2. 构建 3. 部署
构建阶段有一个生成工件的 build_angular 作业。现在我想在下一阶段使用这个工件,即部署。部署作业告诉我它已下载工件(已附加图像),但现在我想提取此工件,但我不知道工件下载到哪里。
pia*_*ton 18
GitLab 正在清理两个后续作业之间的工作目录。这就是为什么您必须在作业之间使用artifacts和dependencies传递文件的原因。
当“部署”作业说已下载构建工件时,这仅意味着它们已像以前一样重新创建。下载的工件的位置与工件路径的位置(如 .yml 文件中声明的)相匹配。
build_job:
stage: build
script:
- echo "create bin/ directory"
- make
artifacts:
paths:
- bin/
deploy_job:
stage: deploy
script:
- ls bin/
dependencies:
- build_job
Run Code Online (Sandbox Code Playgroud)
目录bin/被传递到deploy_jobfrom build_job。
请注意,gitlab-org/gitlab-runner问题 2656提到:
但文档实际上讨论了这个限制:“在成功的最新管道中”:现在无法从当前运行的管道中获取工件。
谢谢 !
我认为文档确实应该更加明显地表明您需要整个管道完成才能访问工件,并且您不能在管道中使用它。在我看来,此功能的明显用例是在服务器上部署,并且您希望服务器部署成为管道的一部分。
要从工件下载单个文件,请使用以下 URL:
Run Code Online (Sandbox Code Playgroud)https://example.com/<namespace>/<project>/-/jobs/artifacts/<ref>/raw/<path_to_file>?job=<job_name>
参见allpix-squared/allpix-squared示例。
它的.gitlab-ci.yml部署阶段调用具有正确路径的脚本:
Run Code Online (Sandbox Code Playgroud)sudo -u cvclicdp -i $RUNNER_LOCATION/.gitlab-ci.d/gitlab_deploy.sh $RUNNER_LOCATION $BUILD_PATH