8

私はJenkinsでCIを動かそうとしています。これまで、私たちの環境では 2 つのスケジュールされたビルドを実行してきましたが、開発スタッフは CI を機能させたいと考えています。Jenkins Subversion Plugin wiki ページに記載されている手順に従いました。

https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin

これにより、コマンド ラインで問題なく実行されるスクリプトにたどり着きましたが、Subversion で (TortoiseSVN クライアントを使用して) 変更をコミットすると、コミットがハングしたように見え、Jenkins に通知が表示されません。

これが私のスクリプトです:

#!/bin/sh

REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
XSLT_FILE=/var/www/svn/codelog.xslt
RSS_FILE=/var/www/html/code_all.rss
MAX_RESULTS=40

/usr/bin/wget \
  --auth-no-challenge \
  --no-check-certificate \
  --header "Content-Type:text/plain;charset=UTF-8" \
  --post-data "`svnlook changed --revision $REV $REPOS`" \
  --output-document "-" \
  --timeout=2 \
  https://192.168.100.16/subversion/${UUID}/notifyCommit?rev=$REV
svn log "file://$REPOS" --limit "$MAX_RESULTS" -v --xml | xsltproc "$XSLT_FILE" - > "$RSS_FILE"

RSS フィードは既にスクリプトに含まれていました。それは1年以上働いています。

問題があった場合に備えて、ファイルのアクセス許可も更新しました。

[root@Subversion hooks]# ls post-commit -ao
-rwxrwxr-x 1 apache 530 Jul 17 06:27 post-commit
4

5 に答える 5

5

Jenkins でプッシュ モードを有効にするには、ジョブの構成ページでPoll SCMビルド トリガーを有効にする必要があります。SCM の変更が発生するたびにジョブをビルドする必要があることを Jenkins に伝えます。

ポーリングを行う必要がない (フックから情報を取得する) ため、フィールドを空白のままにしておくことができます。

于 2012-07-17T12:40:18.640 に答える
2

あなたのURLを見てください。Jenkinsはサーブレットコンテナで実行されるWebアプリケーションであるため、次のアプリケーションが機能する必要があります。

http(s):// server_name:server_port / application_name / subversion / $ {UUID} / notifyCommit?rev = $ REV "

アイデアは合格することです

"subversion / $ {UUID} / notifyCommit?rev = $ REV"

適切な場所に。

于 2013-02-26T16:13:41.277 に答える
2

タイムアウトを増やしてみてください -- 2 秒では... 短すぎます。

これは私のために働くものです:

/usr/bin/wget --http-user=jenkins \
              --http-passwd=passwordGoesHere \
              --header "Content-Type:text/plain;charset=UTF-8" \
              --post-data "`svnlook changed --revision $REV $REPOS`" \
              --output-document "/var/log/svn/svn-notify-commit-post" \
              --timeout=10 \
              --read-timeout=10 \
              --tries=2 \
              "http://jenkins:8082/jenkins/subversion/${UUID}/notifyCommit?rev=$REV" \
              >> /var/log/svn/svn-notify-commit-post.log 2>&1

/var/log/svn(適切なユーザーが所有するディレクトリがあることを確認してください)。

また、SCM ポーリングを有効にして、のような cron ルールを設定し*/30 * * * *ます。

于 2012-07-17T14:01:58.853 に答える
1

私は SVN Plugin ページの書き方が好きではありませんでした。物事を機能させるには、SVN で Post Commit Hook を設定する必要があると言うのは読みやすいです。あなたはそうしない!

Jenkins ボックスには約 10 のビルドがあります。それらはすべて SVN リポジトリにリンクされており、すべて SVN リポジトリの変更によってトリガーされます。それらのどれも、SVN で Post Commit フックを使用する必要があることに依存していません。

これを行うために、スケジュールに従って単に「SCM をポーリング」するようにビルドを構成しました。「コミット」ビルドは「*/5 * * * *」のスケジュールを使用します。これは 5 分ごとにポーリングします。私たちの「毎日の」ビルドは「1 1 * * *」のスケジュールを使用するため、変更があった場合、ビルドは午前 1:01 に開始されます。

于 2012-07-17T15:11:47.563 に答える
0

SELinux が有効になっているかどうかを確認しましたか?

私は同じ問題を抱えていて、ここに解決策を書きましたhttps://stackoverflow.com/a/15408506/2169568

私が得ていたエラーは、URLに接続できないというものでした(ただし、コマンドラインから呼び出すと機能しました)。

于 2013-03-14T12:06:52.110 に答える