【问题标题】:Can Jenkins build only one python package in a monorepo with multiple packages?Jenkins 可以在具有多个包的 monorepo 中只构建一个 python 包吗?
【发布时间】:2019-04-20 05:01:24
【问题描述】:

假设有一个monorepo,在不同的目录中有几个可独立构建的python包,格式如下所示,其中foobar是可独立构建的。

现在假设有人将代码推送到托管它的 git 存储库,并且代码修订版仅存在于 bar 包中。如果 Jenkins 接受了推送,有没有办法让 Jenkins 检测到哪个包被更改,并且只构建和部署更改的包,例如bar?

或者,无论推送了哪些更改,让 Jenkins 在一个 monorepo 中重建/重新部署所有包是否只是标准做法?

root/
 └ src/
    ├ foo/
    │  ├ requirements.txt
    │  ├ setup.py
    │  └ foo/
    │     ├ __init__.py
    │     ├ module1.py
    │     ├ ...
    │     └ moduleN.py
    .
    .
    .
    └ bar/
       ├ requirements.txt
       ├ setup.py
       └ bar/
          ├ __init__.py
          ├ module1.py
          ├ ...
          └ moduleN.py

【问题讨论】:

    标签: python jenkins packaging python-packaging monorepo


    【解决方案1】:

    我也一直在寻找这个。我在 Pinterest 上找到了一篇博客文章,他们使用Pants

    https://medium.com/@Pinterest_Engineering/building-a-python-monorepo-for-fast-reliable-development-be763781f67

    他们说:

    Pants 为我们的软件包提供快速、可重复的构建。裤子 对其目标执行增量构建,因此仅更改模块 被重建,这加快了构建过程。运行所有构建 虚拟环境中的目标可确保构建可重现。

    这对我来说看起来不错,虽然 Pants 不能在 Windows 上运行。

    【讨论】:

      【解决方案2】:

      我也一直在寻找这个问题的答案。 使用参数来指定哪个包已更改的手动作业是一种方法,但它不是很好。

      另一个选项是尝试检测发生了什么变化,我也不喜欢,但这是我发现的一个 git repo,它有一个脚本可以做到这一点https://github.com/slimm609/monorepo-gitwatcher

      我希望那里有更好的解决方案,我在 Shazam (https://blog.shazam.com/python-microlibs-5be9461ad979) 上找到了一个博客在谈论它,听起来他们已经解决了他们的问题。我已发表评论,希望能对此部分做出澄清。

      我对这些解决方案都不感兴趣,但目前我想不出或找到更好的解决方案!

      编辑:Jorge 对 Shazam 文章的回复提到他们通过使用特定名称标记 repo 来解决它,并向 Jenkins 指示要在 monorepo 中构建哪些包。它不是完全自动化的,但我想这取决于你愿意投入多少时间以及它发生的频率!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-12
        • 2021-11-20
        • 2022-11-03
        • 2020-03-04
        • 2016-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多