Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gradle AWS S3中带有IAM策略的渐变单JAR依赖项_Gradle_Amazon S3_Amazon Iam - Fatal编程技术网

Gradle AWS S3中带有IAM策略的渐变单JAR依赖项

Gradle AWS S3中带有IAM策略的渐变单JAR依赖项,gradle,amazon-s3,amazon-iam,Gradle,Amazon S3,Amazon Iam,我有一个gradle构建文件,它需要一个特定的jar文件作为依赖项 jar文件驻留在AWS的S3存储桶中 gradle构建文件是在Jenkins上执行的,Jenkins box已经有一个IAM策略,允许它从S3上传和下载(我不控制该策略,所以我不能提供更多关于该策略的信息) 在我的gradle构建文件中,我将S3存储桶指定为存储库,如下所示: maven { url "s3://myBucket/myPath" credentials(AwsCredentials) {

我有一个gradle构建文件,它需要一个特定的jar文件作为依赖项

jar文件驻留在AWS的S3存储桶中

gradle构建文件是在Jenkins上执行的,Jenkins box已经有一个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()
最后,我尝试在dependencies部分获取所需的JAR文件,如下所示:

testCompile files('myJarFile.jar')
当运行执行gradle构建的Jenkins作业时,它会从Jenkins实例中检索AWS凭据(因为没有捕捉到异常),但它不会获取JAR文件。 我已经尝试添加一个不存在的JAR文件作为依赖项,但是我没有从构建中得到任何找不到的错误

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

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

[原文如此]

我还感兴趣的是,为什么使用实例凭据不起作用,以及为什么我在构建过程中没有收到一个错误,说明它找不到依赖项——我收到的错误是,由于缺少JAR文件依赖项,我的测试失败了


非常感谢您提供的任何信息。

发布后不久,我在Gradle文档中找到了答案(以比我愿意承认的更清晰的视角)

我认为,将S3 bucket指定为存储库,然后尝试将JAR文件依赖项作为文件(testCompile文件)获取是不可能的

因为S3 bucket被定义为存储库,所以它需要完整的GAV描述

因此,我修改了依赖项,以测试编译“someGroup:someArtifact:someVersion@jar“现在,它将获得依赖性

我的测试仍然不起作用,但我认为这是另一个问题。现在,当我将JAR文件全部打印到控制台时,我可以将其作为依赖项列出


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

发布后不久,我在Gradle文档中找到了答案(以比我愿意承认的更直白的观点)

我认为,将S3 bucket指定为存储库,然后尝试将JAR文件依赖项作为文件(testCompile文件)获取是不可能的

因为S3 bucket被定义为存储库,所以它需要完整的GAV描述

因此,我修改了依赖项,以测试编译“someGroup:someArtifact:someVersion@jar“现在,它将获得依赖性

我的测试仍然不起作用,但我认为这是另一个问题。现在,当我将所有测试打印到控制台时,我可以看到JAR文件作为依赖项列出


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

你能分享Gradle文档链接吗?对不起,这是很久以前的事了,我记不起我在哪里看到过它他给出了相关的评论,加上它很可能是gradle 4或更早版本,所以现在可能与gradle 5不相关。没问题……我实际上在这里找到了相关文档:。我相信该部分的示例18解决了您的问题。您能分享gradle文档链接吗?对不起,这是很久以前的事了,我不记得在哪里看到相关的comment,加上它很可能是gradle 4或更早版本,因此现在可能与gradle 5无关。没问题……我实际上在这里找到了相关文档:。我相信该部分的示例18解决了您的问题。