LoginSignup
26
25

More than 5 years have passed since last update.

Strider でプライベート CI 環境を構築する

Last updated at Posted at 2013-08-24

strider-ss-2.png

著者の Chris Foster さんから許諾を頂き、日本語に翻訳しています。
翻訳元: Creating a private CI with Strider

継続的インテグレーションサーバや継続的デプロイサーバは、今では開発には欠かせないツールとなっています。特に、ウェブアプリケーションの開発においては、各ブランチがすぐにテストできるようにしたり、自動的にデプロイできるような仕組みを作ることは、非常に大切な要素です。Strider は、Node.js で実装された、新しいオープンソースの継続的デプロイツールです。Strider は最近公開されたばかりでまだ至らない点もありますが、現時点 (2013/08/16) では、WebHook やメール通知機能、GitHub 連携、アカウント管理、Heroku へのデプロイ機能、そして、SauceLabs との連携機能が実装されています。

このブログ記事では、Digital Ocean (月5ドルから使える SSD 専用 VPS) を使って、Strider を VPS 上に構築する方法を紹介します。

Digital Ocean のアカウントを作成する

まずは Digital Ocean のアカウントを作成します。もしまだ Digital Ocean のアカウントをお持ちでなかったら、こちらからアカウントを作成して下さい。なお、"Droplets" (Digital Ocean 上の VPS インスタンス) を作成するためには、請求先の情報を登録する必要があるのでご注意下さい。

Ubuntu 13.04 (64-bit版) の droplet を作成する

次に、Strider を動かす droplet (インスタンス) を作成します。今回は、Chris Lea が作った最新版の Node.js を使って Strider を構築するため、64-bit 版の Ubuntu 13.04 を使います。もちろん他のディストリビューションを選択することも可能ですが、その場合は、適切な Node.js のパッケージを各自で探す必要があります。

1.png

SSH でアクセスできるようにする

無事に droplet を作成できた場合、Digital Ocean から root パスワード付きのメールが届きます (訳注: 登録した公開鍵を使って droplet を作成した場合は、root パスワードが無くても大丈夫なので、メールは届きません) 。root パスワードが届いたら、SSH を使って droplet にアクセスします。

2.png

chris@laptop:~# ssh root@198.199.102.245
The authenticity of host '198.199.102.245 (198.199.102.245)' can't be established.
ECDSA key fingerprint is ee:e8:b7:55:dc:e0:cb:ee:99:f1:72:53:62:a2:97:de.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '198.199.102.245' (ECDSA) to the list of known hosts.
root@198.199.102.245's password: 

The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

Welcome to Ubuntu 13.04 (GNU/Linux 3.8.0-19-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
root@strider-ci:~#

なお、root パスワードをそのままにしておくのは危険なので、無事にログインできたら root パスワードを変更しておきましょう。

root@strider-ci:~# passwd
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@strider-ci:~#

システムを最新版にする

公式の Ubuntu リポジトリの Droplet は、もしかしたら最新版ではないかもしれないので、念のためシステムを最新版にしておきます。

root@strider-ci:~# apt-get update
[ Cut for brevity ]
root@strider-ci:~# apt-get dist-upgrade
[ Cut for brevity ]
root@strider-ci:~#

また、必要に応じて再起動して下さい。再起動した場合、droplet との接続が切れますが、もう一度 SSH で接続し直してください。

root@strider-ci:~# reboot 
root@strider-ci:~# 
Broadcast message from root@strider-ci
    (/dev/pts/0) at 22:23 ...

The system is going down for reboot NOW!
Connection to 198.199.102.245 closed by remote host.
Shared connection to 198.199.102.245 closed.
chris@laptop:~# ssh root@198.199.102.245
root@198.199.102.245's password: 
Welcome to Ubuntu 13.04 (GNU/Linux 3.8.0-19-generic x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Fri Jul 26 22:18:46 2013 from 99.199.116.38
root@strider-ci:~#

Node.js をインストールする

Strider は Node.js で実装されているので (また、今回テストするアプリケーションも Node.js 製なので)、Node.js をインストールしましょう!Ubuntu が提供しているパッケージから Node.js をインストールすることもできますが、Node.js は活発に開発されているため、とても古いバージョンの Node.js であることが多いです。そのため、今回は Chris Lea が作ったリポジトリを使って最新の Node.js をインストールします。

root@strider-ci:~# apt-get install software-properties-common 
[ Cut for brevity ]
root@strider-ci:~# add-apt-repository ppa:chris-lea/node.js
You are about to add the following PPA to your system:
 Evented I/O for V8 javascript. Nodejs's goal is to provide an easy way to build scalable network programs
 More info: https://launchpad.net/~chris-lea/+archive/node.js
Press [ENTER] to continue or ctrl-c to cancel adding it
gpg: keyring `/tmp/tmps6w7ka/secring.gpg' created
gpg: keyring `/tmp/tmps6w7ka/pubring.gpg' created
gpg: requesting key C7917B12 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmps6w7ka/trustdb.gpg: trustdb created
gpg: key C7917B12: public key "Launchpad chrislea" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK
root@strider-ci:~#

上記のコマンドを使って無事にリポジトリを登録できたら、Node.js をインストールしてみましょう!Node.js をインストールするためには g++make も必要なので、これらのツールも一緒にインストールします。なお、先ほどリポジトリの情報を更新したので、インストールする前に apt-get update も忘れずに実行しておいてください。

root@strider-ci:~# apt-get update
[ Cut for brevity ]
root@strider-ci:~# apt-get install nodejs g++ make
[ Cut for brevity ]
root@strider-ci:~#

Git をインストールする

npm (Nodejs's Package Manager) を使って Strider をインストールしたり、Strider と GitHub を連携させるために、Git が必要になるので、Git もインストールします。

root@strider-ci:~# apt-get install git
[ Cut for brevity]
root@strider-ci:~#

Strider をインストールする

これで Strider をインストールする準備が整いました。早速 npm を使って Strider をインストールしてみましょう。

root@strider-ci:~# npm install -g strider
[ Cut for brevity ]
/usr/bin/strider -> /usr/lib/node_modules/strider/bin/strider
strider@1.3.1 /usr/lib/node_modules/strider
├── pw@0.0.4
├── cookie@0.0.5
├── ansiparse@0.0.5-1
├── strider-env@0.1.0
├── consolidate@0.8.0
├── step@0.0.5
├── everypaas@0.0.7
├── async@0.2.9
├── underscore@1.5.1
├── swig@0.13.6
├── validator@1.3.0
├── strider-python@0.0.2
├── passport-local@0.1.6 (pkginfo@0.2.3)
├── passport@0.1.16 (pkginfo@0.2.3)
├── bcrypt@0.7.6 (bindings@1.0.0)
├── mailer@0.6.7 (colors@0.6.1, nodemailer@0.1.20)
├── stylus@0.34.1 (debug@0.7.2, mkdirp@0.3.5, cssom@0.2.5)
├── winston@0.5.11 (stack-trace@0.0.7, eyes@0.1.8, colors@0.6.1, pkginfo@0.2.3, async@0.1.22)
├── nomnom@1.6.1 (colors@0.5.1, underscore@1.4.4)
├── passport-github@0.1.4 (pkginfo@0.2.3, passport-oauth@0.1.15)
├── loggly@0.3.11 (timespan@2.2.0, request@2.9.203)
├── connect@2.7.11 (fresh@0.1.0, cookie-signature@1.0.1, pause@0.0.1, qs@0.6.5, bytes@0.2.0, buffer-crc32@0.2.1, debug@0.7.2, formidable@1.0.14, send@0.1.1)
├── moment@2.1.0
├── request@2.25.0 (forever-agent@0.5.0, aws-sign@0.3.0, json-stringify-safe@5.0.0, qs@0.6.5, tunnel-agent@0.3.0, oauth-sign@0.3.0, cookie-jar@0.3.0, node-uuid@1.4.0, mime@1.2.10, form-data@0.1.0, hawk@1.0.0, http-signature@0.10.0)
├── strider-extension-loader@0.2.3 (connect@2.4.6)
├── express@3.1.2 (methods@0.0.1, fresh@0.1.0, range-parser@0.0.4, cookie-signature@1.0.0, buffer-crc32@0.2.1, debug@0.7.2, commander@0.6.1, mkdirp@0.3.5, send@0.1.0, connect@2.7.5)
├── jade@0.34.1 (character-parser@1.0.2, mkdirp@0.3.5, commander@1.3.2, transformers@2.1.0, with@1.1.0, constantinople@1.0.1, monocle@0.1.50)
├── nodemailer@0.5.2 (simplesmtp@0.3.5, mailcomposer@0.2.1)
├── mongoose@3.6.15 (regexp-clone@0.0.1, sliced@0.0.3, muri@0.3.1, hooks@0.2.1, mpath@0.1.1, ms@0.1.0, mpromise@0.2.1, mongodb@1.3.11)
├── connect-mongo@0.3.3 (mongodb@1.2.14)
├── strider-custom@0.2.1 (gitane@0.2.11, libyaml@0.2.2)
├── apres@0.0.2 (request@2.9.203, express@2.5.11)
├── strider-sauce@0.3.1 (request@2.11.4, httpcheck@0.0.1, wd@0.0.32)
├── socket.io@0.9.16 (base64id@0.1.0, policyfile@0.0.4, redis@0.7.3, socket.io-client@0.9.16)
└── strider-simple-worker@0.8.0 (gitane@0.0.7, async@0.1.22, lodash@1.3.1, pty.js@0.2.2, gumshoe@0.2.1, npm@1.2.32)
root@strider-ci:~#

MongoDB のデータベースを作成する

Strider は、メタ情報を MongoDB に保存します。例えば、ユーザや招待コード、リポジトリの情報などです。MongoDB は使うのはそこまで難しくないので、必要であれば、同一のサーバ内に MongoDB をインストールして使っても特に問題ありません。今回は、無料で使えて、かつ、セットアップも簡単な MongoHQ を使います。無料版では 512MB までしか使えませんが、Strider を動かすためには十分な容量です。

こちらの Sign up ページからアカウントを作成して、Strider 用のデータベースを作成してください。

3.png

無事にデータベースが作成できたら、データベースのコンソール画面にリダイレクトされるはずです(まだ Strider の情報が保存されていないので、今は何も情報が入っていません)。MongoDB への URI が表示されると思うので、コチラをメモしておいてください。この URI は、Strider を設定するときに使います。

4.png

GitHub アプリケーションを作成する

GitHub と Strider を連携させるため、GitHub アカウントを使って GitHub アプリケーションを作成する必要があります。GitHub アプリケーションを作成すると、OAuth のトークンを取得できるようになります。このトークンを使って Strider と GitHub を連携させるため、表示されたトークンをメモしておいてください。

GitHub アカウントを持っていれば、GitHub アプリケーションを作成するページから、簡単にアプリケーションを作ることができます。今回は、4000 番のポート番号を使って Strider を動かすため、作成した Droplet の IP アドレスの末尾に :4000 を追加してください。もちろん、他のポート番号を使っても大丈夫です。

5.png

GitHub アプリケーションを作成できたら、コントロールページからトークンを取得してください。コントロールページでは、作成したアプリケーションの ID と Secret が表示されます。これらの ID と Secret は Strider と GitHub を連携させるために必要なので、メモしておきましょう。

6.png

SMTP を設定する

Strider のメール通知機能を使うためには、SMTP サーバにアクセスする必要があります。先ほどの MongoDB と同様に、同一のサーバ内に SMTP を設定しても構いませんが、今回は、セットアップが簡単な外部サービスの Mandrill を使います。このサービスも無料版を提供していて、一般的な Strider では、無料版の制限を超えることはないでしょう。こちらの signup ページから Mandrill というサービスに登録することができます。無事に Mandrill のアカウントが作成できたら、SMTP & API Credentials というページに飛んでください。そのページに表示されている SMTP の情報を使って、Strider のメール通知機能を使えるようにします。

7.png

管理ユーザアカウントを作成する

Strider を立ち上げる前に、Strider にログインするための管理ユーザアカウントを作成する必要があります。というのも、ユーザアカウントを作成しなくても Strider を立ち上げることはできますが、Strider にログインすることができないからです。また、管理ユーザアカウントを1つ作っておけば、ウェブ上から、他のユーザアカウントを作成したり、招待したりすることができるようになります。したがって、まずは1つの管理ユーザアカウントを作成します。アカウントを作成するとき、管理権限を持たせるようにしておきましょう。なお、作成したアカウントは MongoDB に保存されるため、先ほどメモした MongoDB の URI を DB_URI に代入して、strider addUser を実行するようにしましょう。

root@strider-ci:~# DB_URI="メモした MongoDB の URI をココに貼付け" strider addUser
email []: chris.james.foster@gmail.com
Is admin? (y/n) [n]y
Enter password []: ***********

Email:      chris.james.foster@gmail.com
Password:   ****
isAdmin:    y
OK? (y/n) [y]y
27 Jul 00:37:16 - info: Connecting to MongoDB URL: [Your MongoDB URI]
27 Jul 00:37:17 - info: User added successfully! Enjoy.
root@strider-ci:~#

Strider を起動する job を作成する

次に、Strider を簡単に 起動できるようにするため、Strider を起動する job を作成します。最新の Ubuntu には Upstart という機能が備えられているので、今回は、Upstart を使って Strider を起動できるようにします。Upstart を使うと、Strider を簡単にバックグラウンドで走らせることができます。また、起動/停止や、現在の稼働状況を調べるのも簡単になります

今まで準備してきたメモは、Upstart の設定で使います。ポート番号や IP アドレスは打ち間違えないようにしてください。また、SERVER_NAME の末尾に / を加えないように注意してください。

viemacs などのエディタを使って、/etc/init/strider.conf を作成し、次のように書いてください 。また、角カッコ [ ] で囲われたところには、先ほどメモした情報を適宜書き込んでください)。

#!upstart
description "Strider upstart job"

start on startup
stop on shutdown

script
    export PORT=4000
    export DB_URI="[Your MongoDB URI]"
    export GITHUB_APP_ID="[Your Github Client ID]"
    export GITHUB_APP_SECRET="[Your Github Client Secret]"
    export SMTP_HOST="[Your SMTP Host]"
    export SMTP_PORT="[Your SMTP Port]"
    export SMTP_USER="[Your SMTP User]"
    export SMTP_PASS="[Your SMTP Pass]"
    export SERVER_NAME="http://198.199.107.142:4000"
    export STRIDER_CLONE_DEST="/home/strider/builds/"
    echo $$ > /var/run/strider.pid
    exec sudo -u strider \
     DB_URI=$DB_URI SERVER_NAME=$SERVER_NAME GITHUB_APP_ID=$GITHUB_APP_ID \
     GITHUB_APP_SECRET=$GITHUB_APP_SECRET SMTP_HOST=$SMTP_HOST SMTP_PORT=$SMTP_PORT \
     SMTP_USER=$SMTP_USER SMTP_PASS=$SMTP_PASS PORT=$PORT STRIDER_CLONE_DEST=$STRIDER_CLONE_DEST \
     strider >> /var/log/strider.log 2>&1
end script

pre-start script
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/strider.log
end script

pre-stop script
    rm /var/run/strider.pid
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/strider.log
end script

システムに strider ユーザを追加する

上記の設定ファイルを書き込んでいる途中で気づいたかもしれませんが、今回は root ユーザではなく,strider ユーザとして Strider を実行します。これは、万が一 Strider にセキュリティ上の問題が発生した場合でも、クラッカーにルート権限を与えないようにするためです。早速、strider ユーザをシステムに追加してみましょう。

root@strider-ci:~# adduser strider
Adding user `strider' ...
Adding new group `strider' (1000) ...
Adding new user `strider' (1000) with group `strider' ...
Creating home directory `/home/strider' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for strider
Enter the new value, or press ENTER for the default
    Full Name []: 
    Room Number []: 
    Work Phone []: 
    Home Phone []: 
    Other []: 
Is the information correct? [Y/n] 
root@strider-ci:~#

strider ユーザを追加したら、パスワードを使ったログインを禁止しましょう。ログインする時は、sudo -u strider と実行することで strider ユーザにログインできるので大丈夫です。また、パスワードを使った外部からのクラッキングの防止にも繋がります。

root@strider-ci:~# passwd -l strider
passwd: password expiry information changed.
root@strider-ci:~#

Strider を起動する

ここまでうまくいったら、Strider を起動してみましょう。

root@strider-ci:~# start strider
strider start/running, process 1229
root@strider-ci:~#

Strider を停止させたいときは、stop コマンドを実行することで停止させることができます。また、Strider が稼働しているかどうかを確かめたい時は status コマンドを使って調べることができます。なお、Strider のログは /var/log/strider.log に書き込まれるので、もしうまく動かない場合は、このログをチェックしてみてください。

Strider にログインする

ここまでうまくいったら、手元のウェブブラウザから http://[IP アドレス]:[ポート番号] にアクセスしてみましょう!

管理ユーザアカウントを作成するときに使ったメールアドレスとパスワードを入力すると、ログインできるはずです。無事にログインできると、次のようなダッシュボード画面が表示されます。

8.png

Strider にリポジトリを追加する

まだリポジトリを何も追加していないので、ダッシュボード画面は閑散としています。そこで、先ほど設定した GitHub アプリケーションを使って、GitHub アカウントのリポジトリを追加してみましょう。/etc/init/strider.confGITHUB_APP_IDGITHUB_APP_SECRET が正しく設定されていれば、次のようなページに飛べるはずです。/etc/init/strider.conf が正しく設定されていないとエラーが出てしまうので、注意してください。

9.png

正しく設定が行われていれば、次のように、自分の GitHub アカウントがアクセスできるリポジトリの一覧が表示されます。

10.png

どれか1つのリポジトリを選び、右側の ON/OFF のトグルボタンをクリックして追加してみてください。クリックすると、設定画面に飛ぶので、その後はチュートリアルに従って設定してください。無事に設定が終わると、最初のテストが実行され、テスト結果がダッシュボードに表示されます。また、SMTP の設定がうまくできていれば、登録したメールアドレスにもテスト結果が通知されるはずです。

11.png

例えば、Node.js を使ったアプリケーションのリポジトリを登録していれば (訳注: 正確には、アプリケーションのルートディレクトリに package.json があるリポジトリを登録すれば) Strider はそれを検知して、npm test を自動的に実行します。なお、実行するコマンドを変更したい場合は、登録したリポジトリの設定画面から変更することができます。

まとめ

Digital Ocean 上で Strider を動かしている場合、Droplet の Snapshot を作成することができるので、まずはこの時点で Snapshot を取っておくとよいかもしれません。というのも、Strider が今後もしうまく動かなくなった場合でも、現時点の状態までロールバックしたり、必要に応じて (たとえば、メモリ不足などで) Digital Ocean 上のより大きなリソースを持ったサーバに移行することができるからです。

あとは、Strider の機能を使って自由に遊んでみてください。例えば、管理権限を持ったユーザであれば、他のユーザをメールで招待することもできます。また、Heroku の Deploy keys を登録すれば、「テストが通ったら自動的にデプロイする (Deploy on Green)」といった機能も使うことができます。

ただし、Strider は現在開発中のツールであるため、今後も新しい機能やバグ修正が頻繁にリリースされるはずです。Strider に最新版に更新したいときは、root ユーザで npm update -g striderコマンドを実行することで、いつでも更新することができます。

これで Strider の構築は終了です!Strider は将来性のある、刺激的な継続的インテグレーション / 継続的デプロイツールです。もし Strider のセットアップについて何か問題や質問があれば、chris.james.foster@gmail.com まで連絡下さい (訳注: といっても、日本語は分からないと思うので、もし日本語で何か聞きたいことがあれば、@yasulab まで連絡してください) 。

訳者あとがき

Strider 使ってみたら結構面白かったので、Strider の導入部分を抑えた記事を訳してみました。 開発中のため不具合はそこそこ多いですが 、Node.js で書かれているので、何か困ったことがあったり必要な機能があれば、直接内部のコードを弄って付けたり外したりできます。

もし反響があれば、同僚の @hanachin_ と一緒に Strider に追加 / 修正してみた機能の一例などを紹介しようかなーと思います。

それでは、良い週末を!

26
25
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
26
25