我的意图是运行 docker save
通过在 Gradle 中创建自定义任务来命令:
以下是我的build.gradle
文件:
class SaveTask extends Exec {
@TaskAction
void saveImage() {
commandLine "bash","-c","docker save someimage:latest | gzip > someimage.tar.gz"
}
}
// Create a task using the task type
task save(type: SaveTask)
当我运行任务时,它给了我以下错误:Execution failed for task ':save'.
> execCommand == null!
有人可以建议我哪里出错了吗?
最佳答案
您可能根本不需要创建自定义任务类型,只需使用常规的 Exec
您的任务的任务类型save
:
task save(type: Exec) {
commandLine "bash", "-c", "docker save someimage:latest | gzip > someimage.tar.gz"
}
您的方法失败的问题是 Exec
任务类型定义了 @TaskAction
内部。这个@TaskAction
运行 commandLine
定义的命令.在您的 SaveTask
任务类型,另一个 @TaskAction
已定义,但它将运行 之后 原创 @TaskAction
.这就是 commandLine
的原因。原始 @TaskAction
仍然为空/空.如果您仍想创建自定义任务类型,例如因为你想定义一个供多个任务使用的配置接口(interface),所以使用
doFirst
闭包来定义 commandLine
, 因为它将被执行 之前 任何任务 Action :class SaveTask extends Exec {
String image
SaveTask() {
doFirst {
commandLine "bash", "-c", "docker save ${image} | gzip > someimage.tar.gz"
}
}
}
task saveImageA(type: SaveTask) {
image = 'imageA:latest'
}
task saveImageB(type: SaveTask) {
image = 'imageB:latest'
}
关于Gradle 自定义任务扩展 Exec 抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63631120/