AWSで継続的インテグレーション 〜 Jenkins編 | アドカレ2013 : CFn #9

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

渡辺です。

『アドベントカレンダー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ポートは開放しない

jenkins_cfn-2

今回作成したテンプレートは、このような構成でAWS上にJenkinsサーバを構築します。

公開テンプレート

テンプレートは、既にVPCを構築しているユーザが既存のVPCに追加でJenkinsサーバを立てる場合の「本番用テンプレート」とVPCも合わせて構築する「お手軽VPC入りテンプレート(デモ用)」のふたつを用意しました。

Jenkins(本番用)を起動

Jenkins(デモ用)を起動

スタックパラメータ

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が表示されます。

outputs

これをクリックしてJenkinsサーバにアクセスしてください。

basic-auth

ちゃんとBasic認証も有効になっていますね。

welcome-jenkins

これで、簡単快適な執事生活のはじまりです。

セキュリティグループの設定

8080ポートはセキュリティグループで作成されます。利用するSCMサービスに合わせてアクセス元を制限してください。

まとめ

AWS CloudFormationビッグバンテンプレート、9日目はJenkinsでした。AWS上のJenkinsサーバであれば必要な時だけ起動し、普段は停止しておくなんて使い方も可能です。Jenkinsを試しに使ってみるには最適なソリューションではないでしょうか?

なお、テンプレートファイルはGitHubで公開しております。PRもあればどんどん送ってください。

それでは、明日もご期待ください。