【发布时间】:2021-09-06 19:07:02
【问题描述】:
默认情况下,我们的管道会尝试使用与当前阶段名称匹配的容器。 如果此容器不存在,则使用容器“默认”。 此功能有效,但问题是当不存在与阶段名称匹配的容器时,会发生 ProtocolException,这是无法捕获的,因为它是由不受我们控制的线程引发的。 在使用 Jenkins 的 Kubernetes 插件以防止出现此异常时,有没有办法检查容器是否确实存在?这似乎是一个基本功能,但我无法在网上找到类似的东西。
我无法显示实际代码,但这里有一个会触发此异常的管道脚本示例摘录:
node(POD_LABEL)
stage('Check Version (Maven)') {
container('containerThatDoesNotExist'}{
try{
sh 'mvn --version'
}catch(Exception e){
// catch Exception
}
}
java.net.ProtocolException: Expected HTTP 101 response but was '400 Bad Request'
at okhttp3.internal.ws.RealWebSocket.checkResponse(RealWebSocket.java:229)
at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:196)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:203)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
【问题讨论】:
-
嗨@RedEclipse,你遇到这个问题了吗?
-
嗨@Killesk,很抱歉回复晚了。可悲的是,我一直无法找到解决方案。 ://
标签: jenkins kubernetes groovy pipeline kubernetes-jenkins-plugin