。。。こんなタイトルで書いたけど、実質、ちょっとしたビルドタスクを動かすくらいの話。
仕事として、プログラムを組んでいるわけではないし、ビルド、テスト、デプロイにツールを使うほどの状況ではないのだが、環境構築遊びとして、ビルドツール / CI ツールを検討。
試したたのは、Jenkins と Strider と Rundeck 。。。と Git の hook。
動かしてみると、Jenkins も Strider も Rundeck も Raspberry Pi には重すぎた。。。(結論早いw)
一応、Raspberry Pi 3B だったら、多少の我慢で動くけど、アクションを起こしたときにしか動かないツールに、普段から400~600MBものメモリを使う気にもならず、結局、あきらめた。
Strider が、若干軽いが、ほんの少しの違い。
で、結局、Git の hook を使うことにした。 同期処理になってしまうけど、gogs の常駐以外にメモリも使わないし、元々 gogs が動いていたのだから、追加コストなしで動作というのは大きい。
hookの注意点としては、
- gogs / Git のユーザで動くので、それでできるように仕掛けておく必要がある。 事前に `sudo su – git` して、一連の操作を手動で実行できるか試すといい。
- スクリプト中で、Git を使う場合、例えばワーキングディレクトリ内にいったん、clone もしくは pull したりするときは git に
--git-dir=.git
のように Git ディレクトリの明示指定が必要。 - 普段ログインするユーザではないので、PATH とか ~/.ssh/id_rsa とかがいつもと違うので注意。
ということくらいか。 スクリプト中でエラーになると、クライアント側の push の際に画面にエラーが出るので、よく見ること。
もし、非同期でやりたかったら、gogs で Webhook を飛ばして、github-webhook-handler を使って、node.js で書いたコードで受けるのが Raspberry Pi らしいかな。ビルドに失敗したら、パトランプ点灯とか(笑)
cron で数分おきに監視する手もあるけど。 しょぼいが。。。
マルチユーザーで重なった時に、キューイングする事とかは、全く考えてません。悪しからず。
ワーキングディレクトリをタイムスタンプ名で作って clone してビルドで結構いけそうだけど、そこまでしたくないねえ。
Tweet