Я запускаю Jenkins локально, и это последний этап моего Jenkinsfile (после выполнения этого туториала):
stage('Deploy to K8s') {
steps {
sshagent(credentials: ['k8s_key']) {
sh 'scp -r -o StrictHostKeyChecking=no localPath/deployment-remes-be.yaml <user>@<ip_address>:/opt/kubernetes-system/backend'
script {
try {
sh 'ssh <user>@<ip_address> kubectl apply -f /opt/kubernetes-system/backend/deployment-remes-be.yaml --kubeconfig=~/.kube/config'
}
catch(error) {
}
}
}
}
}
Когда я запускаю конвейер, он завершается без блокирующих ошибок, но когда я проверяю журналы, я вижу это:
Копия перед командой применения работает. У меня есть microk8s, установленный на сервере Debian, на который я пытаюсь выполнить развертывание, и если я запускаю команду применения вручную, она работает нормально. Я создал файл .kube/config, как показано здесь, но использование файла --kubeconfig не имеет никакого значения. Также не имеет значения, использую ли я microk8s.kubectl, я всегда получаю это сообщение.
У меня установлены эти плагины:
Что я могу сделать здесь, чтобы приложение работало из конвейера?
Вы правы, мне нужно было именно так /snap/bin/microk8s.kubectl apply. Пожалуйста, напишите свой комментарий как ответ, чтобы я мог его принять. Спасибо
В этой ситуации, когда возникает ошибка, заключающаяся в том, что исполняемая команда не найдена в пути, в качестве первого шага следует попытаться ввести абсолютный путь. Метод шага оболочки можно соответствующим образом обновить:
sh 'ssh <user>@<ip_address> /path/to/kubectl apply -f /opt/kubernetes-system/backend/deployment-remes-be.yaml --kubeconfig=~/.kube/config'
Ошибка гласит, что kubectl не находится на пути пользователя, поэтому первым шагом по устранению неполадок будет предоставление абсолютного пути к исполняемому файлу.