如何使用cloudbuildjavaapi设置源代码



当我运行时,gcloud命令行默认情况下会做很多事情

gcloud builds submit --tag gcr.io/$PROJECT_ID/$IMAGE_ID

例如,它将repo上传到GCS,然后在构建开始时将其下载到工作目录。

我想使用javaapi,而不是从另一个进程调用gcloud

我可以在不手动实现的情况下使用javaapi执行同样的操作吗?我找不到任何关于如何使用云构建javaapi的示例。

到目前为止,我所拥有的Kotlin代码:

val buildDockerStep = BuildStep.newBuilder()
.setName("gcr.io/cloud-builders/docker")
.addAllArgs(listOf("build", "-t", imageRepository, "."))
val build: Build = Build.newBuilder()
// .setSource() ? does this need to happen manually?
.addSteps(buildDockerStep)
.build()
val request = CreateBuildRequest.newBuilder()
.setBuild(build)
.setProjectId(PROJECT_ID)
.build()
val result = cloudBuildClient.createBuildAsync(request)

回复您的评论,如果您想构建StorageSource,您确实需要压缩源文件并将其上传到GCS。虽然目前还没有Java API客户端的任何示例代码或示例,但我从API参考资料中拼凑出了这些代码。它使用我的bucket和压缩的源档案构建了一个StorageSource,并构建了一张新的图像上传到我的Artifact Registry。

StorageSource.Builder gcsSource = StorageSource.newBuilder()
.setBucket(bucketName)
.setObject(objectName); //Name of the zipped archive in GCS 
Source.Builder buildSource = Source.newBuilder().setStorageSource(gcsSource);
Builder buildStep = BuildStep.newBuilder()
.setName("gcr.io/cloud-builders/docker")
.addAllArgs(Arrays.asList(new String[] {"build", "-t", imageDir, "."}));
Build testBuild = Build.newBuilder()
.setSource(buildSource)
.addSteps(buildStep)
.addImages(imageDir) //Adds the image to Artifact Registry
.build();
CreateBuildRequest req = CreateBuildRequest.newBuilder()
.setBuild(testBuild)
.setProjectId(projectId)
.build();
Build res = CloudBuildClient.create().createBuildAsync(req).get();

请告诉我这是否适用于您,因为我在Java客户端中找不到任何其他示例。我测试了一下,结果对我来说效果很好。

最新更新