LoginSignup
5
6

More than 5 years have passed since last update.

AsakusaFWのプロジェクトをGitHub+Jenkins on AWSで自動ビルド

Last updated at Posted at 2015-11-18

CIの検証用としてAWS上のDockerコンテナ上にJenkinsの環境を立ち上げ、GitHubと連携して自動ビルドさせる。

ビルド対象としては、Hadoop上のバッチを記述するためのフレームワーク、"Asakusa Framework"で構築したサンプルプロジェクト。
フレームワークのバージョンが上がり、以前はMavenベースのビルド方式だったものがGradleベースに変更になっており、それに伴いJenkinsの書き方も変わったので手順メモ。

備考

今回はGitHubとの連携の確認のため、Jenkinsを手っ取り早く動かす方法としてDockerコンテナを選択したが、色々な言語のビルド環境にすることを考えると、コンテナではなくJenkins専用のVMを用意した方が良いと思う

Index

  • 前提環境
  • AWS上のVMとGitHubが通信できるようにするセキュリティグループ設定
  • Dockerコンテナ上でJenkins起動
  • GitHubと連携するJenkinsプロジェクト作成
  • GitHub側の設定
  • AsakusaFrameworkプロジェクトの自動ビルド

前提環境

  • AWS EC2 上のVM (Amazon Linux AMI 2015.03.1)
  • Docker 1.7.1
  • Jenkins 1.625.2 (Docker上のコンテナ)
  • AWSへの登録や仮想マシン登録は終わっている前提
  • GitHubのユーザ登録は終わっている前提

AWS上のVMと通信できるようにするセキュリティグループ設定

以下2つの通信ができるように、AWSマネジメントコンソールで通信を許可する設定をしておく。
(1) GitHubからJenkinsへ通知する際の接続
 GitHubのIPアドレスからの接続を許可
(2) JenkinsのブラウザGUIへの接続(8080番ポート)
 ブラウザからJenkinsにアクセスするPCのパブリックIPアドレスからの接続を許可
例えば以下のようにセキュリティグループの設定をする。
スクリーンショット 2015-11-18 12.22.00.png

※"192.30.252.0/22"2015/11/18時点のGitHubのIPアドレス。 最新の情報はhttps://api.github.com/meta の "hooks"を参照すると分かる。

Dockerコンテナ上でJenkins起動

VMにsshでログイン。
Docker未導入の場合は以下のコマンドを入力すればDockerが導入される。

docker導入~自動起動設定
sudo yum install -y docker
sudo /etc/init.d/docker start
sudo chkconfig docker on
sudo docker -v
 Docker version 1.7.1, build 786b29d/1.7.1

jenkinsはDockerHubで公式の環境構築済みイメージが配布されているため、これを使ってJenkinsコンテナを作る。
この例では、jenkinsのビルド結果を参照しやすくするため、'share_docker/jenkins'というディレクトリをjenkinsのホームディレクトリとしてマウントしている。

jenkinsコンテナ起動
mkdir -p /home/ec2-user/share_docker/jenkins
sudo docker run -d -h jenkinstest --name jenkinstest -p 8080:8080 -v /home/ec2-user/share_docker/jenkins:/var/jenkins_home:rw jenkins
docker起動パラメータ
-h jenkinstest
 > 生成するコンテナのホスト名を'jenkinstest'に設定
--name jenkinstest
 > コンテナ名を指定
-p 8080:8080
 > VMの8080番ポートへの接続をJenkinsの8080番にマッピング
-v /home/ec2-user/share_docker/jenkins:/var/jenkins_home:rw
 > VMのディレクトリをコンテナにマウントして共有

Jenkins氏起動確認

イメージのダウンロードと起動処理でしばし待つ。追加の設定を特にしなくとも、Jenkinsが立ち上がり8080番ポートで待受するので、起動確認にはDockerが動作しているVMの8080版ポートにアクセスする。

なお、接続先はAWS上のVMのため、IPアドレスはVMに割り当てられた"パブリックIP"のアドレスとなる。AWSマネジメントコンソールの「インスタンス」の一覧から確認可能。
以下のような画面が出れば起動は完了。
スクリーンショット 2015-11-18 11.19.56.png

GitHubと連携するJenkinsプロジェクト作成

GitHubとJenkinsを連携する方法はいくつかあるが、今回はJenkinsのプラグインのひとつ、「GitHub Plugin」を使う。

GitHub Pluginの導入

メニュ-から「Jenkinsの管理」>「プラグインの管理」と辿って「GitHub Plugin」をインストールするだけ。
スクリーンショット 2015-11-18 12.32.15.png

依存関係のあるプラグインもまとめて入れてくれる。

スクリーンショット 2015-11-18 12.33.01.png

GitHubから最新版を取得するJenkinsプロジェクトを作成

Jenkinsの新規ジョブを作って保存する。ポイントとしては以下。
-「フリースタイル・プロジェクトのビルド」
-「ソースコード管理」
 GitHub project:自分のプロジェクトのURL
 (GitHubのプロジェクトのページで、"HTTPS clone URL"と記載されているURL)
-ソースコード管理:Git
 Repository URL:自分のプロジェクトのURLの先頭を[https://~]から[git://~」に変更したURL
 Credentials:自分のgithubアカウントの情報を追加&指定
- Branch Specifier (blank for 'any'):*/master
- ビルド・トリガの「Build when a change is pushed to GitHub」にチェック

image1.png

GitHub側の設定

プロジェクトのトップ画面から「Settings」>「Webhooks & services」と辿って、"Add service"ボタンから"Jenkins(GitHub plugin)"を選択する。
スクリーンショット 2015-11-18 12.43.25.png

  • Jenkins hook url:http://[VMのパブリックIP]:8080/github-webhook/ (※末尾に '/' を付け忘れると通らないので注意)
  • Activeにチェック スクリーンショット 2015-11-18 12.56.02.png

Jenkins-GitHubの連携チェック

「Test Service」を押すとJenkinsにテスト通知を送信する。
Jenkins側に通知が(ファイアウォール等でブロックされずに)到着していれば以下のように「GitHub Hook Log」に出力される。
スクリーンショット 2015-11-18 12.55.23.png

AsakusaFrameworkプロジェクトの自動ビルド

Asakusa Gradle Plugin 用プロジェクトテンプレートを使って作ったAsakusaFrameworkプロジェクトであれば、Gradleラッパー(gradlew)がデフォで入っているので、ビルド環境にGradleを入れなおす必要はない。
なので、Jenkinsではプロジェクトの「ビルド」に「シェルの実行」を追加して、以下記述するだけ。
./gradlew clean assemble

スクリーンショット 2015-11-18 13.17.21.png

あとはGitHubに変更がPushされると勝手にビルドが走る。
ただし、この例ではビルド環境にASAKUSA_HOMEの設定やAsakusaの環境を構築していないので、コンパイルのみでテスト(checkタスク)は不可。
スクリーンショット 2015-11-18 13.23.28.png

5
6
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
5
6