hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

TOP » UsersWiki » nao-pon » blog » 2012-06-05

RSS of nao-pon/blog
2012 6月 5 (火)
 

github へシェルスクリプトで自動 push する健忘録 anchor.png

Page Top

まえおき anchor.png

XOOPS Cube Legacy 向けに naaon さん、domifara さんが中心となって製作している xupdate モジュール。

xupdate は、ファイル数・サイズ共に大きくなりがちで FTP で上げるのに手間と時間が掛かる XOOPS において、その手間と時間を劇的に軽減してくれる素晴らしいモジュール(拡張機能)です。

拙作の HypCommonFunc, HypConf, xpWiki, xelFinder もこの xupdate でとても簡単にインストール・アップデートができるようになっています。
特に、インストールに関しては、面倒なディレクトリのパーミッション設定も漏れなく処理してくれるので、これは本当に便利です。

この xupdate に対応するために、モジュール情報を記載した簡単な設定ファイルが必要になるのですが、私のモジュールの場合は github に置いてありそこから取得するようになっています。この設定ファイルに、バージョン番号を記載しておくと、バージョンアップ時の情報として表示されるようになっているので記載するようにしたのですが、対象モジュールのバージョンアップをした場合に、忘れずに更新する必要があります。

ただ、私はとても忘れっぽい性格なので、きっと忘れるだろうな。 :hammer:

ということで、この作業を自動化することにしました。

Page Top

やっと本題 anchor.png

該当のモジュールの github へ push した場合に、決められた処理を行わせるために Service hooks を設定します。

github のリポジトリの admin ボタンから Service hooks を選択して、WebHook URLs に手元の Web サーバーの hook 用のシェルスクリプト CGI のURL を登録します。

例えば
http://xoops.hypweb.net/path/to/github_hook.cgi

こうして置いて、シェルスクリプト CGI の作成です。

例えば、HypcommonFunc + HypConf

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-
!
 
 
 
 
 
 
 
 
 
 
 
#!/bin/sh
 
echo "Content-type: text/plain"
echo ""
 
cd /path/to/hyp_common
VER=`grep -m1 "\$modversion\['version'\] =" xoops_trust_path/modules/hypconf/xoops_version.php|sed 's/[^0-9.]//g'`
DVER=`grep -m1 "\$version =" xoops_trust_path/class/hyp_common/version.php|sed 's/[^0-9.]//g'`
cd /path/to/xoops_xupdate_store
sed -i 's/\(version = "\)[0-9.]*\(" ;hypconf version\)/\1'$VER'\2/' xupdate_modules.ini
sed -i 's/\(detailed_version = "\)[0-9.]*\(" ;hypcommon version\)/\1'$DVER'\2/' xupdate_modules.ini
git commit xupdate_modules.ini -m "HypConf version $VER"
git push origin master
  1. ローカル git のパスが /path/to/hyp_common になっています。
  2. 7行目で HypConf, 8行目で HypCommonFunc のバージョン番号を取得して変数に入れています。
  3. xupdate の設定ファイル(xupdate_modules.ini)用のローカル git のパスが /path/to/xoops_xupdate_store になっています。
  4. 10, 11行目で xupdate_modules.ini に記載されたバージョン番号を書き換えています。
  5. で、commit して push です。

シェルスクリプトはこれで完了です。ただ、これだけでは問題があります。push する時にパスワードを求められて止まってしまうんですね。

なので、github への接続を ssh ではなく https 接続にしておき CGI の実行ユーザーの .netrc ファイルに github.com の定義を追加します。

※ 安全のために suEXEC を利用して、この CGI 専用のアカウントで CGI を実行できるようにすることをお薦めします。

machine github.com
login username
password pass

これで、http://xoops.hypweb.net/path/to/github_hook.cgi へアクセスして問題なければ、github への該当モジュールの push 時に、バージョン番号に変化があれば、自動で xupdate_modules.ini も更新されるようになるわけです。めでたし、めでたし。

とまあ、簡単な説明ですがこんな感じです。 :-D

Page Top

めでたし、のはずでしたが・・・ anchor.png

うまくいくと思っていたのですが、実際には github への push ができなくて、おまけに コミッター名とメールアドレスが user.name, user.email で設定したものが反映されない。(ローカルの(suEXEC)ログイン名になってる)

試しに、このシェルスクリプトを cron で回すと、期待した通りに動いて push もできる。

悩んだで、試行錯誤した結果 PHP の exec() で sudo -u <ユーザ名> してシェルスクリプトを実行することにしたら上手くいく模様。

visudo で、今回使用するユーザーに対して、利用シェルスクリプトを NOPASSWD として設定した。



トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 314, today: 1, yesterday: 0
初版日時: 2012-06-05 (火) 21:41:29
最終更新: 2012-06-05 (火) 21:41:29 (JST) (4304d) by nao-pon
このページのTopへ
メインメニュー
ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録
最近の更新
#recent(): You called me too much
オンライン状況
167 人のユーザが現在オンラインです。 (6 人のユーザが UsersWiki を参照しています。)

登録ユーザ: 0
ゲスト: 167

もっと...
サイト情報