更改jenkins根配置config.xml的位置

时间:2018-11-23 16:33:16

标签: jenkins

我正在设置自定义的詹金斯。我的詹金斯家是

echo $JENKINS_HOME
/srv/jenkins

这意味着我的config.xml文件的位置是

$JENKINS_HOME/config.xml
/srv/jenkins/config.xml

但是我希望詹金斯从

下读取config.xml文件
$$JENKINS_HOME/config/config.xml
/srv/jenkins/config/config.xml

您可能会问为什么?因为这是自定义的Jenkins,所以我正在运行时在Kubernetes上的Helm图表中部署config.xml文件,并且该文件将根据不同团队的自定义进行更改。我希望在pod启动的InitContainer阶段完成修改后,此文件能够保留。

我尝试的一件事是创建一个软链接

jenkins@25bea2ece6a9:~$ cd /srv/jenkins/
jenkins@25bea2ece6a9:~$ ls -ltrh | grep config.xml
lrwxrwxrwx 1 jenkins root      30 Nov 23 16:01 config.xml -> /srv/jenkins/config/config.xml

当我启动Pod时,此链接存在,但在10秒内,Jenkins用实际文件覆盖了此链接,而我的所有配置都被覆盖。

所以我可以告诉詹金斯从其他地方读取config.xml文件吗?

1 个答案:

答案 0 :(得分:0)

否,config.xml是在源代码中进行硬编码的,除非您想自己重新编译Jenkins,否则无法完成。 config.xml是由jenkins编写并在加载时编写的。

从事Configuration as Code插件工作的优秀人士希望将这种理念引入jenkins,但是直到它稳定(并且目前还不稳定)之前,您必须使用init.groovy脚本来实现自动化。

Jenkins当前提供了通过常规钩子(https://wiki.jenkins.io/display/JENKINS/Groovy+Hook+Script)对其初始化的访问权限

您可以做的是编写init.groovy脚本,该脚本可以在复制的配置上发出重新加载的命令。

您可以使用初始化状态来做到这一点:

import hudson.init.InitMilestone

if(Jenkins.instance.getInitLevel() == InitMilestone.COMPLETED){
  // copy config.xml
  Jenkins.instance.reload()
} else { 
  // sleep for a while, do some other stuff
}