LoginSignup
11
5

More than 5 years have passed since last update.

Serverspec ハンズオン資料(Jenkins おじさんお届け編)

Last updated at Posted at 2016-07-04

はじめに

やること

2016070101.png

  • Jenkins を使って Dockerfile のテストを自動化
  • テストが通ったらコンテナをビルドして Docker Hub にコンテナイメージを push

必要なもの

以下のアカウントを既にお持ちであるという前提で資料を進める。

  • Docker Hub のアカウント
  • GitHub のアカウント

上記のアカウントが無い方は事前に取得しておきましょう。(※ 取っておいて損は無いと思います)

ハンズオンの流れ

  1. 仮想マシンに Jenkins を導入
  2. Jenkins プラグインを導入
  3. GitHub 上のハンズオンリポジトリを fork する
  4. fork したリポジトリと Jenkins を連携させる
  5. コンテナをビルドして Docker Hub に push するジョブ(ジョブ B)を作成する
  6. Dockerfile をテストするジョブ(ジョブ A)を作成する
  7. ビューにてパイプライン表示を設定する
  8. ローカルマシンで Dockerfile を弄ったり、Spec ファイルを弄って、テストの自動実行等を体感する

手順

1. 仮想マシンに Jenkins を導入

Jenkins の導入

command
sudo apt-get update
sudo apt-get -y install openjdk-7-jre openjdk-7-jdk
wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get -y install jenkins

Jenkins ユーザーが Docker コマンドを実行出来るようする

command
sudo usermod -G docker jenkins

念のために確認。

command
sudo -u jenkins docker version

以下のように出力されることを確認する。

command
Client:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:47:50 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.11.2
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   b9f10c9
 Built:        Wed Jun  1 21:47:50 2016
 OS/Arch:      linux/amd64

2. Jenkins プラグインを導入

以下のプラグインを導入する。

  • Build Pipeline Plugin
  • CloudBees Docker Build and Publish plugin
  • GitHub plugin

以下を実行してコマンドラインで Jenkins プラグインを導入する。

command
wget http://localhost:8080/jnlpJars/jenkins-cli.jar
java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin github
java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin build-pipeline-plugin
java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin docker-build-publish

プラグインを導入したら Jenkins を再起動する。

command
sudo service jenkins restart

3. GitHub 上のハンズオンリポジトリを fork する

4. fork したリポジトリを Jenkins を連携させる

  • fork したリポジトリの Webhooks & services にて Add services を選択、[Add Jenkins (GitHub plugin)] を選択

2016070102.png

  • GitHub から Jenkins の webhook URL にアクセス出来るように設定を行う

下図のようにGitHub の IP アドレスは https://api.github.com/meta にアクセスして確認、hooks の IP アドレスを利用する。

2016070302.png

5. コンテナをビルドして Docker Hub に push するジョブ(ジョブ B)を作成する

ジョブ設定

  • プロジェクト名 ... Docker_Build_Push
  • ソースコード管理 ... なし
  • ビルド ... Docker Build and Publish を選択

Docker Build and Publish の設定

2016062902.png

  • Repository Name ... ${your_dockerhub_account}/serverspec-handson
  • Tag ... latest
  • Registry credentials ... 追加をクリックして下図のように Docker Hub の設定を追加する

2016062903.png

設定を追加すると ${JENKINS_HOME}/credentials.xml に設定した認証情報が追記される。

続いて、「高度な設定...」をクリックして以下のように設定する。

2016070301.png

  • No Cache ... チェック(--nocache オプションが有効になる)
  • Build Context ... /var/lib/jenkins/jobs/Serverspec_Handson/workspace/docker/ を設定
  • Dockerfile Path ... /var/lib/jenkins/jobs/Serverspec_Handson/workspace/docker/Dockerfile を設定

6. Dockerfile をテストするジョブ(ジョブ A)を作成する

ジョブ設定

  • プロジェクト名 ... Serverspec_Handson
  • ソースコード管理 ... Git をチェックして
  • ビルドトリガ ... Build when a change is pushed to GitHub を選択
  • ビルド ... 「シェルの実行」を選択して以下のようなシェルスクリプトを書いておく
script
PATH="/var/lib/jenkins/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
cd /var/lib/jenkins/workspace/$JOB_NAME
bundle install
bundle exec rspec spec/docker_*_spec.rb
  • ビルド後の処理 ... 「他のプロジェクトのビルド」を選択

ビルド後の処理「他のプロジェクトのビルド」の設定

  • 対象プロジェクトに Docker_Build_Push を指定
  • 安定している場合のみ起動にチェック

7. ビューにてパイプライン表示を設定する

ジョブ一覧より + をクリックする

2016062905.png

ビュー名を入力して Build Pipeline View にチェック

2016062906.png

Build Pipeline View の設定

2016062907.png

  • 名前 ... Serverspec_Handson
  • Layout の Select Initial Job ... Serverspec_Handson
  • No Of Displayed Builds ... 5

8. ローカルマシンで Dockerfile を弄ったり、Spec ファイルを弄って、テストの自動実行等を体感する

build ship run

ローカルマシンで Dockerfile や Spec ファイルを修正して GitHub に push する度に Jenkins でテスト、ビルド、Docker Hub への push が行われる。

まさに build ship run!!(run まではやってないけど)

Jenkins のビルドパイプライン

2016070103.png

git clone → Test

2016070105.png

Build → Push

2016070106.png

Docker Hub

2016070104.png


ということで

明日からの皆さんの業務のお役に立てれば幸いです。
お疲れ様でした。

11
5
1

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