2017-10-20 198 views
1

我有一个gradle构建文件,它需要某个jar文件作为依赖项。带有IAM策略的AWS S3的Gradle单JAR依赖关系

该jar文件位于AWS存储区中的S3存储桶中。

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

在我gradle这个build文件我指定的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') 

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

我的主要问题是,我如何指定IAM策略而不是访问密钥和密钥?我已经检查gradle这个文件并不能看到任何关于支持IAM认证,比下面的错误之外,如果我不指定任何凭据都:

S3资源要么指定AwsIamAutentication或者提供一些AwsCredentials

[原文]

我也很感兴趣,为什么使用实例凭据不起作用,为什么我没有在生成过程中得到一个错误,说明它无法找到的依赖 - 我得到的错误是我的由于缺少JAR文件相关性,测试失败。

任何信息赞赏,谢谢。

回答

0

所以没多久后发布,我发现摇篮文档中的答案(比我愿意承认青白观点。)

我相信,指定S3存储作为存储库,但随后试图获得JAR文件相关性作为文件(testCompile文件)是不可能的。

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

因此,我修改了我的依赖关系到testCompile“someGroup:someArtifact:someVersion @ jar”它现在挑选依赖关系。

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

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