【问题标题】:Building a pipeline for multiple-repository services为多存储库服务构建管道
【发布时间】:2021-12-04 10:03:03
【问题描述】:

我正在用 Python 开发一个服务,它有一个包作为依赖项。我自己开发了这种依赖关系。
我有一个私有 PyPI 服务器,其中包含主分支中每个提交的工件(轮文件)(对于两个包)。
我想创建一个 CI,它将使用 pip 从私有 PyPI 服务器安装依赖项(因为它比每次都从源代码本身安装更快更容易)。

项目依赖示例:

包 A 需要包 B
(它们都在私有存储库中,而不是公共包中)。

我的问题是,如果我试图在 B 存储库合并到 master 之后立即在 A 存储库上执行 CI,
私有 PyPI 服务器还没有最新版本的 B(今天有一个 Jenkins 作业,每次合并到 master 后都会激活并将 B 轮上传到私有 PyPI 服务器,
但是构建包需要几分钟)。结果是包 A 可能包含旧版本的 B,而不是使用最新版本的 B。

对如何改进这个过程有什么建议吗?

与直接从 Gitlab 安装相比,从私有 PyPI 安装显着缩短了安装时间。

顺便说一句,今天我使用的是 Gitlab 的企业版和 Jenkins。

谢谢

【问题讨论】:

  • 我们通过 Reliza Hub 支持这种行为(我正在开发该工具)——基本上,这个想法是在 CI 阶段——工件创建——你将依赖元数据提交给 Reliza Hub。然后 Reliza Hub 将为您创建捆绑包 - 然后您在 CD 阶段解析这些捆绑包。您可以在 DevOps Discord 上找到我 - discord.gg/UTxjBf9juQ - 将帮助您进行设置。

标签: python build continuous-integration multiple-repositories


【解决方案1】:

您只需要在开始安装 A 之前检查包 B 是否是最新的。因此(在您的 Jenkins 工作中)只需执行一个构建步骤来下载 B 的所有内容,然后下载 A 的所有内容。

【讨论】:

  • “为 B 下载所有内容”是什么意思?
  • 创建wheel文件的源代码
  • 你是不是建议我在建A的时候,如果B没有建,我也应该建?
  • 您编写的包 A 需要包 B。因此,如果您想确保 B 的代码是最新的,您应该检查 Git 上的更改,如果有更改,则构建 B。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-12
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多