【问题标题】:While loop to monitor task in gradleWhile循环监控gradle中的任务
【发布时间】:2019-12-04 21:34:26
【问题描述】:

我想监控重新部署任务后创建的 kubernetes pod,一旦完成,我想检查 liquibase 日志。如果成功,我想删除作业。我怎样才能在gradle中实现这一点?我不想在重新部署后立即取消部署。所以 doLast 不是一个选择。下面的代码不会一直打印 ob还没有完成

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()
}

【问题讨论】:

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

标签: gradle


【解决方案1】:

我添加了一个 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()
}

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多