47
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-18

動機

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である関係でしょうね。

47
50
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
47
50

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?