sh команда, выдающая ошибку «[[: not found» при выполнении этапа Jenkins - PullRequest
0 голосов
/ 14 апреля 2020

На этом этапе Jenkin я пытаюсь получить статус модуля и, если он имеет значение «ИСТИНА», он переходит на следующий этап, иначе его ждут.

      node('master'){
           withEnv(["KUBECONFIG=${JENKINS_HOME}/.kube/config"]){
                POSTGRES_CMD= """while [[ \$(kubectl get  pods -l app=postgres-${NAME_SPACE} -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}' -n ${NAME_SPACE}) != "True" ]]; do echo "waiting for pod" && sleep 1;done"""
                echo "${POSTGRES_CMD}"
                READY_POD = sh (
                        script: "${POSTGRES_CMD}",
                        returnStdout: true
                  ).trim()
                 echo "${READY_POD}"
Error:- /var/lib/jenkins/workspace/k8s@2@tmp/durable-95fdd/script.sh: [[: not found

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

POSIX sh поддерживает условные скобки: []. Вы можете использовать $() для подстановки команд, в некоторых случаях вам может понадобиться использовать обратные галочки `

while [ "`echo \"true\"`" == "true" ]; do
  sleep 1
done

. В любом случае kubectl поддерживает запуск, ожидающий l oop:

kubectl wait pods --for=condition=Ready -l app=postgres-${NAME_SPACE} -n ${NAMESPACE} --timeout=60s
0 голосов
/ 14 апреля 2020

Это bash функция. В большинстве изображений небольших контейнеров используется busybox или аналогичный, который равен sh, но не bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...