自動テスト・自動デプロイ体感ハンズオン
日本仮想化技術株式会社
本日の内容
• 事前準備環境の確認
• 環境構築
– 仮想マシンの構成・設定
– GitBucketとJenkinsの連携設定
• 自動テスト・自動デプロイ体験
事前準備
• VirtualBoxのインストール
• Vagrantのインストール
• ハンズオン用Gitリポジトリのclone
• ハンズオン用Vagrant Boxのダウンロード
$ git clone github.com/virtualtech/ci-handson
ディレクトリ構成
ci-handson
box
jenkins.box
gitbucket.box
production.box
環境構築
1. 仮想マシンを構成する
2. GitBucketの設定をする
3. Jenkinsの設定をする
4. GitBucketとJenkinsの連携設定をする
1. Jenkins側の設定
2. GitBucket側の設定
仮想マシンを構成する
• 今回の構成について
• Vagrantを用いた仮想マシンの構成
今回の構成
Gitサーバー : GitBucket
CI/CDサーバー : Jenkins
デプロイ先サーバー: Tomcat
ネットワーク構成
VM VM VM
192.168.99.0/24
.2 .3 .4
host
.1
Vagrantを用いた仮想マシンの構成
$ cd box
$ vagrant box add –-name gitbucket box/gitbucket.box
$ vagrant box add –-name jeknins box/jenkins.box
$ vagrant box add –-name production box/production.box
$ cd ../ci-handson
$ vagrant up
GitBucketの設定をする
1. GitBucketにアクセスする
– http://192.168.99.2
2. サインインする
3. リポジトリを作成する
サインインする
Sign inをクリック
username root
password root
リポジトリを作成する
+ → New Repository
リポジトリの名称を入力する
Repository name: sample
Create repository
リポジトリ作成完了画面
Jenkinsの設定をする
1. Jenkinsにアクセスする
– http://192.168.99.3:8080
2. JDK/Mavenの設定をする
Jenkinsの管理画面を開く
Jenkinsの管理
Jenkinsの設定をする
Global Tool Configuration
JDK/Mavenの設定をする
1. JDK追加をクリック
2. 名前に「jdk8」と入力
3. 自動インストールのチェックを外す
4. JAVA_HOMEに「 /usr/lib/jvm/java-1.8.0-openjdk」と入力する
1. Maven追加をクリック
2. 名前に「maven3.0.5」と入力
3. 自動インストールのチェックを外す
4. MAVEN_HOMEに「/usr/share/maven」と入力する
Save
設定完了するとトップ画面に戻ります
GitBucketとJenkinsの連携設定
1. Jenkins側の設定
2. GitBucket側の設定
Jenkins側の設定
1. 必要なプラグインを導入する
2. Gitサーバーの情報を設定する
3. ジョブを作成する
4. 認証情報を登録する
必要なプラグインを導入する
プラグインの管理
プラグインを選択する
1.「利用可能」タブ
2.「フィルター」で絞り込み
3.インストールするプラグインにチェックを入れる
4.ダウンロードして再起動後にインストール
インストール画面
「インストール完了後、ジョブがなければJenkinsを再起動する」
にチェックを入れる
インストール完了・再起動するとトップ画面に戻ります
インストールするプラグイン
• GitHub Organization Folder Plugin
• GitBucketと連携するため
• Pipeline
• テスト・デプロイ手順をテキストで管理するため
• SSH Agent Plugin
• デプロイでSCPを使用するため
Gitサーバーの情報を設定する
システムの設定
Gitサーバーの情報を入力する(1)
1. 「Add GitHub Server」 をクリック
2. API URL: http://192.168.99.2/api/v3/
3. Credentials 「追加」→Jenkins
保存
Gitサーバーの認証情報を入力する
ユーザー名 root
パスワード root
追加
Gitサーバーの情報を入力する(2)
1. GitHub Enterprise Servers の 「追加」をクリック
2. API endpoint: http://192.168.99.2/api/v3/
3. Name: GitBucket
Gitサーバーの情報を入力した結果
Credentialsは「なし」でOK
Test connectionはクリックしない
ジョブを作成する
新規ジョブ作成
ジョブの名前と形式を決める
GitHub Organization を選択
名前は「sample」と入力
OK
ジョブの詳細を設定する
API endpoint GitBucket
Owner root
Scan credentials root/***
保存
認証情報を登録する
認証情報
認証情報のスコープを選択
「Jenkins」を選択
認証情報のドメインを選択
「グローバルドメイン」を選択
認証情報を追加する
認証情報の追加
秘密鍵を設定する
種類 SSHユーザー名と秘密鍵
ユーザー名 root
秘密鍵 「直接入力」を選択
鍵 pki/id_rsaをコピー
保存
秘密鍵登録後
GitBucket側の設定
リポジトリ名「sample」をクリック
設定画面へ移動する
「Settings」をクリック
webhookを追加する
「Service Hooks」タブ
「Add webhook」をクリック
webhookのURLを入力する
Payload URL: http://192.168.99.3:8080/github-webhook/
Add webhook
webhook登録後
自動テスト・自動デプロイ体験
1. サンプルを解凍する
2. Jenkinsfileの認証情報を書き換える
3. テストを書く
4. 対応するコードを書く
サンプルを解凍する
$ unzip SampleRepository.zip
$ cd SampleRepository
Jenkinsfileの認証情報を書き換える
これをコピー
SampleRepository/Jenkinsfile
27 sshagent(['6bc5de3d-0f23-4672-af5e-46962ec0411e']) {
ここに貼り付け
サーバーにpushする
$ git add Jenkinsfile
$ git commit –m ‘fix: sshkey’
$ git push origin master
初回テスト・デプロイ
ブラウザからアクセスしてみる
適当な名前とメッセージを入れて
SUBMIT
http://192.168.99.4/wui
テストコードを書く
58 /** Additional Feature */ /*
59 @RequestMapping(value = "/post/{post_id}/delete", method = RequestMethod.POST)
60 public Map<String, Object> postDeletePost(@PathVariable("post_id") int id) {
70 Map<String, Object> ret = new HashMap<String, Object>();
71 postRepository.delete(id);
72
73 ret.put("id", new Integer(id));
74 ret.put("status", "deleted");
75 return ret;
76 }
77 //*/
この /* を消す
SampleRepository/src/test/java/jp/virtualtech/sample/APIControllerTest.java
サーバーにpushする
$ git add src/test/java/jp/virtualtech/sample/APIControllerTest.java
$ git commit –m ‘add: delete test’
$ git push origin master
テストが失敗することを確認する
テストしかないので失敗する
テストに対応するコードを書く
58 /** Additional Feature */ /*
59 @RequestMapping(value = "/post/{post_id}/delete", method = RequestMethod.POST)
60 public Map<String, Object> postDeletePost(@PathVariable("post_id") int id) {
70 Map<String, Object> ret = new HashMap<String, Object>();
71 postRepository.delete(id);
72
73 ret.put("id", new Integer(id));
74 ret.put("status", "deleted");
75 return ret;
76 }
77 //*/
この /* を消す
SampleRepository/src/main/java/jp/virtualtech/sample/APIController.java
サーバーにpushする
$ git add src/main/java/jp/virtualtech/sample/APIController.java
$ git commit –m ‘add: delete code’
$ git push origin master
テストが成功することを確認する
テストに対応するコードを書いたため成功する
ブラウザから動作確認
DEL が動作することを確認

自動化ハンズオン