Gitlab:构建后如何在后续作业中使用工件

Posted

技术标签:

【中文标题】Gitlab:构建后如何在后续作业中使用工件【英文标题】:Gitlab: How to use artifacts in subsequent jobs after build 【发布时间】:2019-11-05 09:01:26 【问题描述】:

我一直在尝试创建一个 GitLab CI/CD 管道来部署我的 MEAN 应用程序。我有三个阶段: 1.测试 2. 构建 3.部署

构建阶段有一个生成工件的 build_angular 作业。现在我想在下一阶段使用这个工件,即部署。 部署作业告诉我它已经下载了工件(图像已附加),但现在我想提取此工件,但我不知道工件在哪里下载。

文档中的任何地方都没有提到下载工件的路径。

【问题讨论】:

【参考方案1】:

GitLab 正在清理两个后续作业之间的工作目录。这就是为什么您必须使用artifactsdependencies 在作业之间传递文件的原因。

当“部署”作业说构建工件已下载时,这仅意味着它们已像以前一样重新创建。下载的工件的位置与工件路径的位置相匹配(在 .yml 文件中声明)。

示例

build_job:
  stage: build
  script:
  - echo "create bin/ directory"
  - make
  artifacts:
    paths:
      - bin/

deploy_job:
  stage: deploy
  script:
  - ls bin/
  dependencies:
  - build_job

目录bin/build_job传递到deploy_job

【讨论】:

构建工件的作业处于先前阶段似乎也很重要(这里已经是这种情况)。 如果您有步骤:构建、测试和部署怎么办?对于部署,我想从构建步骤而不是测试步骤中获取工件。否则我会部署像 test-coverage.xml 这样的东西。【参考方案2】:

注意gitlab-org/gitlab-runner issue 2656 提到:

但文档实际上谈到了这个限制:“在成功的最新管道中”:现在无法从当前运行的管道中获取工件。

谢谢! 我认为文档应该更清楚地表明您需要在工件可访问之前完成整个管道,并且您不能在管道中使用它。

在我看来,此功能的明显用例将部署在服务器上,并且您希望服务器部署成为管道的一部分。

来自Pipelines / Jobs Artifacts / Downloading the latest artifacts

要从工件下载单个文件,请使用以下 URL:

https://example.com/<namespace>/<project>/-/jobs/artifacts/<ref>/raw/<path_to_file>?job=<job_name>

allpix-squared/allpix-squared 为例。

它的.gitlab-ci.yml deploy stage 用正确的路径调用脚本:

sudo -u cvclicdp -i $RUNNER_LOCATION/.gitlab-ci.d/gitlab_deploy.sh $RUNNER_LOCATION $BUILD_PATH

【讨论】:

对于确实表明它已下载工件的部署作业,您有什么要说的? @GoutamBSeervi 我添加了一个示例,显示您可以在任何您想要的文件夹中触发下载。

以上是关于Gitlab:构建后如何在后续作业中使用工件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 GitLab CI 管道的工作发送电子邮件?

如何在 .gitlab-ci.yml 中指定通配符工件子目录?

如何将工件传递到另一个阶段?

GitLab 多个运行器,交换工件

如何创建一个工件,以便它可以在 .gitlab-ci.yml 中下载

在 Gitlab 中合并请求后运行 Jenkins 作业