はじめに
やること
- Jenkins を使って Dockerfile のテストを自動化
- テストが通ったらコンテナをビルドして Docker Hub にコンテナイメージを push
必要なもの
以下のアカウントを既にお持ちであるという前提で資料を進める。
- Docker Hub のアカウント
- GitHub のアカウント
上記のアカウントが無い方は事前に取得しておきましょう。(※ 取っておいて損は無いと思います)
ハンズオンの流れ
- 仮想マシンに Jenkins を導入
- Jenkins プラグインを導入
- GitHub 上のハンズオンリポジトリを fork する
- fork したリポジトリと Jenkins を連携させる
- コンテナをビルドして Docker Hub に push するジョブ(ジョブ B)を作成する
- Dockerfile をテストするジョブ(ジョブ A)を作成する
- ビューにてパイプライン表示を設定する
- ローカルマシンで 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 する
- GitHub 上で https://github.com/inokappa/handson-serverspec を fork する
4. fork したリポジトリを Jenkins を連携させる
- fork したリポジトリの Webhooks & services にて Add services を選択、[Add Jenkins (GitHub plugin)] を選択
- GitHub から Jenkins の webhook URL にアクセス出来るように設定を行う
下図のようにGitHub の IP アドレスは https://api.github.com/meta にアクセスして確認、hooks の IP アドレスを利用する。
5. コンテナをビルドして Docker Hub に push するジョブ(ジョブ B)を作成する
ジョブ設定
- プロジェクト名 ... Docker_Build_Push
- ソースコード管理 ... なし
- ビルド ... Docker Build and Publish を選択
Docker Build and Publish の設定
- Repository Name ... ${your_dockerhub_account}/serverspec-handson
- Tag ... latest
- Registry credentials ... 追加をクリックして下図のように Docker Hub の設定を追加する
設定を追加すると ${JENKINS_HOME}/credentials.xml に設定した認証情報が追記される。
続いて、「高度な設定...」をクリックして以下のように設定する。
- 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 をチェックして
- Repository URL には https://github.com/${your_account}/handson-serverspec.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. ビューにてパイプライン表示を設定する
ジョブ一覧より + をクリックする
ビュー名を入力して Build Pipeline View にチェック
Build Pipeline View の設定
- 名前 ... 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 のビルドパイプライン
git clone → Test
Build → Push
Docker Hub
ということで
明日からの皆さんの業務のお役に立てれば幸いです。
お疲れ様でした。