While循环以监视gradle中的任务

While循环以监视gradle中的任务,gradle,Gradle,我想监控重新部署任务后创建的kubernetes吊舱,一旦完成,我想检查liquibase日志。如果成功,我想删除作业。我怎样才能在格拉德尔做到这一点?我不想在重新部署后立即取消部署。所以多拉斯特不是一个选择。以下代码不保持打印尚未完成 task undeployAfterCompleted() { group "kubernetes" description "Undeploy the liquibase update job after completion" de

我想监控重新部署任务后创建的kubernetes吊舱,一旦完成,我想检查liquibase日志。如果成功,我想删除作业。我怎样才能在格拉德尔做到这一点?我不想在重新部署后立即取消部署。所以多拉斯特不是一个选择。以下代码不保持打印尚未完成

task undeployAfterCompleted() {
    group "kubernetes"
    description "Undeploy the liquibase update job after completion"

    def output = new ByteArrayOutputStream()
    commandLine "bash", "-c", "kubectl get po -n pbr | grep 'liquibase'  | awk '{ print \$3 }'"

    while(!output.toString().equals('Completed')) {
        sleep(5 * 1000)
        println "Job has not completed yet."
        commandLine "bash", "-c", "kubectl get po -n pbr | grep 'liquibase'  | awk '{ print \$3 }'"
    }

    tasks.undeploy.execute()
}

我添加了一个doLast块来实现这一点:

doLast {
    String status = getStatus()
    println status.length()
    while (status != "Completed") {
        println "not"
        sleep(5 * 1000)

        if (getStatus() == "Completed") {
            println "did"
            break
        }
    }
    tasks.undeploy.execute()
}

这回答了你的问题吗?不,我不是依靠一个任务来运行另一个任务。我只是在检查kubectl命令的结果,以执行一个名为undeploy的任务。我的问题是如何编写一个while循环,以保持每隔10分钟左右执行一次kubectl命令的结果,因此我认为首先所有功能代码都应该进入doLast(或doFirst),因为您需要在gradle执行阶段运行它,不是配置阶段。然后我不确定当前代码的哪一部分应该更新输出变量。也许exec会有帮助: