Raspberry PiでCI(継続的インテグレーション)

。。。こんなタイトルで書いたけど、実質、ちょっとしたビルドタスクを動かすくらいの話。

仕事として、プログラムを組んでいるわけではないし、ビルド、テスト、デプロイにツールを使うほどの状況ではないのだが、環境構築遊びとして、ビルドツール / CI ツールを検討。

試したたのは、Jenkins と Strider と Rundeck  。。。と Git の hook。

動かしてみると、JenkinsStriderRundeck も 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 してビルドで結構いけそうだけど、そこまでしたくないねえ。

Windows での 常用アプリ

Windows でよく使うアプリ

Git for Windows
ソースコード管理以外にも、Bash 環境がバンドルされていて、ほぼ、これだけで疑似
UNIX/Linux 環境が整う。 サーバー系は Docker かエミュレーター もしくは実機(私の場合は Raspberry Pi 3B)でまかなえばいい感じ。
基本的に ssh もここで繋げてしまうので、ssh クライアント使わなくなった。ssh の設定は C:\Users\ユーザ名\.ssh\config に書いておけば OK。

ConEmu
コンソール環境の強化。 コマンドプロンプト、PowerShell、Git Bash、Docker どれもこのコンソールエミュレーターに集約している。
bash と cmd と ssh(Git bash)をタブで同時使用とか、かなり便利。
日本語を使う場合、安定版(stable)よりも、preview とか alpha の方が良かったりすることも多いので、動作に不満があったら試してみるといい。公式サイトのおすすめは preview らしい。

Docker
Windows に限らないけど、仮想環境は便利。
どーでもいいけど、イラストがかわいい。 イラストのかわいさだと yarn もいいけど。

Atom
これも Windows に限らないけど便利。最近、ようやく Git 機能が入った。 日本語化すると起動が遅いので、英語メニューで使っている。

Cyberduck
ftp, sftp, webdav クライアントとして良く出来ているし、DropBox や Google drive なども同期クライアント無しで集約できるので楽。

Chrome
入っていて当然。 デベロッパーツールは本当に奥が深い。

node.js
node そのものもいいけど、これをベースに作られたツール関係も便利。
http-server とか、ちょっとしたコンバーターとか便利だわ。 awesome node.js h_network21氏による日本語訳 とかで探すと面白い。
この辺は、python とか ruby とか Go でもいいと思うけど。

このあたりと、フォントくらいを入れれば、一通り揃った感は出てくるようになった。
Mac だと、コンソールとか bash とかフォントについては、揃ってるけど、Windows も、かなり環境構築の作業量は減った感がある。

Raspberry Pi で GitHub 的なやつ

最近コードを書くこととはご無沙汰だし、cssとかを除けば、書く予定も特にないのだが、Raspberry Pi の設定ファイルをいじくっていて、やっぱり履歴管理が欲しいなと思ったので、Git で管理していた。

特に ssh の運用で問題は無かったのだが、なんとなく GitHub 的な Web UI が欲しくなったので、Raspberry Pi で動かすことにした。

検討の対象として上がったのは、GitLab, GitBucket, gogs の3つ。

このうち、GitLab に関しては、事前に Windows マシン上の Docker で試したところ、規模が大きすぎる感じがしたので、除外。

GitBucket と gogs については、動かしてみた。

GitBucket に関しては、Java VM だけ入っていれば、とりあえず動く。 サーブレットエンジン上で動かすのがセオリーっぽいけど、本体の war ファイルに Jetty がバンドルされているので、これでも動かせる。

Raspbian では、Java VM は OpenJDK と Oracle JDK がパッケージに入っていて、どちらも選べるが、Oracle JDK の方が動作が軽いので、こちらがお勧め。

動かしてみた感じ、少し重い感じもするが、個人で使用する分には問題なく動く。

メモリの使用量もそれほど凶悪ではない。 Javaのヒープメモリサイズは、Jetty の分も入れても 96MB (-Xms96M -Xmx96M) くらいにしておけば動く感じ。 -verbose:gc を見ていると 64MB でもぎりぎり動きそうだが、落ちたら嫌なのでこの辺か。

Java サーブレットは、以前の仕事で使っていたし、作者が日本人ということもあって好感が持てたが、その後、gogs を試して、その軽さに驚愕し、結局使わなくなった。

gogs も、インストールは簡単。Raspberry Pi 用バイナリ (v2 / armv6) も用意されているし、基本、展開するだけなので、とても簡単。

で、サクサク動く。メモリは数10MBくらいしか使わない。

フォントだけは気に入らなかったので、Custom Template の設定はした。

 

Raspberry Pi で GitHub 風システムを立ち上げるなら、 gogs がお勧めである。