0

多くのプロジェクトのビルドには、Subversion 1.8.8 と Jenkins 1.509.4 (Subversion v2.3 プラグインを使用) を使用しています。会社のポリシーでは認証が必要であるため、Jenkins 内では、LDAP セキュリティ レルムと、ユーザー グローバルおよびプロジェクト認証用のプロジェクト ベースのセキュリティ マトリックスを使用しています。SVN post-commit フックは、今回のために作成された 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 PM INFO org.springframework.web.context.support.StaticWebApplicationContext prepareRefresh リフレッシュ中

org.springframework.web.context.support.StaticWebApplicationContext@25e3951: 表示名 [ルート WebApplicationContext]; 開始日 [2014 年 5 月 27 日火曜日 15:36:12 EDT]; コンテキスト階層のルート

2014 年 5 月 27 日 3:36:12 PM INFO org.springframework.web.context.support.StaticWebApplicationContext getsFreshBeanFactory

アプリケーション コンテキストの Bean ファクトリ [org.springframework.web.context.support.StaticWebApplicationContext@25e3951]: org.springframework.beans.factory.support.DefaultListableBeanFactory@9466053

2014 年 5 月 27 日 3:36:12 PM INFO org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons

org.springframework.beans.factory.support.DefaultListableBeanFactory@9466053 でのシングルトンの事前インスタンス化: Bean の定義 [filter,legacy]; ファクトリ階層のルート

2014 年 5 月 27 日 15:36:30 警告 hudson.scm.SubversionRepositoryStatus$JobTriggerListenerImpl onNotify

Subversion ジョブが見つかりません

2014 年 5 月 27 日 3:36:30 PM INFO jenkins.scm.impl.subversion.SubversionSCMSource$ListenerImpl onNotify

47272b4f-b969-45fb-85a3-5cc10733bede から、パス [mdeeaul/TIJ4/branches/1.1-SNAPSHOT/pom.xml] のリビジョン 1,995 のポストコミット フックを受け取りました。

2014 年 5 月 27 日 3:36:30 PM INFO jenkins.scm.impl.subversion.SubversionSCMSource$ListenerImpl onNotify

UUID 47272b4f-b969-45fb-85a3-5cc10733bede の Subversion コンシューマはありません

2014 年 5 月 27 日 15:36:30 警告 hudson.scm.SubversionRepositoryStatus doNotifyCommit

リポジトリ UUID 47272b4f-b969-45fb-85a3-5cc10733bede への変更に関心がありません

4

1 に答える 1

0

Jenkins JOB は SVN にポーリングするように構成されていますか? 機能的には、Post commit フックは CI から SVN へのポーリングを必要としないはずですが、JOB をポーリング モードに設定する必要があり、毎日、毎週、または毎年などの任意の値を保持できます。このようにして、デフォルトではこれらの呼び出しをリッスンしないため、Jenkins JOB を開いて SVN からのコミット後の呼び出しをリッスンします。

于 2014-05-24T12:44:20.483 に答える