ページへ戻る

− Links

 印刷 

github へシェルスクリプトで自動 push する健忘録 のソース :: XOOPS マニア

UsersWiki:nao-pon/blog/2012-06-05のソース

  
#navi
RIGHT:&rsslink(../);
#boxdate

* github へシェルスクリプトで自動 push する健忘録 [#v6af4849]
RIGHT:&tag(github,プログラミング,シェルスクリプト);

** まえおき [#zc22c229]

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

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

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

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

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

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

** やっと本題 [#s270f393]

該当のモジュールの 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
#code(bash){{
#!/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
}}

+ ローカル git のパスが /path/to/hyp_common になっています。
+ 7行目で HypConf, 8行目で HypCommonFunc のバージョン番号を取得して変数に入れています。
+ xupdate の設定ファイル(xupdate_modules.ini)用のローカル git のパスが /path/to/xoops_xupdate_store になっています。
+ 10, 11行目で xupdate_modules.ini に記載されたバージョン番号を書き換えています。
+ で、commit して push です。

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

なので、github への接続を ssh ではなく https 接続にしておき CGI の実行ユーザーの .netrc ファイルに github.com の定義を追加します。&br;
※ 安全のために 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 

** めでたし、のはずでしたが・・・ [#i7deb40a]

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

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

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

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


RIGHT:&font(90%){&page_comments;};
#navi

  

  • nao-pon/blog/2012-06-05 のバックアップソース(No. All)