问题

  • 在 CI 阶段使用 docker 容器时,在项目之间携带工件(jar、class、war)的最佳方式是什么。

  • 让我详细解释我的问题,请不要停止阅读...... =)

    Gitlabs 项目1
  • 单元测试
  • 等等...

  • Gitlabs 项目2
  • 单元测试
  • 等等...
  • 构建(失败)
  • 这里我需要一个在 project1 中生成的工件(jar)

  • 当前场景/评论
  • 我正在使用 docker,所以在每个 .gitlab-ci.yml 中我都会有独立的容器
  • 在 project1 中一切正常
  • 如果我在 .gitlab-ci.yml 中使用“shell”而不是 dockers,我可以将 project1 中的 jar 文件保存在磁盘中,并在 project2 启动构建时使用
  • 今天,当 project1 完成时,我调用 project2 的触发器运行良好
  • 我的工件不是 RPM,所以我不会添加到我的 repo

  • 可能的解决方案
  • 我可以提交project1的artifact并在需要构建project2时checkout
  • 我需要研究 gitlabs 的缓存功能是否是为此目的而设计的 (gitlab 8.2.1, How to use cache in .gitlab-ci.yml)
  • 最佳答案

    您好,您必须查看由 get-last-successful-build-artifact.sh 开发的名为 morph027 的脚本。

    https://gitlab.com/morph027/gitlab-ci-helpers

    此脚本允许下载工件并将其解压缩到项目根目录中。它使用 Gitlab API 检索最新的成功构建并下载相应的工件。只需稍微更新脚本,您就可以组合多个工件并解压缩到您想要的任何位置。

    我目前也在启动 PHP library 来处理构建工件,但它处于非常早期的阶段,目前与 laravel 相关。

    目前还没有简单的方法来处理项目之间的工件使用,您必须使用该工具构建自己的。

    我认为使用 shell executor 不是正确的解决方案,它非常危险,因为您无法验证构建期间使用的服务器上的文件!

    希望这有帮助:)

    关于continuous-integration - 在进一步项目中使用的一个项目的 Gitlab 工件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39873792/

    10-14 17:24
    查看更多