web-dev-qa-db-ja.com

Jenkinsfileの認証でプライベートDockerレジストリを使用する

このセットアップで基本認証を介してログインするようにJenkisfileに教えるにはどうすればよいですか?

JenkinsビルドにカスタムDockerイメージを使用しています。ドキュメントに記載されているように here 私はそのようなドッカーエージェントを定義しました:

pipeline {
agent { 
    docker {
        image 'registry.az1:5043/maven-proto'
        registryUrl 'https://registry.az1'
        args '-v /var/jenkins_home/.m2:/root/.m2'
    }
}
options {
    timeout(time: 1, unit: 'HOURS')
    buildDiscarder(logRotator(numToKeepStr:'10'))
}

stages {
    stage ('Build') {
        steps{
            sh ...
        }
    }

    stage ('Test') {
        steps {
            sh ...
        }
    } 

     stage ('Deploy') {
        steps {
            sh ...
        }
    }
}

post {
    always {
        echo 'Clean up workspace'
        deleteDir()
    }
}

}

次のエージェントセットアップを使用する場合:

pipeline {
agent { 
    docker.withRegistry('https://registry.az1', 'registry_login'){
        image 'registry.az1:5043/maven-proto'
        registryUrl 'https://registry.az1'
        args '-v /var/jenkins_home/.m2:/root/.m2'
    }
}

パイプラインの実行は、次の例外で失敗します。

WorkflowScript: 3: Too many arguments for map key "withRegistry" @ line 3, column 16.
       docker.withRegistry('https://registry.az1', 'registry_login'){
              ^

WorkflowScript: 3: Invalid agent type "withRegistry" specified. Must be one of [docker, dockerfile, label, any, none] @ line 3, column 16.
           docker.withRegistry('https://registry.az1', 'registry_login'){
                  ^

問題は、使用するレジストリに基本的な認証ログインが必要なことです。レジストリは、 this configurationを使用してnginxリバースプロキシの背後で実行されます。

15

カスタムレジストリの使用 で指定されているように、使用する資格情報とレジストリURLを指定できます。

docker.withRegistry('https://registry.az1', 'credentials-id') {
    ...
}

リポジトリの資格情報を含むJenkins資格情報オブジェクトを作成し、上記のcredentials-idを置き換える名前を付ける必要があります。

更新:

宣言型パイプラインの場合、構文は次のとおりです。

agent { 
    docker {
        image 'registry.az1:5043/maven-proto'
        registryUrl 'https://registry.az1'
        registryCredentialsId 'credentials-id'
        args '-v /var/jenkins_home/.m2:/root/.m2'
    }
}
28
yamenk