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
できた!!
自動でuploadまでされる感じたまらないですね。