虽然我们是使用SVN进行源代码管理和使用Apache Ivy进行依赖关系管理的Java阵营,但这个问题广泛适用于任何平台/语言,SCM和工件存储库工具。
我的技术主管和我一直在努力使用像Ivy这样的依赖管理器来管理我们所有的JAR。我们已经设置了我们所谓的“ Ivy Repo ”,这是我们内部(由我们开发)JAR以及常用的依赖项(Apache JAR,Spring)的地方等等。)。
我们开始遇到一些问题,开发人员必须对我们的内部Commons JAR(Commons.jar
)进行更改,然后在代码更改进行代码审查之前运行<ivy:publish>
,致力于SVN并从CI服务器构建。当开发人员在一个项目中处理错误修复或新功能时,会发生这种情况,但需要对Commons.jar等依赖项进行修改才能完成任务。
因此,我们处于Ivy和SVN彼此不同步的情况。
显然,我们可以制定一条规则,在没有首先让代码审核,提交和测试代码的情况下,不允许任何人发布。或者,我们可以完全禁止开发人员发布。
在走向任何一条路线之前(我们倾向于后者),我们想知道其他团队是否遇到过相同的问题以及实施了哪些解决方案来阻止这种情况。
也许像Artifactory或SonaType这样的工具值得研究,但我们都不具备使用它们的经验,看起来它们不支持这些业务规则。
简而言之:我们正在寻找一种方法来防止过早的JAR发布,以便发布始终是标准code
&gt;&gt;中的 last 阶段。 review
&gt;&gt; commit
&gt;&gt; CI
&gt;&gt; deploy
周期。
提前致谢!
答案 0 :(得分:3)
Artifactory提供了细粒度的permission management,这对于控制谁可以部署什么以及在哪里部署非常有用;例如,您可以创建一个规则,根据其名称\路径(即您的Commons.jar)拒绝发布jar文件,并将其应用于所有用户,但有权批准的用户除外。
如果你需要更多的灵活性,Artifactory的专业版也有User Plugins feature,它基本上允许你为Artifactory编写groovy插件,并为你提供丰富的上下文和钩子,用于不同的操作。
此外,Artifactory的properties metadata允许您使用自定义标记注释任何工件和文件夹,这些标记也可用于不同的条件。
结合这两者,让你的想象力疯狂。