6ce*_*cef 9 java kerberos jenkins jenkins-pipeline
我在我们的分布式Jenkins构建环境中运行了一个脚本化的Jenkins文件.
我有代码在Jenkinsfile中执行Kerberos身份验证.该代码基于两个小型Java程序,都成功通过Kerberos进行身份验证.这两个Java程序在我的Windows工作站和Linux虚拟机客户机上运行.
那就是:我有一对正在运行的Java程序,它们使用一组Kerberos配置文件从Windows和Linux成功执行Kerberos身份验证.当我将代码翻译成我的Jenkins文件时,它显然在第1步失败:找到我精心构造的krb5.conf(和login.conf)文件.
Kerberos代码位于正确配置的全局共享库中.我知道它已正确配置,因为我的Jenkinsfile中的其他地方使用了库,我知道它已从我们的存储库下载了正确的Kerberos库,因为我没有得到任何类型的编译或类未找到的错误.
特定的错误消息,我没有设法通过几十个不同的构建,试图将krb5.conf文件放在我认为詹金斯可能会寻找的任何地方,是这样的:
GSSException: Invalid name provided (Mechanism level: KrbException: Cannot locate default realm)
是的,有一个更长的堆栈跟踪,但如果你知道发生了什么,那就是你应该需要的.
我尝试使用Jenkins文件中的System.setProperty()指向已签入项目的文件,使用Jenkins文件凭据创建,并使用writeFile步骤将包含配置文件的字符串直接写入构建工作区.在每种情况下,Jenkins似乎根本找不到krb5.conf文件,我得到相同的"找不到默认域"错误.
由于各种原因将文件放在/ etc中是有问题的.另外,如果有一个明确阐明的算法来查找它们,我是否真的必须将Kerberos配置文件放在那里,而我似乎正在关注它?
如果你知道发生了什么,任何帮助将不胜感激.
注意:我已经使用krb5.conf和login.conf文件成功验证了Kerberos的问题.他们工作.Kerberos和我的配置似乎不是问题.无论詹金斯是做什么或不做什么似乎都是问题.
回答我自己的问题,因为我最终找到了解决方案,并在我们的构建过程的一部分中成功地使用 Kerberos 身份验证(以某种方式)与 Jenkins Pipeline 。
我们的 Jenkins 实例在 AWS 云的一小部分中使用了许多执行器。实际上,我们的管道中在执行器上运行的唯一部分是构建步骤:Jenkins 将工作区检出到构建节点(执行器)并在这些节点上执行构建。
几乎所有其他内容,特别是 Jenkins 所谓的全局共享库中的所有内容,包括我最初问题中引用的 Kerberos 代码,实际上都在 master 上运行: 即使您将对全局共享库中的函数的调用包装在 node() 中步骤在你的 Jenkinsfile 中,这些调用仍然在 master 上运行。
因为,显然,对吧?
我试图做的是将 krb5.conf 文件放置在构建节点上应位于的所有位置。但由于我的 Kerberos 代码不是构建的一部分(或者其他几个步骤之一,例如在 Jenkins 的节点上运行的 sh()),因此它没有发生在节点上:它发生在 Jenkins master 上。即使调用被包装在节点步骤中。我并不苦涩。没关系。
将 krb5.conf 文件放置在 master 上的正确位置可以解决此问题,但会产生其他问题。最终,我将 Kerberos 逻辑以及相应的配置文件放入 jar 中的一个小型 Java 命令行实用程序中。这是通过curl 下载并执行的,所有这些都在我们管道中的sh() 步骤中进行。这不是最优雅的解决方案,但即使在与 Cloudbees 支持人员讨论了该问题之后,这也是他们为我们尝试做的事情推荐的解决方案。
归档时间: |
|
查看次数: |
258 次 |
最近记录: |