Shell-Skript, das ein Docker-Image erstellt und an ECR weiterleitet

Es war mühsam, jedes Mal zu erstellen und zu markieren, sich bei ecr anzumelden und zu pushen, also schrieb ich ein Skript, das dies mit einem Befehl ausführt.

Normalerweise schreibe ich nicht so viel, daher weiß ich beim Schreiben von Shell nichts über Konventionen, und es kann einige seltsame Schreibstile geben. Ich wäre Ihnen dankbar, wenn Sie darauf hinweisen könnten, wenn Sie Lust dazu haben.

Derjenige, der geschrieben hat

#!/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

#Legen Sie die AWS-Anmeldeinformationen in diesem Bereich nach Bedarf fest

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

Implementierungsanforderungen

Bonus: MFA-Zertifizierung

Das war nervig, also hoffe ich, dass es jemandem hilft.

#Akzeptiert die Eingabe von mfa-Code von der Standardeingabe
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

Shell-Skript, das ein Docker-Image erstellt und an ECR weiterleitet
Ich habe versucht, mit Wercker ein Docker-Image zu erstellen und zu veröffentlichen, mit dem GlassFish 5 gestartet wird
Verwenden Sie Jenkins, um in Docker zu erstellen und dann ein Docker-Image zu erstellen.
Erstellen Sie ein Docker-Image für redoc-cli und registrieren Sie es auf Docker Hub
Suchen Sie einen geeigneten Wert für eine Methode und machen Sie sie zu einem ValueObject
[Einführung in Docker] Erstellen Sie ein Docker-Image für maschinelles Lernen und verwenden Sie das Jupyter-Notizbuch
Eine Lösung, die es einfach macht, Vor- und Nachteile sowie Webtests einzugeben, um die Ergebnisse zu überprüfen
Erstellen Sie ein Docker-Image, um eine einfache Java-App auszuführen
Bereitstellen von einem lokalen Docker-Image auf Heroku
21 Lesen Sie das Skript aus der Datei und führen Sie es aus
Shell-Skript, das ein Docker-Image erstellt und an ECR weiterleitet
Eine Geschichte über das Erstellen eines Builders, der den Builder erbt
Beschreibung, die es nur für Poster zugänglich macht
[Java] Beim Schreiben der Quelle ... Memorandum ①
21 Lesen Sie das Skript aus der Datei und führen Sie es aus
Ein Befehl, der die lokale Docker-Umgebung definitiv bereinigt
Wenn Sie eine Java-Anwendung in ein Docker-Image verwandeln möchten, ist es praktisch, Jib zu verwenden.
Wir haben Easy Markdown verbessert und ein Docker-Image vorbereitet, das sofort erstellt werden kann.
[Docker] Ist es gut genug, um es als mehrstufigen Build zu bezeichnen? → Die Geschichte, die so gut wurde
Vielleicht funktioniert es! Erstellen Sie ein Bild mit Docker und teilen Sie es!
Weisen Sie Variablen Java8-Lambda-Ausdrücke zu und verwenden Sie sie erneut
[Docker] Erstellen Sie eine Site mit Hugo und veröffentlichen Sie sie auf GitHub
[Persönliche Notizen] So verschieben Sie ein Docker-Image in GitHub-Pakete
Code zum Angeben des Bildnamens als Zeichenfolge und Einfügen in ImageView (android)
Erstellen Sie eine Spring Boot-Webanwendung, die IBM Cloudant verwendet, und stellen Sie sie in Cloud Foundry bereit
Eine Lösung für Docker-Fehler, bei denen Anfänger häufig stecken bleiben
So lesen Sie eine Datei und behandeln sie als Standardeingabe
Stellen Sie sich die Spring Boot-App mit dem Jib-Maven-Plugin vor und starten Sie sie mit Docker
Übertragen Sie das von Docker Hub verteilte Docker-Image in die Google Container-Registrierung und starten Sie die VM basierend auf diesem Image
Wenn Sie sshpass von Java mit Shell usw. aufrufen, scheint es notwendig zu sein, einen Pfad zu haben.