我们在许多项目构建中使用 Subversion 1.8.8 和 Jenkins 1.509.4(带有 Subversion v2.3 插件)。公司政策需要身份验证,因此在 Jenkins 中,我们使用 LDAP 安全领域,以及基于项目的安全矩阵,用于用户全局和项目授权。我们的 SVN post-commit hook 使用专门为此场合创建的 LDAP 服务帐户与 Jenkins 对话。在实现这一点时,我意识到为了让钩子真正触发作业,即使发送了有效的用户名/密码,在安全页面上将该帐户列为对 Jenkins 具有完全访问权限也是不够的;仍然需要匿名作业读取访问权限。还注意到服务帐户根本不需要任何显式访问。对于有问题的作业,启用轮询。
这种配置的副作用是 Jenkins 的有效用户可以看到服务器上的每个作业。这是一个问题,因为这为用户提供了 200 多个工作,而大多数用户只关心其中的一小部分。
是否有配置允许对提交后挂钩进行身份验证,而不在 Jenkins 中启用任何匿名访问?
作为参考,我们的提交后挂钩如下所示:
SVNLOOK=/usr/bin/svnlook
REPOS="$1"
REV="$2"
UUID=`${SVNLOOK} uuid $REPOS`
PW_SCRIPT=/home/ci/bin/get_ci_pw.sh
if [ ! -f $PW_SCRIPT ]; then
exit 0
fi
JENKINS_USER=ci
JENKINS_PW=`$PW_SCRIPT`
if [ "x$JENKINS_PW" = "x" ]; then
exit 0
fi
if [ "x${UUID}" = "x" ]; then
exit 1
fi
echo "${UUID} : ${REV} : ${REPOS}" >> /tmp/post_commit.out
/usr/bin/wget \
--connect-timeout=5 \
--tries=2 \
--http-user=$JENKINS_USER --http-password=$JENKINS_PW \
--header "Content-Type:text/plain;charset=UTF-8" \
--post-data "`${SVNLOOK} changed --revision $REV $REPOS`" \
--output-document /tmp/post-commit-wget \
http://ciserver:8888/subversion/${UUID}/notifyCommit?rev=${REV}
exit 0
在上述配置中,我能够在 Jenkins 日志中找到此信息:
2014 年 5 月 27 日下午 3:36:12 信息 org.springframework.web.context.support.StaticWebApplicationContext prepareRefresh 刷新
org.springframework.web.context.support.StaticWebApplicationContext@25e3951:显示名称[Root WebApplicationContext];启动日期 [2014 年 5 月 27 日星期二 15:36:12 EDT];上下文层次的根
2014 年 5 月 27 日下午 3:36:12 信息 org.springframework.web.context.support.StaticWebApplicationContext 获得FreshBeanFactory
应用程序上下文的 Bean 工厂 [org.springframework.web.context.support.StaticWebApplicationContext@25e3951]:org.springframework.beans.factory.support.DefaultListableBeanFactory@9466053
2014 年 5 月 27 日下午 3:36:12 信息 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
在 org.springframework.beans.factory.support.DefaultListableBeanFactory@9466053 中预实例化单例:定义 bean [filter,legacy];工厂层次结构的根
2014 年 5 月 27 日下午 3:36:30 警告 hudson.scm.SubversionRepositoryStatus$JobTriggerListenerImpl onNotify
找不到颠覆工作
2014 年 5 月 27 日下午 3:36:30 信息 jenkins.scm.impl.subversion.SubversionSCMSource$ListenerImpl onNotify
收到来自 47272b4f-b969-45fb-85a3-5cc10733bede 的提交后挂钩,用于路径上的修订版 1,995 [mdeneul/TIJ4/branches/1.1-SNAPSHOT/pom.xml]
2014 年 5 月 27 日下午 3:36:30 信息 jenkins.scm.impl.subversion.SubversionSCMSource$ListenerImpl onNotify
UUID 47272b4f-b969-45fb-85a3-5cc10733bede 没有颠覆消费者
2014 年 5 月 27 日下午 3:36:30 警告 hudson.scm.SubversionRepositoryStatus doNotifyCommit
没有兴趣更改存储库 UUID 47272b4f-b969-45fb-85a3-5cc10733bede 发现