我正在设置一个定制的Jenkins。我的家是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用一个实际的文件覆盖了这个链接,并且我的所有配置都被覆盖了。
那么,我可以告诉jenkins从其他地方读取config.xml文件吗?
发布于 2018-11-26 19:39:19
不,config.xml在源代码中是硬编码的,除非你想自己重新编译Jenkins,否则无法做到这一点。config.xml是由jenkins在加载时编写的。
从事代码插件配置工作的优秀人员希望将这一理念带给jenkins,但在它稳定之前(目前还不稳定),您必须使用init.groovy脚本来实现自动化。
Jenkins目前通过groovy钩子(https://wiki.jenkins.io/display/JENKINS/Groovy+Hook+Script)提供对其初始化的访问
你可以做的是编写init.groovy脚本,它可以在复制的配置上发出reload命令。
您可以使用初始化状态来完成此操作:
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
}https://stackoverflow.com/questions/53450203
复制相似问题