Luc*_*chi 3 java google-app-engine gradle google-cloud-storage
我正在Google App Engine上运行一个应用程序,我的git存储库中有一些文件需要复制到云存储中才能被应用程序访问.
我现在在云存储中手动复制它们,但我希望找到一种方法,在我启动时自动将它们与应用程序一起部署
gradle appengineUpdate
Run Code Online (Sandbox Code Playgroud)
甚至定义一个新的gradle任务
gradle storageUpdate
Run Code Online (Sandbox Code Playgroud)
任何人都有同样的需求,并找到了可行的方法吗?
经过多次尝试,我将发布我构建,测试,完善的解决方案以及我在生产中使用的解决方案.
首先,我创建了一个新的Java类,它使用存储,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));
Run Code Online (Sandbox Code Playgroud)
之后我将它链接到一个新的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 : ""}"
]
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果我想上传单个文件,那就足够了
gradle upload -Pfile=<filename>
Run Code Online (Sandbox Code Playgroud)
这种方式默认情况下我会上传所有文件,但是如果我想指出一个文件,它可以很容易地完成
拉特但并非最不重要的是,要自动运行任务,就足以声明已经运行的任务,具体取决于新定义的上载任务
tasks.getByName('processResources').dependsOn(upload)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
841 次 |
最近记录: |