Дженкинс на Kubernetes — получение журналов контейнеров из kubectl

#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 не работает.

2. Здесь та же идея

3. На самом деле я не использую декларативный, но я думаю, что команда должна быть cat , поскольку tail -f /dev/null ничего не отслеживает.