在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
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

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

bannerAds