我可以使用gradle在Google云端存储上部署文件吗?

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)

任何人都有同样的需求,并找到了可行的方法吗?

Luc*_*chi 7

经过多次尝试,我将发布我构建,测试,完善的解决方案以及我在生产中使用的解决方案.

首先,我创建了一个新的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)