Jenkins可以在具有多个软件包的monorepo中仅构建一个python软件包吗?

时间:2018-11-17 01:45:50

标签: python jenkins packaging python-packaging monorepo

假设存在一个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

2 个答案:

答案 0 :(得分:2)

我也一直在寻找这个。我在Pinterest上找到了一个博客条目,他们在其中使用Pants

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

他们一部分说:

  

裤子为我们的包装提供了快速,可复制的构造。裤子   在其目标上执行增量构建,因此仅更改模块   被重建,从而加快了构建过程。运行所有构建   虚拟环境中的目标可确保构建可复制。

这对我来说很好,尽管Pants在Windows上不起作用。

答案 1 :(得分:1)

我也一直在寻找答案。 带有参数以指定更改哪个软件包的手动作业是一种方法,但这不是很好。

另一个选择是尝试检测已更改的内容,我也不喜欢,但这是我发现的git repo,其中包含执行此操作的脚本https://github.com/slimm609/monorepo-gitwatcher

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

我对这些解决方案都不感到兴奋,但目前我想不起或找到任何更好的方法!

编辑:Jorge在Shazam文章上的答复提到,他们通过使用特定名称标记回购协议来解决该问题,并且向Jenkins指出了要在monorepo中构建哪些软件包。它不是完全自动化的,但我想这取决于您愿意投入多少时间以及发生的频率!