不使用kubectl rollout status
时间: 2023-12-10 19:05:13 浏览: 69
如果您不想使用 `kubectl rollout status` 命令来检查部署状态,您可以尝试以下修改:
```groovy
stage('Deploy') {
when {
expression { "${IS_DEPLOY}" == "true" }
}
steps {
sh "pwd"
sh "sed -i s#APP_NAME#${APP_NAME}#g deployment-${NAMESPACE}.yaml && sed -i s#TAG_TO_REPLACE#${IMAGE_TAG}#g deployment-${NAMESPACE}.yaml && sed -i s#IMAGE_TO_REPLACE#${IMAGE_NAME}#g deployment-${NAMESPACE}.yaml"
sh "kubectl apply -f deployment-${NAMESPACE}.yaml -n ${NAMESPACE}"
script {
def max_restart_count = 1
def restart_count = 0
def deploy_successful = false
while (!deploy_successful) {
restart_count = sh(returnStdout: true, script: "kubectl get pods -l app=${APP_NAME} -n ${NAMESPACE} -o jsonpath='{range .items[*]}{@.status.containerStatuses[0].restartCount}{'\n'}{end}' | awk '{sum+=$1}END{print sum}'").trim().toInteger()
if (restart_count > max_restart_count) {
error "Pod restart count exceeded the threshold. Deployment ${APP_NAME} failed."
break
}
def ready_pods = sh(returnStdout: true, script: "kubectl get pods -l app=${APP_NAME} -n ${NAMESPACE} -o jsonpath='{range .items[*]}{@.status.containerStatuses[0].ready}{'\n'}{end}'").trim().split("\\s+")
if (ready_pods.every { it == "true" }) {
echo "All pods are ready. Deploy ${APP_NAME} rolled out successfully"
deploy_successful = true
break
}
sleep 5
}
}
}
}
```
在这个修改后的代码中,我使用了一个布尔变量 `deploy_successful` 来判断部署是否成功。循环将一直执行,直到所有的 Pod 都准备就绪,并将 `deploy_successful` 设置为 `true`。
我通过使用 `kubectl get pods` 命令来获取每个 Pod 的 `ready` 状态,并将其存储在 `ready_pods` 列表中。然后,我使用 `every` 方法来检查所有 Pod 的 `ready` 状态是否都为 `true`。
请注意,这种方法可能需要更长的时间来完成循环,因为它依赖于每个 Pod 的状态。如果您希望更快速地检查部署状态,建议使用 `kubectl rollout status` 或其他更可靠的方法。
希望这对您有所帮助!如果您有其他问题,请随时提问。
阅读全文