我有一个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文件依赖。
感谢任何信息,谢谢。
答案 0 :(得分:0)
所以在发布后不久,我在Gradle文档中找到了答案(比我更愿意承认的更简洁的视图......)
我认为将S3存储桶指定为存储库,但是尝试将JAR文件依赖关系作为文件( testCompile files )是不可能的。
由于S3存储桶被定义为存储库,因此需要完整的GAV描述。
因此我将我的依赖修改为 testCompile" someGroup:someArtifact:someVersion @ jar" 现在可以获取依赖。
我的测试仍然无效,但我认为这是另一个问题。当我将它们全部打印到控制台时,我可以看到JAR文件被列为依赖项。
如果有人认为我不正确并且可以从S3存储桶中指定单个JAR文件而不是工件,我仍然会感兴趣,否则我需要将JAR文件转换为我自己的工件。 ;我试图避免。