LoginSignup
2
2

More than 3 years have passed since last update.

【ハッカソン】RaspberryPi にCDできるツールを作った件について【便利ツール】

Last updated at Posted at 2020-01-18

はじめに

最近のwebアプリケーション開発ではCI(Continuous Integration)やCD(Continuous Delivery)が充実していて、リモートリポジトリにpushすれば自動的に本番環境が更新されるので便利ですよね

でも、本番環境がローカル端末だった場合は、CIツールにCDしてもらうわけにもいかず、リモートの変更を毎回pullしなきゃいけないので面倒くさい

ましてやハッカソンみたいな時間がない中で 本番環境がRaspberryPiの場合、RaspberryPiでの開発はどころかコマンドを打つ手間も減らしたい

ということで、RaspberryPiに仕込んでおけばリモートリポジトリが更新されるたびにpullしてくれるCDツール、CanDyPi を作りました!

GitHub
PyPI

これで来年は最優秀賞間違いなし

CanDyPi

CanDyPi is a Continuous Delivery tool for raspberry Pi.

candypi_structure.png.001.png

作りは簡単。GitHubのwebhook機能を使って、RaspberryPiからforwardingしたngrokのエンドポイントにwebhookをひっかけます。CanDyPiがリポジトリ更新のメッセージを受け取ったら、pullコマンドを実行して最新のソースに更新します。

CanDyPiはpythonで書かれていて、サーバにflask・git操作にgitpythonを使っています。

使い方

事前準備

  • python 3系
  • ngrok
  • git
  • GitHubのリポジトリ

手順

4ステップで使えます

1. ラズパイで、gitのSSH接続

SSH設定にしないと、pullの度にパスワードを入力しなきゃいけないので、ラズパイ操作から解放されません・・・

この辺りの記事が参考になります。
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~

2. ラズパイで、CanDyPiのインストール&実行

pipでインストールできます。
㊟python3系でインストール&実行してください

$ pip install candypi

実行も簡単!
CDしたいリポジトリのパスを引数に与えてください。
(デフォルトでは、50000ポートで立ち上がります)

$ candypi /Users/tiwasa/sample_project

3. ラズパイで、ngrokの起動

candypiを起動したポートを指定して、ngrokを起動してください。

$ ngrok http 50000

ngrok by                                      (Ctrl+C to quit)

Session Status                online                                            
Account                       XXXXXXXX (Plan: Free)                             
Version                       2.2.8                                             
Region                        United States (us)                                
Web Interface                 http://127.0.0.1:4040                             
Forwarding                    http://XXXXXXXX.ngrok.io -> localhost:50000        
Forwarding                    https://XXXXXXXX.ngrok.io -> localhost:50000 

4. GitHubで、webHooks設定

CDしたいリポジトリにwebhookを登録します。
GitHubのSettings -> Webhooksで、add webhookのPayload URLに、ngrokの Forwarding https://XXXXXXXX.ngrok.io -> localhost:50000 表示されたhttpsのアドレスを入れてadd webhook してください。

(その他の項目はdefaultのままで大丈夫です。)

5. 完成

CDしたいリポジトリのmasterブランチに更新が発生すると、ラズパイ内のローカルリポジトリでpullコマンドが走って、最新になります。

さいごに

年末年始に作ったので、私自身もまだ実践投入していません。なんか手ごろなハッカソンないかな~?

もし使っていて気が付いたことがあったら、GitHubのissueか、このページのコメント欄に書いていただけると回答します。

ちなみに、ラズパイと同じローカルネットワーク上に開発用PCを配置できるんだったら、vscodeのリモートデベロップのほうが便利だと思います。ま、会場次第で別のLANに配置される可能性もあるから、CanDyPiの存在価値もある

・・・と

・・・思いたい

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2