2

Ich versuche, die Google-Container-Registrierung von meinem Jenkins schieben. Die Builds laufen innerhalb des Kubernettes Jenkins Plugins, das den gcr.io/cloud-solutions-images/jenkins-k8s-slave verwendet, um das Docker-Image in den Kubernetes Native Docker zu erstellen.Push to Google Container-Registrierung schlägt fehl: Erneut versuchen

Nach der Authentifizierung in der Google-Container-Registrierung versuche ich, das neu erstellte Bild zu pushen. Das ist meine Pipeline Skript:

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") 

Die Push mit der folgenden Ausgabe fehlschlägt:

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

Ich habe in den letzten Tagen das gleiche Problem mit dem Setup von Gitlab's CI/CD-Runner, dass es sich automatisch in GCR einloggt, wenn es Bilder in die privaten Repositories schiebt. Mit welchem ​​Benutzerkonto sind Sie angemeldet? Ein persönlicher oder ein Dienstkonto? Verfügt es über die entsprechenden IAM-Berechtigungen? –

+0

Ich benutze ein Dienstkonto mit der JSON-Datei und ändere ihre Berechtigungen nicht. Vielleicht hat es keine Schreibberechtigungen für den Bucket. Ich werde das später überprüfen und Sie wissen lassen. – Jacob

+0

Ich lese gerade Ihre Pipeline durch. Gibt es einen Grund, warum du '_token' als Benutzernamen übergibst? Die erweiterte Authentifizierungsseite scheint "oauth2accesstoken" zu verwenden? https://cloud.google.com/container-registry/docs/advanced-authentication –

Antwort

0

überprüfen Sie bitte, ob

sh „Docker --no-Cache baut -t $ ImageTag : $ Version. "

löst es

+0

Leider ist es immer noch das gleiche Problem. Der Build funktioniert gut. – Jacob

1

Die Ursache für dieses Problem ist, dass Ihr Docker Dämon nicht mit den Anmeldeinformationen notwendig, um Push-to-gcr.io. authentifiziert Für die ursprüngliche Frage glaube ich, dass dies wahrscheinlich ist, weil das verwendete Benutzerkonto _token anstelle von oauth2accesstoken war.

Ich hatte einen ähnlichen Fehler, außer dass anstelle von docker login ich verwendet und den gleichen unexpected EOF Fehler bekam.

Mein Problem war die Tatsache, dass ich auf GCE ausgeführt wurde, von dem ein anderes Dienstkonto über die GCE-Metadaten-API erkannt und verwendet.

Für andere, die dieses Problem auf GCP ausführen und versuchen, ein Dienstkonto über zu authentifizieren, müssen Sie nur die Anmeldeinformationen gcloud anzeigen, anstatt die Umgebung für die Metadaten-API-Details zu betrachten . Mein Flow sieht wie folgt nun:

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

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

docker push gcr.io/....

Hoffe, dass es jemand hilft.

+0

Dies ist der richtige Weg. –

Verwandte Themen