单个Gradle Exec任务中的多个bash命令与多个Gradle Exec任务,每个命令都有一个命令

Mic*_* Wu 7 gradle

我正在使用gradle来自动化docker发布和标记.我目前有以下一系列任务:

task dockerTagLatest(type: Exec) {
    description "Build a Docker image of the current version and tag it as 'latest'"
    dependsOn 'docker'
    group 'Publishing'

    commandLine(['docker', 'tag', dockerImageName, dockerImageLatest])
}

task dockerPush(type: Exec, overwrite: true) {
    description 'Push the Docker image of the current version to the internal Docker hub'
    group 'Publishing'
    mustRunAfter 'dockerTagLatest'

    commandLine 'docker', 'push', dockerImageName
}

task dockerPushLatestTag(type: Exec) {
    description "Push the 'latest' tag to the internal Docker hub"
    group 'Publishing'
    mustRunAfter 'dockerTagLatest'

    commandLine 'docker', 'push', dockerImageLatest
}

task dockerPublish() {
    description "Push the Docker image of the current version and the 'latest' tag to the internal Docker hub"
    dependsOn 'dockerTagLatest'
    dependsOn 'dockerPush'
    dependsOn 'dockerPushLatestTag'
    group 'Publishing'
}
Run Code Online (Sandbox Code Playgroud)

有这样的东西会更好吗?

task dockerPublish(type: Exec) {
    commandLine 'bash', '-e', '-c', """
        docker tag ...
        docker push ...
        docker push ...
    """
}
Run Code Online (Sandbox Code Playgroud)

显然第二种方法不是Windows友好的,但是暂时忽略这一点,是否更好地拥有一组依赖的Exec任务,或者将所有命令行命令集中到一个任务中?我得到的反馈是后者更具可读性,但我认为第一种方法更像是Gradle.思考?

Eri*_*lin 3

是否有过这样的情况:您不想按照确切的顺序运行所有这些任务?它们中的任何一个可以通过未来的 Gradle 功能并行化吗?

如果其中任何一个的答案是“是”,那么您可能需要使用单独的任务;否则一项任务就可以了。