Jenkinsのビルドジョブをdockerコンテナ上で行う

動機

Jenkinsが汚れていくのは見ていられない

Jenkinsでjavaだけではなく、python、nodejs、rubyのビルドを行う場合はそれぞれの環境をインストールしなければならず、Jenkinsの中身が汚くなってしまいます。

特にJenkinsをコンテナとして運用する場合、変更をイメージとしてcommitしなければいけません。

Jenkinsでのコンテナビルドって面倒そうだと思っていた、が

Jenkinsfileもあまり浸透してないこともあり、werckerみたいに、dockerイメージを選んでyamlを書けば自動でやってくれるようなイメージがなかったです。

が、下記サイト様を閲覧し、Jenkinsfileで気楽にできることを知りました。

参考

初めての Jenkins と Declarative Pipeline
https://qiita.com/propella/items/77060dac98b9034f69bb

Jenkinsジョブ(ビルド~テスト)をDockerコンテナ上で実行する ~Docker Pipeline Pluginを使ってみる~
http://kimulla.hatenablog.com/entry/2017/06/13/003123

Jenkins環境構築

dockerコンテナとしてJenkinsを起動します。
OSはAmazon Linuxを使用しました。

Jenkinsの公式サイトを確認したところ、BlueOceanコンテナをおすすめされたので、こちらを使ってみます。
https://jenkins.io/doc/book/installing/

docker run \
  -u root \
  --rm \  
  -d \ 
  -p 8080:8080 \ 
  -p 50000:50000 \ 
  -v jenkins-data:/var/jenkins_home \ 
  -v /var/run/docker.sock:/var/run/docker.sock \ 
  jenkinsci/blueocean 

rootユーザで起動し、dockerはホストと共用する設定のようです。
--rmは実際に利用する場合は消さないといけませんね。

起動後、初期設定を行います。(初期設定は割愛します)

Open Blue Ocean

メイン画面に「Open Blue Ocean」というタブが追加されているため、クリックすると今どきのUIに飛びます。

image.png

なかなかカッコいいですね。
設定ボタンを押すと今までのJenkinsの設定画面が出てくるのはご愛敬です。

Jenkinsの裏側としては、pipelineジョブでリポジトリを設定しているので、pipelineジョブと同じ使い方をすればOKです。

Jenkinsfileによるdockerコンテナでのビルド

Jenkinsfileを書きます。
これをリポジトリのトップディレクトリに配備すると、自動でJenkinsが読み取ってくれます。

pipeline {
    agent { docker 'python:3.6' }
    stages {
        stage('setup') {
            steps {
                sh 'pip install -r requirements.txt'
            }
        }
        stage('build') {
            steps {
                sh 'python manage.py test'
                junit 'TEST-*.xml'
            }
        }
    }
}

肝となるのがagent部分で、dockerイメージを指定すると、

ビルドコンテナ立ち上げ

ビルドコンテナ上のカレントディレクトリにリポジトリ取得

をよしなに行ってくれます。

image.png

image.png

circleciやwerckerみたいな今どきのフラットデザインUIです。

おわりに

Jenkinsでコンテナビルドが簡単にできました。
これでwerckerなどのCIツールの手軽さで、コンテナ内を汚すこともなくビルドができそうですね。

唯一の難点というかイケてない点が、Jenkinsfileがgroovyということですね。
他のCIツール同様yamlで書けるようになると嬉しいのですが、プラグインがJavaである関係でしょうね。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.