Jenkins能否在一个包含多个包的monorepo中只构建一个python包?
假设有一个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/ │ ├
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为我们的软件包提供快速、可复制的构建。裤子 在其目标上执行增量构建,因此仅更改模块 重新生成,从而加快构建过程。运行所有构建 虚拟环境中的目标确保构建是可复制的 这对我来说很好,虽然裤子在窗户上不起作用