我正在设置自定义的詹金斯。我的詹金斯家是
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
文件吗?
答案 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
}