Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn Jenkins Subversion提交后钩子与身份验证-仍然需要匿名作业读取?_Svn_Jenkins_Post Commit Hook - Fatal编程技术网

Svn Jenkins Subversion提交后钩子与身份验证-仍然需要匿名作业读取?

Svn Jenkins Subversion提交后钩子与身份验证-仍然需要匿名作业读取?,svn,jenkins,post-commit-hook,Svn,Jenkins,Post Commit Hook,我们正在使用Subversion 1.8.8和Jenkins 1.509.4(带有Subversion v2.3插件)进行我们的许多项目构建。公司策略需要身份验证,因此在Jenkins中,我们使用LDAP安全域和基于项目的用户全局安全矩阵以及项目授权。我们的SVN post commit hook通过使用一个专门为此创建的LDAP服务帐户与Jenkins对话。在实现这一点时,我意识到,为了让钩子真正触发作业,即使发送了有效的用户名/密码,在安全页面上将该帐户列为具有对Jenkins的完全访问权限

我们正在使用Subversion 1.8.8和Jenkins 1.509.4(带有Subversion v2.3插件)进行我们的许多项目构建。公司策略需要身份验证,因此在Jenkins中,我们使用LDAP安全域和基于项目的用户全局安全矩阵以及项目授权。我们的SVN post commit hook通过使用一个专门为此创建的LDAP服务帐户与Jenkins对话。在实现这一点时,我意识到,为了让钩子真正触发作业,即使发送了有效的用户名/密码,在安全页面上将该帐户列为具有对Jenkins的完全访问权限是不够的;仍然需要匿名作业读取访问权限。还有人指出,服务帐户根本不需要任何明确的访问权限。对于所讨论的作业,将启用轮询。显式计划(我尝试了H 0 1*)和未尝试显式计划

这种配置的副作用是Jenkins的有效用户可以看到服务器上的每个作业。这是一个问题,因为这为用户提供了200多个作业,而大多数用户只关心其中的一小部分

是否有一种配置允许对提交后钩子进行身份验证,而不在Jenkins内启用任何匿名访问

作为参考,我们的post-commit钩子如下所示:

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 准备新鲜的

org.springframework.web.context.support。StaticWebApplicationContext@25e3951: 显示名称[根WebApplicationContext];启动日期[5月27日星期二] 2014年美国东部时间15:36:12];上下文层次结构的根

2014年5月27日下午3:36:12信息 org.springframework.web.context.support.StaticWebApplicationContext 获得新鲜豆工厂

应用程序上下文的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 预实例化单体

在中预实例化单例 org.springframework.beans.factory.support。DefaultListableBeanFactory@9466053: 定义bean[过滤器,遗留];工厂层次结构的根

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收到提交后钩子 一九九五年道路修订 [mdeneaul/TIJ4/branchs/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 不承诺

对更改存储库UUID不感兴趣 发现47272b4f-b969-45fb-85a3-5cc10733bede


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

在适当的作业上启用轮询,而没有设置轮询计划。我会调整我的问题。你有没有尝试过像每周或每年这样的计划?提交后是否仍需要只读用户?Bcoz我没有通过这样的配置传递任何用户详细信息frm我的post commit,但我的jenkins仍然是安全的。尝试设置一个轮询计划n post commit在测试环境中不需要只读用户,我启用了用户“ci”的完全管理访问权限,并在作业中添加了一个特定的每月轮询计划。除非启用匿名作业读取访问,否则该作业仍然无法生成,这是我在生产中所拥有的,也是我正在尝试修复的。我将在原来的问题上补充这一点和一些补充信息。