如果不存在则创建AWS ECR存储库

问题描述 投票:11回答:5

如果尚不存在该如何创建AWS ECR存储库?

amazon-ecs docker-registry aws-ecr
5个回答
11
投票

如果不存在,可以使用一个衬里来创建存储库:

aws ecr describe-repositories --repository-names ${REPO_NAME} || aws ecr create-repository --repository-name ${REPO_NAME}


3
投票

您可以执行此操作,但是您需要先检查存储库是否存在。我一起破解了这个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中正常工作,该工作将需要一个IAM角色,以允许其创建ECR存储库。如果需要将AWS CLI凭证添加到代码构建作业中,请查看此AWS Blog文章:

https://aws.amazon.com/blogs/devops/how-to-create-an-ami-builder-with-aws-codebuild-and-hashicorp-packer/

我们正在完全按照“创建构建规范”中的描述进行操作,以使用JQ提取AWS凭证。


2
投票

如果您希望在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)
}

0
投票

除了有条件地创建存储库之外,如果您还想提取存储库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对于tagpush操作可能有用。


部分功劳:answer by JS


-4
投票

您可以使用AWS CLI即时创建存储库,也可以根据需要将其放置在本地脚本中。

aws --region REGION_NAME ecr create-repository --repository-name REPO_NAME --profile default

docker tag IMAGE_NAME AWS_ACCOUNT_ID.dkr.ecr.REGION_NAME.amazonaws.com/IMAGE_NAME

aws ecr get-login --no-include-email --region REGION_NAME --profile default

这将在您的终端中返回一个大键登录名,将其复制然后粘贴到您的终端中,然后按Enter键(这不是确保安全的最佳方法!)

docker push AWS_ACCOUNT_ID.dkr.ecr.REGION_NAME.amazonaws.com/IMAGE_NAME

然后进入ECR,找到您的仓库并打开它。单击“权限”选项卡,然后应用一个策略,该策略将允许其他资源在需要时使用它。

就推送更改时自动创建存储库而言?您可以创建一个CodeCommit Repo并将其添加为要执行的Codepipeline更改的触发器,然后将其配置为执行这些AWS CLI命令的buildspec.yml。

© www.soinside.com 2019 - 2024. All rights reserved.