简而言之 - 我正在使用免费的SVN托管服务,我想将JIRA与SVN集成。但是,我想为SVN实现预提交挂钩,以验证针对JIRA中的问题的提交注释,并在适当的情况下拒绝这样做。我没有直接访问SVN服务器ofc,所以我想知道是否有可能在另一台机器上配置SVN,就像“代理”一样。提交流程类似于:
1) User -> commit to proxy -> validation ok -> commit to external repository
2) User -> commit to proxy -> commit validation failed -> return to user with error message
这与所谓的“外部”(无论是什么)有关吗?
答案 0 :(得分:2)
看看Jenkins。它轻巧,易于配置。它能做的是在每次提交后运行一个任务。它可以编译代码,运行单元测试,部署,并且可以执行大多数您认为需要提交后和预提交挂钩的任务。
如果Jira问题被错误归因,我对拒绝提交非常谨慎。会发生的变化是其他故障单中的更改,或者生成了一个虚假故障单,并且所有提交都会发生。我在一家银行,除非有一张Jira票,否则你无法提交更改,该票据处于 open 状态,并且已分配给您。发生的事情是,代码中发现的已知错误并未修复,单元测试无法正常工作,并且当开发人员修复内容时,他们只是将其应用于他们知道已打开的门票,而与之无关。修复。 Jira中的信息变得毫无意义。
我做的第一件事是删除预提交触发器,并在Jenkins中添加作为开发过程的一部分。突然间,提交速度更快,开发人员开始处理他们自己发现的问题。随着开发人员确保它可以通过新的单元测试,单元测试的数量增加了,代码也得到了改进。更令人惊讶的是,开发人员开始添加Jira票证信息,并根据Jenkins提供更详细的提交消息。
Jenkins通常会在每次提交后设置为执行 build 。构建可能包括其他内容,例如linting your code,运行单元测试,构建文档以及报告(使用图表)在提交中找到的任何问题。 Jenkins甚至可以部署代码并运行功能测试。
但是,每个构建都显示提交消息。如果提交消息中有一个Jira票证,则指向该Jira票证的链接。更好的是,Jenkins在Jira票证中添加了一条评论,说明这个bug是在特定的Jenkins构建中处理的(带有返回该构建的链接)。
现在,Jenkins不仅仅是一个开发工具,而且还成为了一个QA工具。 QA会发现在Jira中标记为已修复的问题,请参阅Jenkins构建修复该故障单的位置,然后测试该特定构建。 (Jenkins的另一个特性:它可以在每个构建中存储可部署的工件。)。如果需要,QA可以重新打开该问题或报告发现的新错误。 QA正在积极关注开发人员,而不是在sprint(或发布)的最后阶段进行QA。在开发人员编写之后的第二天就可以检测到错误,并在第二天修复错误。
项目经理还发现Jenkins和Jira是一个有用的组合。他们现在可以准确地说出将要部署到生产的构建。构建标记为在各种环境中进行测试。不再需要在UAT中批准构建,并且开发人员偷偷进行一些代码更改,这些代码在生产之前从未进行过测试。
由于质量保证和项目经理的压力,开发经理敦促他们的开发人员添加好的提交消息并添加所需的Jira票证。此外,开发经理还发现Jenkins中的信息很有用。提交消息可以不是孤立地查看,而是针对特定构建,一组单元测试和功能。甚至开发人员自己也发现这些信息很有用这是开发人员第一次看到提交消息。之前,提交消息毫无意义。开发人员主要提供无意义的Jira信息并提交消息,例如"修复错误"。现在,提交消息很有意义,开发人员可以使用它们来跟踪更改。
最后,我们摆脱了预提交钩子,并且提交消息中的Jira票证信息实际上得到了改进。它改善了,因为我们改变了组织的文化。这就是CM发生的好坏。工具不再妨碍工作。相反,它们对你的工作很重要。每个人都看到软件的质量得到了提高,并成为了这一过程的倡导者。
有代理 Subversion服务器的方法。 Wandisco提供了他们所谓的Subversion Multisite,它允许您在世界各地拥有代理Subversion服务器。但是,这些主要是为了允许远程开发人员使用本地Subversion存储库。 Wandisco确保所有提交都针对所有存储库。
问题是您希望代理阻止主Subversion存储库中的提交。这是不可能的 - 除非您部署预提交挂钩以强制主存储库等待代理确定是否允许提交 - 这是您无法做到的。否则,您的代理将不会拥有主存储库中的提交。
此外,为什么还要为代理服务呢?如果您可以设置代理,为什么不简单地使用代理作为您的主要Subversion服务器?
但是,您可以在一小时内设置Jenkins服务器,并在Jenkins,Jira和Subversion存储库之间实现真正的集成。你正确地玩牌,你不仅会发现这个解决方案足够好,而且比依赖预先提交的钩子更好。
如果你把你的开发者视为一群必须仔细观察的小学生,他们不会违反规则,他们就会这样做。如果您将开发人员视为高素质的专业人士,他们就会这样做。