从 config.xml 加载 Jenkins 配置

从 config.xml 加载 Jenkins 配置

我正在尝试将我的基础设施定义为代码。为此,我使用 puppet 启动了 2 个 jenkins 服务器。然后我手动配置了一个,并将有效的 config.xml 复制到另一个。

由于 jenkins 具有读取 config.xml 文件的能力,因此我希望第二个 jenkins 服务器与第一个服务器完全相同。

不幸的是,第二台詹金斯服务器在启动时崩溃,出现以下错误:

Manager password must not be empty or null.

我尝试过的事情:

  • 对 /var/lib/jenkins 目录进行递归 grep,查找与“managerPassword”匹配的任何字符串(找到 0 个)
  • 将秘密文件和目录从旧目录复制到新目录。

关于:

Jenkins 1.572
Ldap 插件 1.10.2

我确信有一种方法可以将配置从一台 jenkins 服务器复制到另一台。
有人这样做过吗?我缺少哪些文件?

完整错误:

hudson.util.HudsonFailedToLoad: org.jvnet.hudson.reactor.ReactorException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initialDirContextFactory': Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'managerPassword' threw exception; nested exception is java.lang.IllegalArgumentException: Manager password must not be empty or null. at hudson.WebAppMain$3.run(WebAppMain.java:234) Caused by: org.jvnet.hudson.reactor.ReactorException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initialDirContextFactory': Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'managerPassword' threw exception; nested exception is java.lang.IllegalArgumentException: Manager password must not be empty or null. at org.jvnet.hudson.reactor.Reactor.execute(Reactor.java:269) at jenkins.InitReactorRunner.run(InitReactorRunner.java:44) at jenkins.model.Jenkins.executeReactor(Jenkins.java:896) at jenkins.model.Jenkins.<init>(Jenkins.java:795) at hudson.model.Hudson.<init>(Hudson.java:82) at hudson.model.Hudson.<init>(Hudson.java:78) at hudson.WebAppMain$3.run(WebAppMain.java:222) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'initialDirContextFactory': Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'managerPassword' threw exception; nested exception is java.lang.IllegalArgumentException: Manager password must not be empty or null. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1279) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409) at java.security.AccessController.doPrivileged(Native Method) at

更新

我尝试递归地(同时保留权限)将整个 /var/lib/jenkins 目录从主服务器复制到辅助服务器并重新启动。它给出了有关“managerPassword”的相同错误

答案1

我最近遇到了同样的错误。在将 config.xml 中的 security 设置为 false 并在新主机上手动设置 ldap 后,我意识到我忘记将证书导入 java 密钥库,因为我们使用的是 ldaps。以下是我解决问题的步骤。作为参考,我使用的是 java-1.7.0-openjdk-1.7.0.65,Jenkins v1.568 在 Centos 6.5 上完全更新。

停止詹金斯

service jenkins stop

同步 Jenkins 主目录(使用 -I 标志覆盖现有文件):

rsync -avI user@old_host:/var/lib/jenkins/* /var/lib/jenkins/

在新主机上备份 cacerts:

cp /etc/pki/java/cacerts /some/backup/dir

将 cacerts 从旧主机复制到新主机(或者如果您在新主机上有需要保留的其他证书,则通过 keytool 导入):

scp user@old_host:/etc/pki/java/cacerts /etc/pki/java/cacerts

(导入方法:keytool -import -alias "some-name-for-cert" -keystore cacerts -trustcacerts -file "/path/to/cert.crt")

启动 Jenkins

service jenkins start

不幸的是,我没有足够的声誉来评论并建议导入证书,所以如果这不能解决问题,请不要太苛刻。当我遇到您的错误时,我在这里注册了。希望这对您有所帮助!

答案2

这也是我遇到的一个随机问题。您可以在 Jenkins 的根目录中打开 config.xml 文件,并将 useSecurity 标签置为 false。现在您已重置安全管理

相关内容