2

私はJenkinsからGoogleコンテナレジストリにプッシュしようとしています。ビルドは、Kubernetes Jenkins Plugin内で実行されます。これはgcr.io/cloud-solutions-images/jenkins-k8s-slaveを使用してドッキング画像をKubernetesネイティブDockerに組み込みます。Googleコンテナレジストリにプッシュする失敗:再試行

Googleのコンテナレジストリに認証した後、新しく構築した画像をプッシュしようとしています。これは私のパイプラインスクリプトです:

def imageTag = 'gcr.io/project-id/tag' 

def version = version from pom 

sh './mvnw package' 

sh "docker build -t $imageTag:$version ." 

sh('gcloud auth activate-service-account --key-file=$FILE') 

sh('docker login -p $(gcloud auth print-access-token) -u _token https://gcr.io') 

sh("gcloud docker -- push $imageTag:$version") 

プッシュは、次の出力で失敗します。

c6ff94654483: Preparing 
209db64c273a: Preparing 
762429e05518: Preparing 
2be465c0fdf6: Preparing 
5bef08742407: Preparing 
c6ff94654483: Retrying in 5 seconds 
5bef08742407: Retrying in 5 seconds 
209db64c273a: Retrying in 5 seconds 
2be465c0fdf6: Layer already exists 
762429e05518: Layer already exists 
c6ff94654483: Retrying in 4 seconds 
5bef08742407: Retrying in 4 seconds 
209db64c273a: Retrying in 4 seconds 
c6ff94654483: Retrying in 3 seconds 
5bef08742407: Retrying in 3 seconds 
209db64c273a: Retrying in 3 seconds 
c6ff94654483: Retrying in 2 seconds 
5bef08742407: Retrying in 2 seconds 
209db64c273a: Retrying in 2 seconds 
c6ff94654483: Retrying in 1 second 
5bef08742407: Retrying in 1 second 
209db64c273a: Retrying in 1 second 
5bef08742407: Retrying in 10 seconds 
... 
unexpected EOF 
+0

私は過去数日間、GitlabのCI/CDランナーがプライベートレポジトリに画像をプッシュ/プルするときにGCRに自動的にログインするように設定しようとしています。どのユーザーアカウントにログインしていますか?個人アカウントまたはサービスアカウント?適切なIAM権限を持っていますか? –

+0

jsonファイルでサービスアカウントを使用していて、権限を変更していません。バケットへの書き込み権限がない可能性があります。私はそれを後で確認し、あなたに知らせるでしょう。 – Jacob

+0

私はあなたのパイプラインを読みました。 '_token'をユーザ名として渡す理由はありますか?高度な認証ページは 'oauth2accesstoken'を使うと言えますか? https://cloud.google.com/container-registry/docs/advanced-authentication –

答えて

0

SH「ドッキングウィンドウは、--no-キャッシュ-t $ imageTagを構築するかどうかを確認してください:$バージョン。 "

この問題の根本的な原因は、あなたのドッキングウィンドウデーモンがgcr.io.にプッシュするために必要な資格情報で認証されていないということです、それを

+0

残念ながら、それは同じ問題です。ビルドはうまく動作します。 – Jacob

1

を解決元の質問では、使用されているユーザーアカウントがoauth2accesstokenの代わりに_tokenだったため、これが考えられます。

docker loginの代わりにdocker-credential-gcrを使用していて、同じunexpected EOFエラーが発生していた点を除いて、これと似たエラーが発生しました。

私の問題は、私がGCEで稼働していたという事実でした。そこからdocker-credential-gcrが検出され、GCEメタデータAPIを介して別のサービスアカウントを使用していました。

だから、GCP上で実行されているとdocker-credential-gcrを介してサービスアカウントを認証しようとしているこの問題が発生して他人のために、あなただけの代わりにメタデータAPIの詳細については、環境を見ていると、gcloud資格情報を見て、それを指示する必要があります。私の流れは次のようになります。

gcloud auth activate-service-account --key-file=$FILE

docker-credential-gcr configure-docker --token-source="gcloud"

docker push gcr.io/....

は、それが誰かに役立ちます願っています。

+0

これは正しい方法です。 –

関連する問題