ページ更新: 2013-12-24 (火) (2588日前)
関連: ソフト/Continuous Integration (2008-05-14 新規作成) Jenkins (Hudson) のメモ。 目次 情報源 #(リンクは後でまとめるけど、とりあえずメモ) 起動オプションは Winstone Servlet Container や CmdLineOption - winstone - Google Project Hosting や winstone/README.html - GitHub と同じ。オプションの説明はjava -jar hudson.war --helpで表示できる。 Wiki (Confluence? )に詳しい説明(mod_proxyとか、mod_proxy_ajpも)がある。
ソースコードの文字コードが想定と異なっていたら報告する (2012-12-13) #chardet (ソフト/Script言語/Python/chardet) を用いて、ソースコードが SHIFT_JIS を使っていたら報告する処理を書いてみた。 環境と準備
Jenkns のビルド→「シェルの実行」に以下のシェルスクリプトを追加する ## --- SHIFT_JIS を用いているソースコードを見つける cd $WORKSPACE # ソースコードの種別ごとに、文字コードの一覧を作成する find . -name "*.h" -o -name "*.cpp" | xargs /usr/bin/chardet > /tmp/chardet-cpp.log.$$ find . -name "*.py" | xargs /usr/bin/chardet > /tmp/chardet-py.log.$$ # SHIFT_JIS を使っているソースコードの有無を判定する if grep -i SHIFT /tmp/chardet-*.log.$$; then FOUND=1; else FOUND=0; fi ## TODO grepがエラーで終了したとき(exitcode >= 2) も検出すること。 # 作業ファイルを削除する rm -f /tmp/chardet-*.log.$$ # 結果を返す (0= 違反なし、1=違反あり) exit $FOUND grep の返り値は Man page of GREP に記載されている。
Windows の場合は、次のようにする。(コマンドプロンプトで確認済み、Jenkinsでは未確認)
setlocal set FIND=c:\gnuwin32\bin\find set XARGS=c:\gnuwin32\bin\xargs set GREP=c:\gnuwin32\bin\grep set CHARDET=python c:\Python27\Scripts\chardetect.py cd %WORKSPACE% %FIND% . -name "*.h" -o -name "*.cpp" | %XARGS% %CHARDET% > %TEMP%\chardet-cpp.log %FIND% . -name "*.py" | %XARGS% %CHARDET% > %TEMP%\chardet-py.log %GREP% -i SHIFT %TEMP%\chardet-*.log if %ERRORLEVEL% EQU 0 (set FOUND=1) else (set FOUND=0) del /q %TEMP%\chardet-*.log exit /b %FOUND%[編集] テスト対象のWindowsプログラムの異常終了をトラップする (試してない) (2009-06-24) #自動テスト対象のWindowsプログラムの異常終了によるテストの停止の検出・テスト停止の回避のために、 「Windowsプログラムの異常終了をトラップする」方法を調べていた。 で、4ヶ月ほど放置していたら、以下の記事が。正直ありがたい:
以下、当時のチケットに書いたリンクより:
Apacheの背後でHudsonを動かす (2008-05-14) #この作業の目的は次の2つ。
Hudson 1.213 (安定版, 2008年5月2日) 、OSはDebian GNU/Linux 4.0 (Etch) と Windows XP Professional SP3 の2つで試した。 (なお、Debian では、自分で /etc/init.d/ スクリプトを書くのが面倒になったので Java Service Wrapper (Linux x86 32-bit Community 3.3.0) のテストも同時にやったが、Java Service Wrapper 経由だと転ける。未解決。java -jar hudson.war なら問題なし。) Hudsonにアクセスできること、認証が使えること確認済み。 できればHudsonを丸ごと認証を書けるのではなく、設定画面とか、ソースコード(ワークスペース閲覧)とかだけ認証を掛けたい。 面倒なので追求してないけど。(HudsonでProxyPassとかの説明が書いてあるWikiにちょこっとだけ載ってたと思うけど) [編集]mod_proxy + mod_proxy_http でhttpPortで接続する場合 #http://ホスト名/hudson → http://127.0.0.1:8080/hudson に送る場合 Hudsonの起動方法 java -jar hudson.war --prefix=/hudson --httpPort=8080 --httpListenAddress=127.0.0.1 --ajp13Port=-1
Windowsで試してみた: C:> java -jar hudson.war --prefix=/hudson --httpPort=8080 --httpListenAddress=127.0.0.1 --ajp13Port=-1 [Winstone 2008/05/14 22:00:53] - Beginning extraction from war file : (略) [Winstone 2008/05/14 22:00:54] - Winstone Servlet Engine v0.9.10 running: controlPort=disabled [Winstone 2008/05/14 22:00:54] - HTTP Listener started: port=8080 Apache 2.2のmod_proxyとmod_proxy_httpを有効にする。
httpd.confは次のようにする <Location /hudson> Order allow,deny Allow from all # (略:ここに認証の処理を入れる) # HudsonのhttpPortを有効にしているときはこれを使う ProxyPass http://127.0.0.1:8080/hudson ProxyPassReverse http://127.0.0.1:8080/hudson </Location>[編集] mod_proxy + mod_proxy_ajp、ajp13Portで接続する場合 #http://ホスト名/hudson → ajp://127.0.0.1:8009/hudson に送る場合 Hudsonの起動方法 java -jar hudson.war --prefix=/hudson --ajp13Port=8009 --ajp13ListenAddress=127.0.0.1 --httpPort=-1
Windowsで試してみた: C:> java -jar hudson.war --prefix=/hudson --ajp13Port=8009 --ajp13ListenAddress=127.0.0.1 --httpPort=-1 [Winstone 2008/05/14 22:03:58] - Beginning extraction from war file : (略) [Winstone 2008/05/14 22:03:59] - Winstone Servlet Engine v0.9.10 running: controlPort=disabled [Winstone 2008/05/14 22:03:59] - AJP13 Listener started: port=8009 Apache 2.2のmod_proxyとmod_proxy_ajpを有効にする。 httpd.confは次のようにする <Location /hudson> Order allow,deny Allow from all # (略:ここに認証の処理を入れる) # Hudsonのajp13Portを有効にしているときはこれを使う ProxyPass ajp://127.0.0.1:8009/hudson ProxyPassReverse ajp://127.0.0.1:8009/hudson </Location>[編集] HudsonTracPluginとの連携メモ(未完成)(2008-05-15) #注意:この項目は後で別の場所に移すつもり。 HudsonTrac 0.1を使用。(svnで取得した物。zipは使わなかった) プラグインの設定
httpd.confの設定
<Location "/hudson"> # (1) Digest認証 AuthType Digest AuthName "SAMPLE" AuthUserFile "/path/to/htdigest" Require valid-user # (2) IPベースの認証 Order allow,deny Allow from xxx.xxx.xxx.xxx (このPCのIPアドレス。ホスト名でもいいけどApacheにDNS逆引きの設定を追加すること。) # (3) (1)と(2)のいずれかの条件を満たせば、アクセスを許可する Satisfy Any # HTTP経由 # ProxyPass http://127.0.0.1:8080/hudson # ProxyPassReverse http://127.0.0.1:8080/hudson # AJP13経由 ProxyPass ajp://127.0.0.1:8009/hudson ProxyPassReverse ajp://127.0.0.1:8009/hudson </Location> 自分はTracのhtdigestは全プロジェクトで共通にしているので、こんな感じで。 [編集]ごたく(まとめてない) #Hudsonのワークスペースに存在するソースコードを、Hudson経由でダウンロードすることが可能。 これを、svn authzの粒度(リポジトリ毎、リポジトリ内のディレクトリ毎)でアクセス制限をかけるのは、 少々面倒だと思う。(少なくとも上記の<Location>や<LocationMatch>では) もっとも、自分はCloverやCoberturaを使うのだけど、こちらのレポートにも全ソースコードが表示されるので、 そもそもHudson側を止める必要があるだけでは不十分なのだけど。 (いまのところ、ログイン権限を持つ人はソースコードを閲覧できる、という運用にしているので、困ってないけど。 なお、コミット権限はプロジェクトごとに管理してる) なお、職場で Ant + findbugs, checkstyle, junit, cobertura, clover (2.2.1) を動かしてみた。うまくいった。しばらく様子を見てみる。 jdepend (textレポート, Graphvizによる図) のプラグインがないのが一寸残念。 Hudsonのプロジェクトの作成と設定は制限したい。 /hudson/manage, newJob,... を特定の人だけが操作できるように。 設定例はHudsonのwikiにあったはず。 [編集]Subversionのパスワードを変更したら、Hudsonの方に反映しないと、Hudsonが重くなる (2008-10-29) #環境:
Hudsonが使っているSubversionのパスワードを変更した。 Hudsonスレーブ (Linuxがいくつか、Windowsがいくつか) の方は1つ1つログインして「svn log -l 2 http://svn-server/svn/project」を実行して新しいパスワードを入力した。 この状態で、しばらくすると、Hudsonマスター兼Subversionリポジトリサーバがやたら重い。htopするとこうなった。 1 [#####################################***99.3%] Tasks: 130 total, 5 running 2 [##################################******92.7%] Load average: 1.98 1.89 8.37 Mem[||||||||#**************************327/2026MB] Uptime: 7 days, 15:52:00 Swp[| 0/2855MB] PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 3689 hudson 20 0 737M 236M 10440 S 100. 18.0 1:03.02 java -jar /var/hudson/bin/hudson.war --httpPort= 3532 www-data 20 0 273M 27044 5280 S 43.0 2.0 0:54.11 /usr/sbin/apache2 -k start 3533 www-data 20 0 266M 23272 5352 S 39.7 1.7 0:45.11 /usr/sbin/apache2 -k start 3800 hudson 20 0 737M 236M 10440 R 30.5 18.0 0:04.03 java -jar /var/hudson/bin/hudson.war --httpPort= 4655 hudson 20 0 737M 236M 10440 R 19.9 18.0 0:00.78 java -jar /var/hudson/bin/hudson.war --httpPort= 3801 hudson 20 0 737M 236M 10440 R 17.2 18.0 0:09.69 java -jar /var/hudson/bin/hudson.war --httpPort= 3798 hudson 20 0 737M 236M 10440 R 14.6 18.0 0:16.63 java -jar /var/hudson/bin/hudson.war --httpPort= 3700 hudson 20 0 737M 236M 10440 S 11.9 18.0 0:01.43 java -jar /var/hudson/bin/hudson.war --httpPort= 3701 hudson 20 0 737M 236M 10440 S 10.6 18.0 0:01.39 java -jar /var/hudson/bin/hudson.war --httpPort= 3702 hudson 20 0 737M 236M 10440 S 5.3 18.0 0:03.67 java -jar /var/hudson/bin/hudson.war --httpPort= 3555 www-data 20 0 273M 26968 5280 S 5.3 2.0 0:02.33 /usr/sbin/apache2 -k start 3541 www-data 20 0 273M 26968 5280 S 2.6 2.0 0:02.27 /usr/sbin/apache2 -k start 3569 www-data 20 0 266M 23272 5352 S 2.6 1.7 0:01.88 /usr/sbin/apache2 -k start 3556 www-data 20 0 273M 26968 5280 S 2.6 2.0 0:02.01 /usr/sbin/apache2 -k start 3559 www-data 20 0 266M 23272 5352 S 2.6 1.7 0:01.97 /usr/sbin/apache2 -k start HudsonがSubversionをポーリングするときに、なんか負荷がかかる処理に落ち込んでいる? Hudsonでパスワードを変更する手順がわからなかったので、今回は乱暴にもhudson.scm.SubversionSCM.xmlを消去してみた。 最初に、Hudsonを停止して、hudson.scm.SubversionSCM.xml を消して、Hudsonを起動した。 次に、Hudsonのタスクの設定を1つ開き、Subversionアクセス用のユーザ名とパスワードを入力して、保存した。 これで、以前の負荷に戻ったようだ。 [編集]Hudsonのslaveを半自動更新する (Unix編) (2009-02-23) #2009-10時点では、SSH Slaves plugin - hudson - Hudson Wiki を使えば、以下の手順は不要になる。 sshで「マスターでコマンドを実行してスレーブを起動」している場合、 「マスターでコマンドを実行してスレーブを起動」にて、新しいスレーブを得ればよい。 「Hudson > nodes > スレーブ名」の「設定」にて、
スレーブ側 /var/hudson/slave.sh(エラーチェックがいい加減なので、もっとちゃんとすべき): #!/bin/sh ## update slave agent if [ -e hudson.war ]; then rm hudson.war; fi wget -nv --no-proxy http://master/dav/Hudson/hudson.war if [ -e slave.jar ]; then rm slave.jar; fi unzip -p hudson.war WEB-INF/slave.jar > slave.jar if [ -e hudson.war ]; then rm hudson.war; fi ## invoke slave agent java -Xmx512m -jar /var/hudson/slave.jar なお、Windowsでも同様のことを試みたが、うまくいかなかった。Hudson 1.250〜1.260くらいのころ。
|