Script Shell qui construit une image Docker et la pousse vers ECR

C'était difficile à construire et à étiqueter à chaque fois, à se connecter à ecr et à pousser, alors j'ai écrit un script qui le fait avec une seule commande.

Je n'écris généralement pas autant, donc je ne connais pas Convention quand j'écris Shell, et il peut y avoir des styles d'écriture étranges. Je vous serais reconnaissant de bien vouloir préciser si vous en avez envie.

Celui qui a écrit

#!/bin/sh

# Returns boolean indicates whether designated tagged-image exists.
  # arg1: repository name
  # arg2: tag name
function image_exists() {
  image=$(docker image ls -a | grep $1 | grep $2)

  if [ "$image" ]; then
    return 0;
  else
    return 1;
  fi
}

# Builds new image.
  # arg1: tag in the form like ${repository}:${tag}
  # arg2: Path to Dockerfile
function build_image() {
  docker build -t $1 -f $2 .
}

# Work on master branch
git checkout master

# Get latest master revision
revision=$(git rev-parse --short HEAD)

echo "Current master revision is ${revision}\n"

# Set constants
readonly repository=your-repository-name
readonly ecr_repository=************.dkr.ecr.<region>.amazonaws.com
readonly revised_repository=$repository:$revision
readonly ecr_revised_repository=$ecr_repository/$revised_repository
readonly path_to_dockerfile=<relative-path-to-dockerfile>

echo "local-repository: ${repository}
ecr-repository: ${ecr_repository}
local-revised-repository: ${revised_repository}
ecr-revised-repository: ${ecr_revised_repository}\n"

# Build current source if revision not exists
if image_exists $repository $revision; then
  # Do nothing.
  echo "local-revised-repository already exists. Skip build.\n"
  true;
else
  echo "Start building local-revised-repository."
  build_image $revised_repository $path_to_dockerfile;
fi

# Generate ecr-repository-tagged image if not exists
if image_exists $ecr_repository $revision; then
  # Do nothing.
  echo "ecr-revised-repository already exists. Skip tagging.\n"
  true;
else
  docker tag $revised_repository $ecr_revised_repository;
fi

#Définissez les informations d'identification AWS dans cette zone si nécessaire

# Login to ECR
aws ecr get-login-password --region <region> \
  | docker login --username AWS --password-stdin $ecr_repository

# Push new image to ECR
docker push $ecr_revised_repository

echo "Done.\n"

Exigences de mise en œuvre

Bonus: certification MFA

C'était ennuyeux, alors j'espère que cela aide quelqu'un.

#Accepte l'entrée de code mfa à partir de l'entrée standard
read -p "Input mfa code: " mfaCode

result=$(aws sts assume-role \
  --role-arn arn:aws:iam::************:role/<role-name> \
  --role-session-name <session-name> \
  --serial-number <mfa-serial> \
  --token-code $mfaCode --profile <profile-name>)

export AWS_ACCESS_KEY_ID=$(echo $result | jq ".Credentials.AccessKeyId" -r)
export AWS_SECRET_ACCESS_KEY=$(echo $result | jq ".Credentials.SecretAccessKey" -r)
export AWS_SESSION_TOKEN=$(echo $result | jq ".Credentials.SessionToken" -r)

Recommended Posts

Script Shell qui construit une image Docker et la pousse vers ECR
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
Utilisez Jenkins pour créer dans Docker, puis créez une image Docker.
Créez une image Docker pour redoc-cli et enregistrez-la sur Docker Hub
Trouvez une valeur pratique pour avoir une méthode et en faire un ValueObject
[Introduction à Docker] Créer une image Docker pour l'apprentissage automatique et utiliser le notebook Jupyter
Une solution qui facilite la saisie des avantages et des tests Web pour vérifier les résultats
Créer une image docker pour exécuter une application Java simple
Comment déployer à partir d'une image Docker locale vers Heroku
21 Lire et exécuter le script à partir du fichier
Script Shell qui construit une image Docker et la pousse vers ECR
Une histoire sur la création d'un Builder qui hérite du Builder
Description qui le rend accessible uniquement aux affiches
[Java] Lors de l'écriture du source ... Mémorandum ①
21 Lire et exécuter le script à partir du fichier
Une commande qui nettoie définitivement l'environnement docker local
Si vous souhaitez transformer une application Java en une image Docker, il est pratique d'utiliser jib.
Nous avons amélioré Easy Markdown et préparé une image de docker qui peut être construite immédiatement.
[Docker] Est-il suffisant de l'appeler une construction en plusieurs étapes? → L'histoire qui est devenue si bonne
Peut-être que ça marche! Créez une image avec Docker et partagez-la!
Attribuer des expressions lambda Java8 aux variables et les réutiliser
[Docker] Créez un site avec Hugo et publiez-le sur GitHub
[Notes personnelles] Comment pousser une image Docker vers des packages GitHub
Code pour spécifier le nom de l'image sous forme de chaîne de caractères et le coller dans ImageView (Android)
Créez une application Web Spring Boot qui utilise IBM Cloudant et déployez-la sur Cloud Foundry
Une solution aux erreurs Docker dans lesquelles les débutants ont tendance à rester coincés
Comment lire un fichier et le traiter comme une entrée standard
Image de l'application Spring Boot à l'aide de jib-maven-plugin et lancez-la avec Docker
Poussez l'image Docker distribuée par Docker Hub vers Google Container Registry et démarrez la VM en fonction de cette image
Lors de l'appel de sshpass depuis Java avec shell etc., il semble qu'il soit nécessaire d'avoir un chemin.