我在 Google App Engine 上运行一个应用程序,我的 git 存储库中有一些文件需要复制到云存储中以供应用程序访问。
我现在手动将它们复制到云存储中,但我很想找到一种方法,在我启动时将它们与应用程序一起自动部署
gradle appengineUpdate
甚至定义一个新的 gradle 任务
gradle storageUpdate
有人有同样的需求并找到了可行的方法吗?
最佳答案
经过多次尝试,我将发布我构建、测试、完善并在生产中使用的解决方案。
首先,我创建了一个新的 Java 类,它使用 Storage、ACL 和 BlobInfo 处理文件上传
Storage storage = StorageOptions.builder()
.authCredentials(AuthCredentials.createForJson(new FileInputStream(authFile)))
.projectId(projectId)
.build()
.service();
List<Acl> aclList = new ArrayList<>();
aclList.add(Acl.of(Acl.User.ofAllUsers(), Acl.Role.READER)); // shared publicly
BlobInfo blobInfo = BlobInfo.builder(blobId)
.acl(aclList)
.build();
storage.create(blobInfo, new FileInputStream(template));
之后我将它链接到一个调用该类的新 gradle 任务
dependencies {
// Google Cloud Java Client
compile group: "com.google.cloud", name: "gcloud-java", version: "0.2.6"
}
task upload(type:JavaExec) {
main = 'com.acme.GcsUploader'
classpath = sourceSets.main.runtimeClasspath
// Test Environment
args = [
'myProjectId', // project Id
'myBucketName', // bucket name
"file=${project.hasProperty("file") ? file : ""}"
]
}
请注意,如果我想上传单个文件,调用就足够了
gradle upload -Pfile=<filename>
默认情况下,我会上传所有文件,但如果我想指定单个文件,则可以轻松完成
最后但并非最不重要的一点是,要自动运行任务,根据新定义的上传任务声明一个已经运行的任务就足够了
tasks.getByName('processResources').dependsOn(upload)
关于java - 我可以使用 gradle 在谷歌云存储上部署文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33798079/