使用IAM策略从AWS S3获取单个JAR依赖关系

时间:2017-10-20 11:26:14

标签: gradle amazon-s3 amazon-iam

我有一个gradle构建文件,它需要某个jar文件作为依赖项。

jar文件驻留在S3中的AWS桶中。

gradle构建文件在Jenkins上执行,Jenkins框已经有一个IAM策略允许它从S3上传和下载(我不控制策略,因此我无法提供更多信息)

在我的gradle构建文件中,我将S3存储桶指定为存储库,如下所示:

maven {
    url "s3://myBucket/myPath"
    credentials(AwsCredentials) {
        accessKey = awsCredentials.AWSAccessKeyId
        secretKey = awsCredentials.AWSSecretKey
    }
}

目前我提供的AWS凭证如下所示:

def fetchAwsCredentials = {
    try {
        return new InstanceProfileCredentialsProvider(false)
    } catch (Exception e) {
        println("unable to get credentials: " + e.getMessage())
    }
}
AWSCredentials awsCredentials = fetchAwsCredentials().getCredentials()

最后,我尝试在依赖项部分中获取所需的JAR文件:

testCompile files('myJarFile.jar')

当运行执行gradle构建的Jenkins作业时,它会很好地从Jenkins实例中检索AWS凭证(因为没有捕获到异常),但它根本不会获取JAR文件。 我已经尝试添加一个不存在的JAR文件作为依赖项,我从构建中找不到它无法找到的错误。

我的主要问题是,如何指定IAM策略而不是访问密钥和密钥?我检查了gradle文档,看不到有关支持IAM身份验证的任何内容,除了以下错误,如果我根本没有指定任何凭据:

  

S3资源应指定AwsIamAutentication或提供一些AwsCredentials

[原文如此]

我也很感兴趣为什么使用实例凭据不起作用,为什么我在构建过程中没有收到错误,说明找不到依赖项 - 我得到的错误是我的测试由于缺失而失败JAR文件依赖。

感谢任何信息,谢谢。

1 个答案:

答案 0 :(得分:0)

所以在发布后不久,我在Gradle文档中找到了答案(比我更愿意承认的更简洁的视图......)

我认为将S3存储桶指定为存储库,但是尝试将JAR文件依赖关系作为文件( testCompile files )是不可能的。

由于S3存储桶被定义为存储库,因此需要完整的GAV描述。

因此我将我的依赖修改为 testCompile" someGroup:someArtifact:someVersion @ jar" 现在可以获取依赖。

我的测试仍然无效,但我认为这是另一个问题。当我将它们全部打印到控制台时,我可以看到JAR文件被列为依赖项。

如果有人认为我不正确并且可以从S3存储桶中指定单个JAR文件而不是工件,我仍然会感兴趣,否则我需要将JAR文件转换为我自己的工件。 ;我试图避免。