【发布时间】:2018-08-20 07:41:57
【问题描述】:
我正在使用 gradle-docker-plugin 构建 docker 映像并将其推送到 Amazon 的 ECR。为此,我还使用了在 EC2 实例上运行的远程 docker 守护程序。我已经配置了一个自定义任务 EcrLoginTask 以使用 aws-java-sdk-ecr 库获取 ECR 授权令牌。相关代码如下: -
class EcrLoginTask extends DefaultTask {
String accessKey
String secretCode
String region
String registryId
@TaskAction
String getPassword() {
AmazonECR ecrClient = AmazonECRClient.builder()
.withRegion(Regions.fromName(region))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretCode))).build()
GetAuthorizationTokenResult authorizationToken = ecrClient.getAuthorizationToken(
new GetAuthorizationTokenRequest().withRegistryIds(registryId))
String token = authorizationToken.getAuthorizationData().get(0).getAuthorizationToken()
System.setProperty("DOCKER_PASS", token) // Will this work ?
return token
}
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.amazonaws:aws-java-sdk-ecr:1.11.244'
classpath 'com.bmuschko:gradle-docker-plugin:3.2.1'
}
}
docker {
url = "tcp://remote-docker-host:2375"
registryCredentials {
username = 'AWS'
password = System.getProperty("DOCKER_PASS") // Need to provide at runtime !!!
url = 'https://123456789123.dkr.ecr.eu-west-1.amazonaws.com'
}
}
task getECRPassword(type: EcrLoginTask) {
accessKey AWS_KEY
secretCode AWS_SECRET
region AWS_REGION
registryId '139539380579'
}
task dbuild(type: DockerBuildImage) {
dependsOn build
inputDir = file(".")
tag "139539380579.dkr.ecr.eu-west-1.amazonaws.com/n6duplicator"
}
task dpush(type: DockerPushImage) {
dependsOn dbuild, getECRPassword
imageName "123456789123.dkr.ecr.eu-west-1.amazonaws.com/n6duplicator"
}
远程 docker 连接工作正常,ECR 令牌也成功获取,dbuild 任务也成功执行。
问题
dpush 任务失败 - “无法推送图像:没有基本身份验证凭据”
我认为这是因为使用 EcrLoginTask 接收的授权令牌未传递到 docker 配置闭包 password 属性中。
我该如何解决?每次执行构建时,我都需要即时提供凭据。
【问题讨论】:
标签: amazon-web-services docker gradle gradle-plugin