Jenkins не находит файл krb5.conf в распределенной сборке из сценария Jenkinsfile - PullRequest
0 голосов
/ 31 августа 2018

У меня есть сценарий Jenkinsfile, работающий в нашей распределенной среде сборки Jenkins.

У меня есть код, выполняющий аутентификацию Kerberos в Jenkinsfile. Этот код основан на двух небольших программах на Java, которые успешно прошли аутентификацию в Kerberos. Эти две программы Java работают как на моей рабочей станции Windows, так и на гостевой виртуальной машине Linux.

То есть: у меня есть пара работающих программ на Java, которые успешно выполняют аутентификацию Kerberos из Windows и из Linux, используя набор конфигурационных файлов Kerberos. Когда я перевожу код в свой Jenkinsfile, он, по-видимому, не работает на шаге 1: поиск моих тщательно сконструированных файлов krb5.conf (и login.conf).

Код Kerberos находится в правильно настроенной глобальной общей библиотеке. Я знаю, что она правильно настроена, потому что библиотека используется в другом месте моего Jenkinsfile, и я знаю, что она загрузила правильные библиотеки Kerberos из нашего репозитория, потому что я не получаю никакой ошибки компиляции или класса не найдены.

Конкретное сообщение об ошибке, которое мне не удалось выделить из десятка различных сборок, пытаясь поместить файл krb5.conf везде, где, как я думаю, Дженкинс может его искать, таково:

GSSException: Invalid name provided (Mechanism level: KrbException: Cannot locate default realm)

Да, есть более длинная трассировка стека, но если вы знаете, что происходит, это все, что вам нужно.

Я пытался использовать System.setProperty () из Jenkinsfile, чтобы указать на файл, который был зарегистрирован в проекте, создан с использованием учетных данных файла Jenkins, и с помощью шага writeFile для прямой записи строки, содержащей файл конфигурации. в рабочую область сборки. В каждом случае Дженкинс просто не находит файл krb5.conf, и я получаю ту же ошибку «Не удается найти область по умолчанию».

Проблематично поместить файл в / etc по разным причинам. Кроме того, мне действительно нужно помещать туда файлы конфигурации Kerberos, когда есть четко объясненный алгоритм их поиска, и я, кажется, следую ему?

Если вы знаете, что происходит, любая помощь будет принята с благодарностью.

NB : Я успешно прошел аутентификацию в Kerberos, используя обсуждаемые здесь файлы krb5.conf и login.conf. Они работают. Kerberos и мои конфиги, похоже, не проблема. Что бы ни делал Дженкинс или нет, похоже, это проблема.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Отвечая на мой собственный вопрос, я в конечном итоге нашел решение и для этого, и для успешного использования аутентификации Kerberos (по моде) с Jenkins Pipeline в рамках нашего процесса сборки.

Наш экземпляр Jenkins использует несколько исполнителей в нашей маленькой части облака AWS. Практически говоря, единственная часть нашего конвейера, которая выполняется на исполнителях, - это этап сборки: Jenkins проверяет рабочие пространства для узлов сборки (исполнителей) и выполняет сборки на этих узлах.

Почти все остальное, и явно все в так называемых глобальных общих библиотеках Дженкинса , включая код Kerberos, упомянутый в моем исходном вопросе, фактически выполняется на master: , даже когда вы Оберните вызовы функции в глобальной общей библиотеке в шаге node () в вашем Jenkinsfile, эти вызовы все еще выполняются на master.

Потому что, очевидно, верно?

То, что я пытался сделать, - это поместить файл krb5.conf во все места, где он должен находиться на узлах сборки. Но так как мой код Kerberos не был частью сборки (или одним из нескольких других шагов, таких как sh (), которые выполняются на узлах в Jenkins), это не происходило на узлах: это происходило на мастере Jenkins , Даже если вызовы были обернуты в шаге узла. Я не горький Это нормально.

Размещение файла krb5.conf в правильном месте на главном сервере решило эту проблему, но создало другие проблемы. В конечном итоге я поместил логику Kerberos в небольшую утилиту командной строки Java в jar вместе с соответствующими файлами конфигурации. Это было загружено через curl и выполнено, все в шаге sh () в нашем конвейере. Не самое элегантное решение, но даже после обсуждения проблемы с поддержкой Cloudbees, это было решение, которое они рекомендовали для того, что мы пытались сделать.

0 голосов
/ 14 сентября 2018

Реализация Kerberos внутри JDK использует системное свойство "java.security.krb5.conf", чтобы найти krb5.conf. Я не уверен, используете ли вы стороннюю библиотеку Kerberos или нет.

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