在 Red Hat Linux 上如何更改 JENKINS_HOME?

30
我使用以下步骤安装了Jenkins: https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+RedHat+distributions
启动后,我发现服务器上的/var/lib/jenkins分区非常小。 我想将其移动到我的Home/Public文件夹,但我不想更改它运行的用户。 我是Linux新手,不知所措。 如何移动它?例如,我可以为Jenkins用户创建一个Home文件夹吗? 它在启动时作为守护程序运行,所以我不知道在哪里配置这些设置。
我阅读了这篇文章: https://wiki.jenkins-ci.org/display/JENKINS/Administering+Jenkins
但我不理解如何“设置新的Jenkins主目录”。我已经使用了export命令并重新启动了服务,但旧路径仍然显示在“管理Jenkins”屏幕中。
我也看了Stack Overflow上的2-3个类似问题,但总有一个巨大的缺失环节。 我在哪里找到那个永久更改路径的文件?

重新安装会更容易吗?在运行yum命令之前,我该如何设置默认位置? - Dilbertina
我已经完全卸载了Jenkins,并打算使用另一种方法重新开始。我无法弄清如何预配置yum版本以安装到另一个位置。 - Dilbertina
只是顺便提一下,对于追随者来说,如果你在那里有足够的空间,将Jenkins用户的主目录保留为/var/lib/jenkins是可以的,只需将其视为普通用户主目录即可。 - rogerdpack
9个回答

41

这是一个解决问题的简单方法。首先,将Jenkins目录从/var/lib/jenkins移动到/home/jenkins。然后在/var/lib/jenkins创建一个指向/home/jenkins的符号链接。当然,在执行此操作之前,请停止Jenkins服务。

sudo service jenkins stop
sudo mv /var/lib/jenkins /home
sudo ln -s /home/jenkins /var/lib/jenkins
sudo service jenkins start

谢谢,如果我能让IT创建/home/jenkins,我认为这将解决我的问题。 - Dilbertina
Jenkins 在本地服务器上可以正常运行,但是我无法通过端口8080从另一台计算机访问它。在移动所有内容之前它是可以工作的。救命! - Dilbertina
你确定不是因为防火墙的原因吗?我认为在RedHat中默认启用了它。要验证,请尝试使用 sudo service iptables stop 命令关闭它。 - David Levesque
肯定不是防火墙的问题。我们的IT部门无法弄清如何使其可以从另一台计算机访问。:( 所以我卸载了它。现在我正在尝试Paul Becotte链接中的其他方法。对于一个Linux新手来说非常令人沮丧! - Dilbertina
7
你可以在这里更改 JENKINS_HOME 的地址:/etc/sysconfig/jenkins - luismartingil
显示剩余5条评论

16

我成功地通过修改/etc/sysconfig/jenkins文件的内容,将Jenkins的主目录更改为以下内容:

JENKINS_HOME="/home/jenkins"

2
就此而言,我的Ubuntu服务器上的配置文件位于/etc/default/jenkins - Eric Duminil

8

好的,我仔细重新阅读了你的问题,让我们看看能否弄清楚这个问题。我将列出一些您可能已经知道或不知道的信息。

  1. Jenkins的安装和Jenkins Home不是同一件事情。其中一个是Jenkins运行所需的war文件和其他组件,而Jenkins Home则是存储数据的地方。默认情况下,Jenkins Home位于~/.jenkins。当您启动Jenkins时,它会查找环境变量以告诉它在哪里找到这些文件。

  2. Jenkins作为单独的用户运行,默认情况下是jenkins。这样它就不会妨碍您。Jenkins用户将无法访问您的主目录,因此那将是一个不好的解决方案。理想情况下,它应该有自己的主目录,/home/jenkins。然后您的主目录可以是/home/jenkins/.jenkins。您说那个文件夹不存在 - 如果您没有访问权限来创建它,那没关系,您可以指定任何文件夹。但是,Jenkins用户必须拥有该文件夹的所有权才能读取和写入它。

  3. 看起来在Redhat上Jenkins将默认与Tomcat一起运行。有关如何为Tomcat设置环境变量的文档请参见https://wiki.jenkins-ci.org/display/JENKINS/Tomcat

  4. 所有这些都将通过脚本设置。https://wiki.jenkins-ci.org/display/JENKINS/JenkinsLinuxStartupScript似乎是用于此目的的脚本。即使您对shell脚本一无所知,这也不太难……带有#的行是注释。第一行

    JENKINS_USER=jenkins

设置jenkins将使用的用户帐户名称。向下滑动一点,您会看到以下行:

export JENKINS_BASEDIR=/home/jenkins

export CATALINA_OPTS="-DJENKINS_HOME=$JENKINS_BASEDIR/jenkins-home -Xmx512m -Djava.awt.headless=true"

这可以让您设置一个目录,以便Jenkins存放在其中,并将jenkins_home目录设置为/jenkins-home。
对于您的应用程序,您可能想要像这样做。
export CATALINA_OPTS="-DJENKINS_HOME=/var/jenkinsmount/home -Xmx512m -Djava.awt.headless=true"

这样会将所有构建数据(即增长的部分!)存储在 /var/jenkinsmount/home 中,同时保留其余文件在其当前位置。

我没有在 redhat 上使用过它,但希望我已经解释得足够清楚,以便您可以开始使用它!

其他信息:

https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Unix+daemon


谢谢提供的链接,这是一些很棒的信息!David 上面的解决方案对我有用。 - Dilbertina
Paul,你能给我一个使用daemonize的例子吗?我终于安装好了,但不知道如何将其应用到Jenkins上。jenkins.war文件在home/jenkins文件夹中。我卡在那一点了。如果守护进程正在运行,而该文件夹无法卸载,这会有问题吗?http://linux.die.net/man/1/daemonize - Dilbertina

7

我曾经面临同样的问题和疑问。

通过一些连线,我终于解决了我的Jenkins问题。由于磁盘空间在/var/lib/jenkins下出现相同的问题,我将Jenkins移动到新位置。

以下是我必须执行的步骤,以使其正常工作。请考虑我正在将Jenkins指向非默认端口。(我在两个服务器上均应用了此过程)

首先,将Jenkins目录从/var/lib/jenkins移动到/opt/jenkins

sudo service jenkins stop
sudo mv /var/lib/jenkins /opt/

现在您可以将工作区和构建目录更改为计算机上任何其他位置。

Jenkins提供了3个预定义变量,可用于指定新位置:

JENKINS_HOME — Jenkins主目录

ITEM_ROOTDIR — 工作区分配的作业的根目录

ITEM_FULLNAME — 像“foo/bar”那样以“/”分隔的作业名称

sudo su jenkins (access as Jenkins user)
JENKINS_HOME=/opt/jenkins
ITEM_ROOTDIR=/opt/jenkins
ITEM_FULLNAME=/opt/jenkins
exit (exit Jenkins user)

现在,编辑 Jenkins 配置。
/opt/jenkins$ sudo nano /etc/default/jenkins

修改以下行

#jenkins home location
#JENKINS_HOME=/var/lib/$NAME (here is the default)
JENKINS_HOME=/opt/jenkins (that is our new location)

更改用户的主目录

sudo usermod -d /opt/jenkins/ jenkins
sudo service jenkins start

你知道在升级后它是否会保留这个修改后的位置吗?还是每次升级都需要额外的步骤来保持这个位置? - tollgen

2
如果有人遇到空间问题需要重新安置jenkins,我想再次强调以下步骤:
  1. sudo service jenkins stop
  2. sudo mv /var/lib/jenkins /home
  3. sudo ln -s /home/jenkins /var/lib/jenkins
  4. sudo service jenkins start
这些步骤非常有效,感谢几年前发布这个答案的人!

1

Richard Chen的位置是我在我的CentOS 6.6系统中找到jenkins文件的地方。

  1. sudo service jenkins stop(停止jenkins服务)
  2. mv /var/lib/jenkins /home/mylocation/(将jenkins文件夹移动到/home/mylocation/目录下)
  3. (确保新位置具有正确的所有权和组 - Jenkins)
  4. 修改文件/etc/sysconfig/jenkins的内容如下:

    JENKINS_HOME="/home/mylocation"

  5. sudo service jenkins start(启动jenkins服务)

1
如果所有这些方法都不起作用,那么唯一有效的解决方案就是编辑以下文件。
/lib/systemd/system/jenkins.service

然后需要运行重新加载配置的命令。
systemctl daemon-reload

重新启动服务后,更改将生效。

0

[A] 如果您不知道当前Jenkins的主目录在哪里,请找到它?
Jenkins -> 管理Jenkins -> 配置系统 -> 检查标签“主目录”

[B] 将当前Jenkins主目录移动到新目录,请按以下步骤操作:

  1. 停止Jenkins服务 - 通过终止进程

  2. 按照以下任一方法设置JENKINS的新主目录。

    a) 默认情况下,Jenkins主目录设置为~/.jenkins
    b) 在操作系统中设置“JENKINS_HOME”环境变量。
    c) 在JNDI环境中设置“JENKINS_HOME”条目。
    d) 将“JENKINS_HOME”系统属性设置为servlet容器。
            在servlet的Tomcat上下文描述符中,您可以在apache-tomcat-8.5.28/conf/context.xml中设置以下字段:
            <Context ...>
              <Environment name="JENKINS_HOME" value="/path/to/jenkins_home/" type="java.lang.String"/>
            </Context>
    
    e) 如果jenkins.war文件部署在tomcat服务器上,则即使在bin/catalina.sh中添加以下内容也会设置JENKINS_HOME。
                CATALINA_OPTS="-DJENKINS_HOME=/path_to/jenkins_home/"
    
  3. 手动将Jenkins主目录内容从旧目录复制到新目录。 (使用cp命令)。建议使用复制步骤而不是移动步骤以保留一个备份。稍后您可以删除旧工作区。

  4. 现在启动Jenkins,然后它将从JENKINS_HOME变量中提到的路径选择新的主目录。

    注意: - 仅通过将上述变量“JENKINS_HOME”设置为不同路径将不会自动将文件从当前Jenkins主路径复制到新路径。这个复制步骤 - 您必须手动执行。


0

以下是一些我使用的命令:

步骤1:停止jenkin服务并移动文件夹

systemctl stop jenkins
mv /var/lib/jenkins /whatever/folder
sudo chown jenkins -R /whatever/folder

步骤2:在/etc/default/jenkins中修改Jenkins主目录位置

JENKINS_HOME=/whatever/folder/$NAME

步骤三:重启Jenkins服务

systemctl start jenkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接