JenkinsfileにPrivate Docker RegistryからイメージをPull

Page content

KubernetesクラスターにJenkinsXが構築されている。Jenkinsfileでパイプラインを実行する際に例えばプライベートのDocker RegistryからイメージをPullしてきたい場合、ログインせずにPullはできない。

例えば下のようなJenkinsfileがあったとして

pipeline {
  agent {
    label 'jenkins-ruby'
  }
  stages {
    stage('CI Build and push snapshot') {
      when {
        branch 'PR-*'
      }
      steps {
        dir ('.') {
          container('ruby') {
            sh "docker pull my.private.docker.registry/projectX/app:latest"
          }
        }
      }
    }

  }
  post {
    always {
      cleanWs()
    }
  }
}

Pipelineが実行すると、下のようなエラー出てしまう。つまりログインできていないわけ。

+ docker pull my.private.docker.registry/projectX/app:latest
Pulling repository my.private.docker.registry/projectX/app:latest
Error: image projectX/app:latest not found
script returned exit code 1

このページを参照すると。JenkinsXはDocker Registry関連でjenkins-docker-cfgという名前のSecretを参照している。このSecretの中に正しいプライベートのDocker Registryの認証情報を入っていれば良い。

まず手動でプライベートのDocker Registryにログインして、~/.docker/config.jsonファイルが作成される。このファイルの中の認証情報を利用してjenkins-docker-cfgを作る。

docker login my.private.docker.registry
Username : test-user
Password: xxxxx

これで認証情報の入っている~/.docker/config.jsonファイルが出来上がる。jenkins-docker-cfgを削除して、もう一回この情報に基づいて、作り直す。

kubectl delete secret jenkins-docker-cfg -n jx
kubectl create secret -n jx generic jenkins-docker-cfg --from-file=/root/.docker/config.json

これでPipelinもう一回実行して、問題なくプライベートのDocker RegistryからPullできる。

参照リンク:

https://jenkins-x.io/architecture/docker-registry/#update-the-config-json-secret

https://kubernetes.slack.com/archives/C9MBGQJRH/p1532414003000222

About Wang Zhijun
機械学習好きなプログラマー