AWS ECR自动创建存储库(如果不存在)

问题描述 投票:4回答:4

是否可以自动创建AWS ECR存储库(如果它尚不存在)。因为我使用了本地docker注册表实例,并且在推送时创建了repo本身。有没有办法用ECR配置相同的

docker-registry aws-ecs aws-ecr
4个回答
6
投票

一个衬垫,如果它不存在,则创建一个仓库:

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博客帖子:

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)
}

-4
投票

您可以使用AWS CLI动态创建repos,如果您愿意,可以将它们放在本地的某个脚本中。

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

这将在您的终端返回一个大密钥登录,复制它,然后将其粘贴到您的终端然后按回车(不是最好的安全方式!)

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

之后进入ECR,找到你的回购并打开它。单击“权限”选项卡,然后应用允许其他资源在需要时使用它的策略。

推送更改时自动创建回购?您可以创建CodeCommit Repo并将其作为触发器添加到将执行的Codepipeline更改,然后将buildspec.yml配置为执行这些AWS CLI命令。

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