#docker #kubernetes #jenkins
#докер #kubernetes #дженкинс
Вопрос:
Я начинаю этот вопрос с сомнения, принадлежит ли это здесь или StackOverflow; Я попробую здесь, проблема заключается в следующем:
Я работаю с Дженкинсом в Kubernetes и не могу получить журналы контейнеров, используемых в конвейерах.
Например, с помощью следующего конвейера:
pipeline {
agent {
kubernetes {
containerTemplate { name 'alpine' image 'alpine' command 'tail -f /dev/null'}
}
}
stages {
stage('sample'){
steps{
container('alpine'){
echo "Hello world"
sleep 600
}
}
}
}
}
все работает нормально, и я вижу, что «Hello world» печатается на консоли Jenkins, но я также хотел бы получить его в качестве вывода из команды kubectl get logs pod-name -c alpine
. Я полагаю, что kubectl logs
это отображает то, что записано в stdout
/ stderr
командой, используемой в качестве точки входа в контейнер ( tail -f /dev/null
в данном случае), и именно по этой причине я не получаю «Привет, мир», но я не понимаю, как добиться того, чего я хочу.
Я также видел обходной путь, предложенный в документации Docker :
Официальный образ nginx создает символическую ссылку из /var/log/nginx/access .войдите в /dev/stdout и создайте другую символическую ссылку из /var/log/nginx/error.log в /dev/stderr, перезаписывая файлы журналов и вызывая отправку журналов на соответствующее специальное устройство. Смотрите файл Dockerfile.
но я не думаю, что это решение подходит для моей проблемы.
Ответ №1:
Это сработало для меня
containerTemplate { name 'alpine', image 'alpine', ttyEnabled: true, command 'cat' }
Ссылка: https://github.com/jenkinsci/kubernetes-plugin#container-group-support
Комментарии:
1. Я использую декларативный конвейер, и указание обоих
tty
иcommand
непосредственно в yaml pod не работает.3. На самом деле я не использую декларативный, но я думаю, что команда должна быть
cat
, посколькуtail -f /dev/null
ничего не отслеживает.