【问题标题】:How to run two instances of Jenkins on one Tomcat server如何在一台 Tomcat 服务器上运行两个 Jenkins 实例
【发布时间】:2018-06-13 16:08:54
【问题描述】:

我的任务是在一个 tomcat Web 服务器上运行两个 Jenkins 实例。在我的 server.xml 文件中,我为两个 Jenkins 设置了 2 个具有不同端口、主机等的服务名称。

但是,我遇到的问题是它们都使用相同的 JENKINS_HOME 目录。第一个例子,我让它使用默认位置(在我的例子中是 /home/jenkins/.jenkins)。第二个实例,我希望它使用/home/jenkins/.j2。但是,我很难做到这一点。

来自我的 server.xml 文件的片段

<!-- first instance of Jenkins.  it is using the default Jenkins home and working fine -->

    <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>

<!-- trying to force it to use the second Jenkins home for the second  instance of Jenkins -->
<!-- got this trick from another stackoverflow answer -->
      <Context docBase="/glide/bigdata/tomcat/webapps2/jenkins.war" path="" reloadable="true">
         <Environment name="JENKINS_HOME" value="/home/jenkins/.j2" type="java.lang.String"/>
      </Context>

<!-- second instance of Jenkins.  not working nicely -->
  <Service name="j2">
    <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
    <Engine name="j2" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="webapps2" unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>

我可以在 catalina.out 日志文件中看到它正在扩展各自的战争文件,但 JENKINS_HOME 仍然是 /home/jenkins/.jenkins 。 我需要做什么才能使第二个实例使用第二个 Jenkins 主页?提前感谢您的帮助。

【问题讨论】:

  • 这可能没有效果,因为我很久没有设置 jenkins 并且不知道设置的用途,但是您是否尝试过为每个设置使用不同的重定向端口?
  • @mad.meesh,不,它没有改变任何东西=(第一个实例是默认设置,所以我将重定向端口号保持不变。我更改了第二个实例,它改变了任何东西更好。
  • 啊。没想到会。好吧,我记得还有另一个配置文件……一个更像 bash 的配置。我没记错吗?你应该可以在那里改变变量。问题是 JENKINS_HOME 类似于一个类似 bash 的变量,在你在这里发布的 sn-p 中,我根本看不到声明的变量
  • 我的意思是我看到你尝试使用 Environment name 设置它,但就像我说的,我认为这是在其他地方完成的
  • @mad.meesh,所以默认的 JENKINS_HOME 是 /home/someuser/.jenkins。我让一审接受,这对我来说很好。第二个实例是我想将 JENKINS_HOME 更改为不同目录的地方,因为它们应该是应用程序的两个独立实例。我想我明白你在说什么,有一个名为“setenv.sh”的文件并在其中声明 JENKINS_HOME。问题是,我不希望两者都使用同一个主目录。我希望两者都使用不同的 JENKINS_HOME 目录

标签: tomcat jenkins


【解决方案1】:

通过将 application-name.xml 文件添加到 apache-tomcat-x.x.x/conf/Catalina/localhost

来更新上下文值
<Context ...>
  <Environment name="JENKINS_HOME" value="/path/to/jenkins_home/" type="java.lang.String"/>
</Context>

参考https://wiki.jenkins.io/display/JENKINS/Tomcat

PS:最初您可能需要将设置文件从 .jenkins/* 复制到 /path/to/jenkins_home/

您可以通过更改应用程序名称来创建单独的实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-09
    • 2023-03-14
    • 1970-01-01
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2019-02-22
    相关资源
    最近更新 更多