Jenkins

jenkins docker上でdocker buildしてdocker hubにupload

jenkins コンテナ上でdocker buildしたお話。「jenkinsコンテナ上でdockerを利用する - Qiita」の続き。

jenkins docker上でdocker buildはあまりしないのかなあ。やっぱjenkins環境もdockerfileでコードで管理したいという考えはおかしいことじゃないと思うけど。あまり記事が見つからない。CIを体験してみたかったのでとりあえず遊んでみた。


jenkins pipelineの定義

流れとしては

gitをポーリング、変更があったらPipelineがトリガーされる


checkout: gitからdockerfile checkout

build: docker build

push: docker hubへpush

というシンプル流れ。

以下pipeline定義ファイル。versionというファイルにversionを書き込むことでdockerイメージのversionを指定できるようにした。

// 前提

// - ホストでdocker hubにpushするためにdocker loginを済ませている
// - Scripted pipelineという非推奨の書き方らしい

node {
stage('Checkout') {
checkout([$class: 'GitSCM',
branches: [[name: '*/master']],
doGenerateSubmoduleConfigurations: false,
extensions: [], submoduleCfg: [],
userRemoteConfigs: [[url: 'https://github.com/paper2/jenkins']]])
}

// versionの読み込み
def version = readFile('version').trim()
def imageName = "paper2/jenkins:" + version
print imageName

stage('Build') {
sh "docker build -t " + imageName + " ."
}

stage ('Push') {
// jenkinsに登録した認証情報を利用する
withCredentials([[$class: 'UsernamePasswordMultiBinding',
credentialsId: 'docker-hub-paper2',
usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
sh 'docker login -u $USERNAME -p $PASSWORD'
}
sh "docker push " + imageName
}
}


CI

サーバ公開してないためwebhook使えないのでgitへ1分ごとにポーリングする設定にした。

versionファイルを変更してみる

$ vi version # v1.0 -> v1.1に変更

$ git add -A
$ git commit -m "v1.1"
$ git push

1分後勝手にCIがスタート(#24です)

Screen Shot 2018-07-26 at 22.12.20.png

できた!!

screencapture-192-168-11-2-8080-job-test-pipeline-24-console-2018-07-26-22_17_05.png

自動でuploadまでされる感じたまらないですね。