我正在使用以下命令在 jenkins.war 下执行
jenkins -jar jenkins.war
但我想指定在执行战争时使用以下路径
`/data/jenkins`
它应该以jenkins
用户身份运行。现在它正在以root
用户身份在/root
目录下执行
我怎样才能做到这一点?
答案1
我在脚本中使用了如下环境变量
JENKINS_HOME="/data/jenkins" JENKINS_WAR="/data/jenkins/jenkins.war"
并使用 -D 选项将它们传递给 Java
java -DJENKINS_HOME=$JENKINS_HOME -jar $JENKINS_WAR
# ps -ef | grep java
root 5 1 0 Mar19 ? 00:05:10 /apps/java/jdk1.8.0_121/bin/java -DJENKINS_HOME=/data/jenkins -jar /data/jenkins/jenkins.war
答案2
Jenkins wiki 讨论了将其设置为 Unix 守护进程:安装 Jenkins 作为 Unix 守护进程。您的问题中有一个 RHEL 标签,并且由于 RHEL 7 使用systemd
,您可以将 Jenkins 设置为作为systemd
服务运行。执行此操作的步骤如下所示。
首先,您需要下载 Jenkins WAR 文件并将其放置在某个位置。我选择了地点
/opt/jenkins/jenkins.war
。接下来,您需要创建/准备要使用的数据目录,即
/data/jenkins
.您现在可以创建一个名为的系统用户帐户
jenkins
:useradd -r jenkins
接下来,将 Jenkins WAR 文件和数据目录的所有权更改为此新用户:
chown -R jenkins:jenkins /opt/jenkins/ chown -R jenkins:jenkins /data/jenkins/
接下来,
systemd
通过创建新的单元文件来定义服务:vi /etc/systemd/system/jenkins.service [Unit] Description=Jenkins Daemon [Service] ExecStart=/bin/java -jar /opt/jenkins/jenkins.war User=jenkins Environment=JENKINS_HOME=/data/jenkins [Install] WantedBy=multi-user.target
通过重新加载来了解
systemd
新单元:systemctl daemon-reload
最后,启动詹金斯:
systemctl start jenkins
您现在应该能够在端口 8080 上访问 Jenkins。如果该端口firewalld
处于活动状态,您需要通过firewall-cmd --add-port=8080/tcp
在系统上运行来允许该端口。
现在可以使用 来查看 Jenkins 日志journalctl _SYSTEMD_UNIT=jenkins.service
。运行ps -ef | grep jenkins
将显示它正在以jenkins
用户身份运行:
jenkins 1749 1 7 11:04 ? 00:00:35 /bin/java -jar /opt/jenkins/jenkins.war
作为额外的好处,systemctl enable jenkins
如果您希望 Jenkins 服务在系统启动时自动启动,请运行该服务。