让Jenkins管道等到服务器启动

时间:2016-06-20 11:00:57

标签: jenkins groovy jenkins-pipeline

我目前正在开始将构建转换为Jenkins构建管道。在某个时刻,我们有必要等待在docker容器中启动Web应用程序。

我的想法是使用这样的东西:

timeout(120) {
    waitUntil {
        sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
    }
}

不幸的是,这会导致管道构建失败:

  

错误:脚本返回退出代码4

有没有简单的方法让这项工作?

编辑:

我设法使用以下代码使其工作,但阶段仍然标记为失败(尽管构建继续并且最后标记为绿色)。

timeout(120) {
    waitUntil {
        try {
            sh 'wget -q http://server:8080/app/welcome.jsf -O /dev/null'
            return true
        } catch (exception) {
            return false
        }
    }
}

2 个答案:

答案 0 :(得分:26)

他们刚刚发布了Pipeline Nodes and Processes Plugin的新版本,增加了对returning the exit status的支持。 这似乎现在可以完成这项工作:

timeout(5) {
    waitUntil {
       script {
         def r = sh script: 'wget -q http://remoterhoste/welcome.jsf -O /dev/null', returnStatus: true
         return (r == 0);
       }
    }
}

答案 1 :(得分:5)

您可以使用wget选项来实现:

waitUntil {
    sh 'wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}

120次尝试,再加上在重试之间等待1次,即使连接被拒绝也会重试,这可能会稍微多一点。因此,要确保它只有120秒,那么您可以使用shell中的timeout

waitUntil {
    sh 'timeout 120 wget --retry-connrefused --tries=120 --waitretry=1 -q http://server:8080/app/welcome.jsf -O /dev/null'
}