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

19年5月24日(Fri) 17時27分
TOP » UsersWiki » nao-pon » blog » 2012-06-05

RSS of nao-pon/blog
Tue 5 Jun 2012
 

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 として設定した。



Post a new comment

Subject
guestname
Body

Go to richer form

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 2330, today: 1, yesterday: 1
Princeps date: 2012-06-05 (Tue) 21:41:29
Last-modified: 2012-06-05 (Tue) 21:41:29 (JST) (2543d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

Register now! | Lost Password?



メインメニュー
UsersWiki メニュー
付箋メニュー
Fusen(Tag) menu 
Tag Editor
Color: BG:
Name:  Connect line ID:
 
ブックマーク
Please log in to use it.
[Login]
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 44 人がオンライン中 :-)
(UsersWiki : 3 人)

登録ユーザ: 0 & ゲスト: 44

もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 4604


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報
No trackback