假设存在一个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
答案 0 :(得分:2)
我也一直在寻找这个。我在Pinterest上找到了一个博客条目,他们在其中使用Pants:
他们一部分说:
裤子为我们的包装提供了快速,可复制的构造。裤子 在其目标上执行增量构建,因此仅更改模块 被重建,从而加快了构建过程。运行所有构建 虚拟环境中的目标可确保构建可复制。
这对我来说很好,尽管Pants在Windows上不起作用。
答案 1 :(得分:1)
我也一直在寻找答案。 带有参数以指定更改哪个软件包的手动作业是一种方法,但这不是很好。
另一个选择是尝试检测已更改的内容,我也不喜欢,但这是我发现的git repo,其中包含执行此操作的脚本https://github.com/slimm609/monorepo-gitwatcher
我希望那里有更好的解决方案,我在Shazam(https://blog.shazam.com/python-microlibs-5be9461ad979)上找到了一个博客在谈论这个问题,听起来好像他们已经解决了他们的问题。我已经评论过,试图对此做一些澄清。
我对这些解决方案都不感到兴奋,但目前我想不起或找到任何更好的方法!
编辑:Jorge在Shazam文章上的答复提到,他们通过使用特定名称标记回购协议来解决该问题,并且向Jenkins指出了要在monorepo中构建哪些软件包。它不是完全自动化的,但我想这取决于您愿意投入多少时间以及发生的频率!