AWS ECRリポジトリがまだ存在しない場合、どのように作成できますか?
存在しない場合にリポジトリを作成する1つのライナー:
aws ecr describe-repositories --repository-names ${REPO_NAME} || aws ecr create-repository --repository-name ${REPO_NAME}
これは可能ですが、最初にリポジトリが存在するかどうかを確認する必要があります。私はこのbashスクリプトを一緒にハッキングして、必要なことを実行します。
#!/bin/bash
aws ecr describe-repositories --repository-names $1 2>&1 > /dev/null
status=$?
if [[ ! "${status}" -eq 0 ]]; then
aws ecr create-repository --repository-name $1
fi
議論は、いくつかのレポ名になります。これをCodeBuildで機能させるには、ジョブにECRリポジトリの作成を許可するIAMロールが必要です。 AWS CLI認証情報をコードビルドジョブに取り込む必要がある場合は、次のAWSブログ投稿をご覧ください。
「ビルド仕様の作成」で説明されている内容を正確に実行して、JQを使用してAWS認証情報を抽出します。
AWSは、リポジトリが存在しない場合にのみリポジトリを作成します。あなたは単にエラーと失敗を無視することができます|| true
同じリポジトリが存在する場合:
aws ecr create-repository --repository-name <repo_name> || true
Jenkinsスクリプトパイプラインでこれを自動化する場合は、次のコードスニペットを使用します。
def ensureRegistry(accountId, region, repoName) {
Logger log = new Logger(this)
def accId = Shell.output("aws --region ${region} ecr describe-repositories --repository-names \"${repoName}\" | jq .repositories[].registryId | tr -d '\"'")
if (accId == accountId) {
log.info("Docker repository ${repoName} exists for account ${accId}")
} else {
log.info("Docker repository ${repoName} doesn't exist for account ${accId}")
Shell.status("aws --region ${region} ecr create-repository --repository-name \"${repoName}\"")
log.info("Docker repository ${repoName} was just created for account ${accId}")
}
}
Shell.groovy
は:
def output(cmd) {
sh(script: cmd, returnStdout: true)
}
def status(cmd) {
sh(script: cmd, returnStatus: true)
}
条件付きでリポジトリを作成することに加えて、リポジトリURIも抽出する場合は、次の複数行のbashコマンドを検討してください。
REPO_URI=$(aws ecr describe-repositories --repository-names "${REPO_NAME}" --query "repositories[0].repositoryUri" --output text 2>/dev/null || \
aws ecr create-repository --repository-name "${REPO_NAME}" --query "repository.repositoryUri" --output text)
リポジトリURIは、tag
およびPush
操作に役立ちます。
部分的なクレジット: answer JS