Jenkins能否在一个包含多个包的monorepo中只构建一个python包?

Jenkins能否在一个包含多个包的monorepo中只构建一个python包?,python,jenkins,packaging,python-packaging,monorepo,Python,Jenkins,Packaging,Python Packaging,Monorepo,假设有一个monorepo,在不同的目录中有几个可独立构建的python包,如下所示的格式,其中foo和bar是可独立构建的 现在假设有人将代码推送到git存储库中,该存储库承载代码,并且代码修订只存在于bar包中。如果Jenkins接受推送,Jenkins有没有办法检测到哪个包被更改,并且只构建和部署更改的包,例如bar? 或者,让Jenkins在monorepo中重建/重新部署所有包,而不管推动了哪些更改,这只是标准做法吗 root/ └ src/ ├ foo/ │ ├

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

现在假设有人将代码推送到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

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

另一个选择是尝试检测发生了什么变化,我也不喜欢,但我发现有一个git repo,它有一个这样做的脚本

我希望有一个更好的解决方案,我在Shazam()上发现了一个讨论这个问题的博客,听起来他们已经解决了他们的问题。我已经发表了评论,试图澄清这一部分

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


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

我也一直在找这个。我在Pinterest找到一篇博客,他们在那里使用:

其中一部分说:

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

这对我来说很好,虽然裤子在窗户上不起作用