AWSで継続的インテグレーション 〜 Jenkins編 | アドカレ2013 : CFn #9
渡辺です。
『アドベントカレンダー2013:AWS CloudFormationビッグバンテンプレート』の9日目のエントリーになります。今日はJenkinsサーバをAWSに構築するためのテンプレートです。昨日はくろの(福田)さんの超高速でチャットサーバーを起動! ngIRCd編でした。
Jenkinsとは?
Jenkinsは継続的インテグレーション(CI)のためのデファクトスタンダードとなっているアプリケーションです。JavaのWebアプリケーションとして実装されていますが、単体でダウンロードして簡単に使うことができます。また、RedHat系のLinuxであれば、jenkinsのリポジトリをyumに追加して簡単にインストールすることができます。このように、手軽に導入できるのが指示されている理由のひとつでしょう。
しかし、AWS上で利用する場合、アクセス制御について考慮しなくてはなりません。Jenkinsはデフォルトで、アクセスしたユーザは、プロジェクトの作成・表示・ビルドの実行など、すべての機能を使うことができます。イントラネットで導入するのであればこれでも問題ありませんが、AWSで導入するとなるとセキュリティの設定が必要不可欠です。
オススメする構成
AWSや他のクラウドサービスでJenkinsを導入する場合、次のような構成にすることがオススメです。
- Jenkinsは、8080ポート(デフォルト)で起動する
- インターネット経由では、ApacheなどのWebサーバをProxyとし、Jenkinsにアクセスする
- WebサーバでBasic認証を行う
- GithubやStashなどからビルドフックを行う場合は8080ポートを利用して直接アクセスする
- ビルドフック以外の用途での8080ポートは開放しない
今回作成したテンプレートは、このような構成でAWS上にJenkinsサーバを構築します。
公開テンプレート
テンプレートは、既にVPCを構築しているユーザが既存のVPCに追加でJenkinsサーバを立てる場合の「本番用テンプレート」とVPCも合わせて構築する「お手軽VPC入りテンプレート(デモ用)」のふたつを用意しました。
スタックパラメータ
- VpcId
- EC2を起動するVPCのID(本番用テンプレートのみ)
- SubnetId
- EC2を起動するサブネットのID(本番用テンプレートのみ)
- KeyName
- EC2にログインするためのキーペア名
- InstanceType
- EC2のインスンスタイプ(初期値:t1.micro)
本格的に利用する場合はsmall以上をオススメしますが、後で変更しても良いでしょう。 - BasicAuthUser
- Basic認証で利用するユーザ名(初期値:jenkins)
- BasicAuthPassword
- Basic認証で利用するパスワード
インストールされる設定ファイルなど
Apacheの設定は /etc/httpd/conf.d/jenkins.conf に、Basic認証のファイルは /etc/httpd/.htpasswd となります。こういったファイルも一緒にインストールできるのはCloudFormationの強みですね。
スタック作成後
スタック作成が完了すると、[Outputs]タブにJenkinsサーバのURLが表示されます。
これをクリックしてJenkinsサーバにアクセスしてください。
ちゃんとBasic認証も有効になっていますね。
これで、簡単快適な執事生活のはじまりです。
セキュリティグループの設定
8080ポートはセキュリティグループで作成されます。利用するSCMサービスに合わせてアクセス元を制限してください。
まとめ
AWS CloudFormationビッグバンテンプレート、9日目はJenkinsでした。AWS上のJenkinsサーバであれば必要な時だけ起動し、普段は停止しておくなんて使い方も可能です。Jenkinsを試しに使ってみるには最適なソリューションではないでしょうか?
なお、テンプレートファイルはGitHubで公開しております。PRもあればどんどん送ってください。
それでは、明日もご期待ください。