我使用SVN-1.7.4进行版本控制,使用atlassian JIRA作为我的LAMP网站的问题跟踪器.我希望限制SVN提交,如果我的任何团队成员提交,而不提及相同的Jira Issue密钥.我正在使用JIRA standalone并将其安装在我的服务器上.谷歌搜索给了我Subversion Jira插件(https://studio.plugins.atlassian.com/wiki/display/SVN/Subversion+JIRA+plugin),但它只能帮助我跟踪有JIRA密钥的提交,而不是限制他们.如果我发布有关该问题的更多细节,请告诉我.
使用JIRA ReST API检查JIRA中是否存在该问题并不困难.
在我们的例子中,我使用了该pre-commit.tmpl文件并在开头评论部分后添加了以下内容:
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
CURL=/usr/bin/curl
JIRAURL=http://our.jira.url:8080/rest/api/latest/issue
# Make sure that the log message contains some text.
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS")
echo ${LOGMSG} | grep "[a-zA-Z0-9]" > /dev/null || exit 1
# check that log message starts with a JIRA ticket
# should have format 'FOO-123: my commit message' or 'FOO-123 my commit message'
JIRAID=$(expr "${LOGMSG}" : '^\([A-Z]*-[0-9]*\)[: ].*')
if [[ "$JIRAID" == "" ]]
then
echo "No JIRA id found in log message \"${LOGMSG}\"" >&2
echo "Please use log message of the form \"JIRA-ID: My message\"" >&2
exit 1
fi
# check if JIRA issue exists
JIRAISSUE=$(${CURL} ${JIRAURL}/${JIRAID})
if [[ "${JIRAISSUE}" =~ "Issue Does Not Exist" ]]
then
echo "The JIRA id ${JIRAID} was not found" >&2
echo "Please use log message of the form \"JIRA-ID: My message\"" >&2
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
这要求消息的格式为"JIRA-id:text"或"JIRA-id test".您可以使正则表达式更通用,以允许在文本中的任何位置使用JIRA ID.您还可以添加检查${JIRAISSUE}以确保问题在需要时打开,但这似乎足以满足我们的目的.
我碰巧有一个预先提交的钩子,涵盖了这个(以及许多其他的东西).
钩子可以通过Git-Hub获得.它不验证Jira ID是否存在,但它可以验证提交消息中是否存在类似Jira的ID.这通常足以确保开发人员在其提交消息中添加Jira票号.有一个示例control.ini文件,向您展示如何在提交消息中检查类似Jira的票号.有效的提交消息的格式如下:
但是,比预先提交钩子更好的方法是改变工作场所的文化,这样开发人员自然会将Jira票号放在提交消息中,并自动提供更详细的提交消息.我发现使用像Jenkins这样的连续构建服务器会这样做.
每次签入时,Jenkins都会自动构建您的代码.每个构建都会显示更改和提交注释.Jenkins集成到Jira,只需点击一下,即可看到Jira信息.Jenkins还会附加提交消息并在Jira票证上构建#,因此QA人员可以查看特定的Jira票证,并查看修复此票证的构建.
突然,提交消息信息变得更加明显.开发人员和QA开始依赖它.不添加Jira票证的开发人员不是由那些执行构建的人,而是他们的老板和他们的开发人员.现在,提交好的提交消息就成了这个地方的文化.并且,这是一种比任何预提交钩子更好的执行器.
| 归档时间: |
|
| 查看次数: |
18163 次 |
| 最近记录: |