Rad*_*Rad 6 docker spring-boot-gradle-plugin amazon-ecr
我有一个带有 Spring Boot 插件的 Gradle 项目,并尝试发布由该插件构建的图像:gradle bootBuildImage --publishImage
问题是发布“必须提供令牌或用户名/密码”,但我们不能这样做,因为我们在不同的环境中有不同的身份验证机制。例如,在我们正在使用的本地计算机上ecr-credentials-helper,管道使用aws ecr get-login-token | docker login.
有没有办法强制插件让 docker 处理身份验证?(我假设该插件使用主机上的 docker 守护进程)。
目前,我编写了一个任务来使用任务生成令牌文件aws ecr get-login-token并读取任务中的令牌文件bootBuildImage。但出于安全原因,我不喜欢这个解决方案。
aws ecr get-login-password以下是使用 AWS Java SDK 在 Gradle 中进行复制的解决方案。尽管您可以直接从 Gradle 调用 CLI,但这会使构建脚本更加脆弱,因为它依赖于安装的特定版本的 CLI。特别是因为 ecr 登录是一个重大变化CLI v1 和 v2 之间的
这假设您以某种标准方式设置了 AWS 凭证,开发工具包中的默认凭证提供程序将找到该凭证。
import software.amazon.awssdk.services.ecr.EcrClient
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath platform("software.amazon.awssdk:bom:2.17.19")
classpath "software.amazon.awssdk:ecr"
classpath "software.amazon.awssdk:sts" // sts is required to use roleArn in aws profiles
}
}
plugins {
id "java"
id "org.springframework.boot"
}
dependencies {
implementation platform("org.springframework.boot:spring-boot-dependencies:2.5.3")
implementation "org.springframework.boot:spring-boot-starter"
// Rest of app dependencies
}
bootBuildImage {
doFirst {
String base64Token = EcrClient.create().getAuthorizationToken().authorizationData()[0].authorizationToken()
String[] auth = new String( base64Token.decodeBase64() ).split(":", 2)
docker {
publishRegistry {
username = auth[0]
password = auth[1]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1436 次 |
| 最近记录: |