最近多个项目都要用jenkins,部署在同一台服务器上。由于各项目间有冲突,需要调整每个项目的jenkins工作目录。

1、在tomcat目录下的 conf目录,新建一个jenkins.xml 配置文件,配置JENKINS_HOME

<Context docBase="/usr/local/xxx/apache-tomcat-9.0.4/webapps/jenkins.war">
<Environment name="JENKINS_HOME" type="java.lang.String" value="/usr/local/xxx/apache-tomcat-9.0.4/jenkins_home" override="true"/>
<Context>

上述配置中,docBase="/usr/local/xxx/apache-tomcat-9.0.4/webapps/jenkins.war"这一段是jenkins.war包的绝对路径;value="/usr/local/xxx/apache-tomcat-9.0.4/jenkins_home"这一段是配置新的工作目录的绝对路径;

配置好后,若之前从未启动过jenkins,那么先启动服务;
启动完成后,/webapps/目录下会生成jenkins目录(若Jenkins.war包在webapps/目录),而后在jenkins目录中修改WEB-INF/web.xml文件。
配置env-entry-nameJENKINS_HOMEenv-entry-value为新的工作目录。

  <env-entry>
    <env-entry-name>JENKINS_HOME</env-entry-name> <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>/usr/local/xxx/apache-tomcat-9.0.4/jenkins_home</env-entry-value>
  </env-entry>

上述操作完毕后,重启tomcat, 至此新的工作目录已经配置好了。新配置的工作目录下,生成了一堆文件。

[root@test-cdh jenkins_home]# ls
config.xml                     jenkins.CLI.xml                              jobs              nodeMonitors.xml  queue.xml.bak             secrets
hudson.model.UpdateCenter.xml  jenkins.install.InstallUtil.lastExecVersion  jobs20181126.zip  nodes             secret.key                userContent
identity.key.enc               jenkins.install.UpgradeWizard.state          logs              plugins           secret.key.not-so-secret  users

jenkins工作目录配置完毕了,却遇到了新的问题:
配置了三个项目A,B,C;配置好后在谷歌浏览器下访问各个项目。按照上述的配置规则,访问url为:http://ip:port/jenkins/。由于都在同一服务器上,所以ip是一样的,所不同的是port
这引起了一个小麻烦。当你访问A项目时,刷新已登陆的B/C项目时,会发现B/C项目会退出登录。第一反应是配置项等可能有冲突,抱着试试看的想法,A项目用谷歌浏览器打开,B项目用火狐浏览器打开,发现功能正常,并不会出现两个不能同时在线状态的情况。
于是乎,想到了可能是浏览器保存的COOKIE等冲突了。通过观察发现,在同一浏览器访问不同项目时,cookie中的JSESSIONID的值会变化。
jessionid
看了下各个值,觉得浏览器可能根据Domain+Path这两个字段来区分。同一台服务器下,Domain不可变化,只能更改Path。经测试,更改Path后,以上问题得到解决。
更改Path操作如下:
1、进入项目目录,关闭服务;
2、修改进入webapp目录下
3、若存在jenkins.war包,则删除该war包,或者更改后缀名(例如:jenkins.bak)
4、修改jenkins目录名为 jenkins_xx
5、启动服务
6、由于项目名称由原来的jenkins更名为 jenkins_xx,所以浏览器访问地址也需更改:http://ip:port/jenkins_xx/

注:如果一开始就知道这个cookieJSESSIONID会冲突的问题,可以在jenkins.war包未解压时,更名为jenkins_xx.war也能达到相同的效果。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐