我有一个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文件依赖而失败。
任何信息都很感谢,谢谢。
发布于 2017-10-20 12:28:15
所以在贴出后不久,我在分级文档中找到了答案(在比我愿意承认的更简单的观点中)
我认为,将JAR桶指定为存储库,但随后尝试将JAR文件依赖作为文件(testCompile文件)是不可能的。
因为S3桶被定义为存储库,所以它需要完整的GAV描述。
因此,我将我的依赖修改为testCompile“A某某组:某个伪物:someVersion@jar”,它现在获取了依赖项。
我的测试仍然不起作用,但我认为这是另一个问题。现在,当我将JAR文件全部打印到控制台时,我可以看到它是一个依赖项。
如果有人认为我不正确,并且可以从S3桶中指定单个JAR文件而不是工件,我仍然感兴趣,因为否则我需要将JAR文件转换为我想要避免的工件。
https://stackoverflow.com/questions/46848150
复制相似问题