CDK ECR:如何设置存储库名称和标签

Eri*_*nna 2 java groovy amazon-ecr aws-cdk

如何在CDK的DockerImageAsset上设置存储库名称和标签?

这是我的代码:(常规)

private uploadImage(String name, File directory, File jarFile) {
    def asset = DockerImageAsset.Builder.create(scope, cdkId("$name-image"))
            .directory(directory.toString())
            .buildArgs([
                    "jarFile"    : jarFile.name,
                    "environment": config.environment
            ])
            .build()
    println "ImageURL: $asset.imageUri"
}
Run Code Online (Sandbox Code Playgroud)

这是打印的图像网址:

ImageURL: 9999999999999.dkr.ecr.us-west-2.${Token[AWS.URLSuffix.1]}/aws-cdk/assets:89ae89e0b3f7652a4ac70a4e18d6b2acec2abff96920e81e6487da58c8b820f3
Run Code Online (Sandbox Code Playgroud)

我想 CI/CD 就是这样,存储库名称/标签并不重要。

但是,如果您需要在 CI/CD 环境之外使用此映像,则会变得一团糟,因为我们在同一存储库 (aws-cdk/assets) 中有许多不同的项目和版本。

我看到一个名为“repositoryName”的方法,但它已被弃用,并且我找不到替代方法或解释为什么它被弃用。

Kli*_*ker 6

这并不是对您问题的直接回答,因为该解决方案使用 NodeJS 而不是 Groovy,但它可能会帮助其他最终到达这里的人。

您可以查看cdklabs 存储库中的 cdk-ecr-deployment 库,它提供了一个允许您将 docker 映像部署到 ECR 的结构。

这分三个步骤完成:

  1. 创建存储库
const repo = new ecr.Repository(this, 'NginxRepo', {
  repositoryName: 'nginx',
  removalPolicy: RemovalPolicy.DESTROY,
});
Run Code Online (Sandbox Code Playgroud)
  1. 创建图像
const image = new DockerImageAsset(this, 'CDKDockerImage', {
  directory: path.join(__dirname, 'docker'),
});
Run Code Online (Sandbox Code Playgroud)
  1. 标记映像并将其部署到存储库
new ecrDeploy.ECRDeployment(this, 'DeployDockerImage', {
  src: new ecrDeploy.DockerImageName(image.imageUri),
  dest: new ecrDeploy.DockerImageName(`${repo.repositoryUri}:latest`),
});
Run Code Online (Sandbox Code Playgroud)

有关如何使用它的更多上下文,请参阅示例。