2016-10-18 3 views
2

Impossible d'utiliser la tâche "Docker" dans Bamboo pour envoyer une image Docker vers AWS Elastic Container Repository (ECR) en raison d'un problème de connexion ECR. Ma sortie ressemble à ceci:Impossible d'utiliser la commande "Docker push" avec ECR

build 18-Oct-2016 12:11:54 9007f5987db3: Preparing 
build 18-Oct-2016 12:11:54 b718b2f27b6c: Waiting 
build 18-Oct-2016 12:11:54 c986610bcfe6: Waiting 
build 18-Oct-2016 12:11:54 ee16ea28e998: Waiting 
build 18-Oct-2016 12:11:54 a709d74a4732: Waiting 
build 18-Oct-2016 12:11:54 c672d981aff9: Waiting 
build 18-Oct-2016 12:11:54 17287d14d5b6: Waiting 
build 18-Oct-2016 12:11:54 4505f2891620: Waiting 
build 18-Oct-2016 12:11:54 94102dff0575: Waiting 
build 18-Oct-2016 12:11:54 e83e87cb73c3: Waiting 
build 18-Oct-2016 12:11:54 740e5e49ea89: Waiting 
build 18-Oct-2016 12:11:54 092e6cb28bdb: Waiting 
build 18-Oct-2016 12:11:54 9007f5987db3: Waiting 
build 18-Oct-2016 12:11:54 8d94959a46f4: Waiting 
build 18-Oct-2016 12:11:54 d2ccc68b6943: Waiting 
build 18-Oct-2016 12:11:54 3dc6be5926c6: Waiting 
build 18-Oct-2016 12:11:54 0afc75223403: Waiting 
build 18-Oct-2016 12:11:54 71caa5138f3c: Waiting 
build 18-Oct-2016 12:11:54 1be454502782: Waiting 
build 18-Oct-2016 12:11:54 4a2173830433: Waiting 
error 18-Oct-2016 12:11:54 error parsing HTTP 403 response body: invalid character 'Y' looking for beginning of value: "Your Authorization Token has expired. Please run 'aws ecr get-login' to fetch a new one." 
simple 18-Oct-2016 12:11:54 Failing task since return code of [/bin/sh /tmp/WEB-SYNAPICI-JOB1-11-ScriptBuildTask-245668070788779382.sh] was 1 while expected 0 

Répondre

2

J'ai découvert que la commande aws ecr get-login générait une URL préfixé par https://. Pour que Bamboo pousse vers mon dépôt, j'ai dû passer de l'utilisation de la tâche Bamboo à l'utilisation d'un script bash personnalisé qui désactive le "https: //" au début de la commande docker login, de sorte que le référentiel en cours d'enregistrement dans a exactement la même URL que le référentiel qui est poussé à.

Je me sens comme cela est probablement un bug avec le client AWS, mais voici mon script au cas où quelqu'un d'autre trouve utile:

#!/usr/bin/env bash 
docker_login_command=$(aws ecr get-login) 
$(echo $docker_login_command | sed 's|https://||' | sed 's|-e none ||') 
container_id=$(docker images | grep foo | awk '{print $3;}' | uniq) 
echo $container_id 
url="output-of-the-ecr-create-repository-command.dkr.ecr.eu-west-1.amazonaws.com/bar/foo" 
docker tag $container_id $url 
docker push $url 
+0

Je serais intéressé de savoir si quelqu'un a une solution plus élégante que de revenir à un script bash. J'ai aussi l'impression que la sortie de la commande 'aws ecr get-login' devrait vous connecter au même référentiel que vous avez besoin pour lancer' docker push' avec succès. – DuffJ

+0

C'était en fait aussi la solution à un problème où 'docker' a répondu que '' aucun référentiel n'existe ''. –

0

Je serais intéressé de savoir si quelqu'un a un plus élégant solution que de revenir à un script bash.

Si vous êtes à la recherche d'une solution à base non script, vous pourriez être intéressé par ce Utoolity Identity Federation for AWS (Bamboo) add-on (commercial, voir le disclaimer), qui fournit un dédié Amazon ECR Credentials Variables tâche injectent EC2 temporaire Amazon Container Registre (Amazon ECR) des informations d'authentification pour d'autres outils et des tâches AWS non reconnues comme la tâche Bamboo Docker.

Plus précisément, il crée les variables suivantes que vous pouvez faire référence à chaque fois que vous avez besoin des informations d'identification ECR dans les tâches suivantes (à condition qu'ils prennent en charge correctement les variables de bambou):

${bamboo.custom.aws.ecr.proxyEndpointDomain} 
${bamboo.custom.aws.ecr.username} 
${bamboo.custom.aws.ecr.password} 

S'il vous plaît se référer à How to push a Docker image to a repository in your Amazon ECR registry with the Bamboo Docker task pour une étape par étape guider.

Clause de non-responsabilité: Je suis le co-fondateur de Utoolity, le fournisseur de ce module.