可以使用 gradle 来保存 gzip winder Win7 吗?

Possible to Use gradle to save gzip winder Win7?

我有一个设置- 带有 docker.exe 文件的本地 PC(未安装 docker) 远程服务器 运行 docker 守护进程 + 回购。

我正在使用 gradle 任务将图像保存到本地 PC:

project.exec{ ExecSpec exe->
{
exe.commandLine “{docker exe path}”
exe.args “save”, “-o”, “{tag}”, “{output path}”
}

有效并在 PC 上保存一个 .tar。 现在我试图保存用 gz/bz/xz 压缩的图像,但无论我如何安排 args,这都不起作用。 现在,如果我尝试通过 cmd 进行操作,它会起作用: “{docker exe路径}保存{tag} | gzip > {输出路径}” 是否可以使用 gradle 来做到这一点?谁能帮帮我。

使用 Win 7,docker.exe 版本 18.09.2,gradle 版本 5.4.1 非常感谢

你不能使用像重定向运算符 > 这样的 shell 结构,因为 Gradle 不会将命令委托给 shell.

如果您愿意,可以使用 bmuschko's docker plugin,因为它支持压缩保存图像。这是一个如何使用它的例子(在 Groovy DSL 中):

plugins {
    id "com.bmuschko.docker-remote-api" version "5.0.0"
}

import com.bmuschko.gradle.docker.tasks.image.*

task saveDockerImage(type: DockerSaveImage) {
    destFile = layout.buildDirectory.file("my-docker-image.tgz")
    repository = "my/image"
    tag = "latest"
    useCompression = true
}

这种方法的优点是使用起来相对简单,并且可以在 Windows 和 Unix 平台上工作,如果您工作,甚至不需要在本地安装 docker在远程存储库上。

但是如果你不想使用第三方插件,你必须将图像保存为 tar 文件(因为 docker save 就是这样做的)然后运行 另一个 exec 压缩它的命令(或使用您喜欢使用的任何其他压缩工具)。

您还可以创建执行所有这些操作的 bat 或 bash 脚本,然后从 Gradle 执行该脚本。但这也不像使用插件恕我直言那样优雅。