0

我们在许多项目构建中使用 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 发现

4

1 回答 1

0

您的 Jenkins JOB 是否配置为轮询到 SVN?从功能上讲,Post 提交挂钩不需要从 CI 轮询到 SVN,但您仍然需要将 JOB 配置为轮询模式,可以保持任何值,例如每天、每周或每年。这样,它会打开 Jenkins JOB 来监听来自 SVN 的提交后调用,因为默认情况下它不监听这些调用。

于 2014-05-24T12:44:20.483 回答