在Jenkins中使用Docker构建镜像,并上传到Docker Hub上
在jenkins容器上构建docker的故事。 “在jenkins容器上使用docker-Qiita” 的续篇。
在jenkins的docker上构建docker似乎并不常见呢。我认为将jenkins环境也用dockerfile进行代码管理的想法并不奇怪。只是很难找到相关的文章。我只是想体验一下CI,所以暂时随便玩玩。
Jenkins流水线的定义。
总的来说
gitをポーリング、変更があったらPipelineがトリガーされる
↓
checkout: gitからdockerfile checkout
↓
build: docker build
↓
push: docker hubへpush
这个简单的步骤。
通过以下的pipeline定义文件,我们可以通过将版本号写入名为version的文件中来指定docker镜像的版本。
// 前提
// - ホストで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
}
}
翠翠
由于服务器未公开,无法使用Webhook,所以将其配置为每分钟轮询到Git上。
尝试更改版本文件
$ vi version # v1.0 -> v1.1に変更
$ git add -A
$ git commit -m "v1.1"
$ git push

完成了!

自动上传的感觉真是太爽了。