如何使用特定工作目录和特定用户帐户运行 Jenkins?

如何使用特定工作目录和特定用户帐户运行 Jenkins?

我正在使用以下命令在 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服务运行。执行此操作的步骤如下所示。

  1. 首先,您需要下载 Jenkins WAR 文件并将其放置在某个位置。我选择了地点/opt/jenkins/jenkins.war

  2. 接下来,您需要创建/准备要使用的数据目录,即/data/jenkins.

  3. 您现在可以创建一个名为的系统用户帐户jenkins

    useradd -r jenkins
    
  4. 接下来,将 Jenkins WAR 文件和数据目录的所有权更改为此新用户:

    chown -R jenkins:jenkins /opt/jenkins/
    chown -R jenkins:jenkins /data/jenkins/
    
  5. 接下来,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
    
  6. 通过重新加载来了解systemd新单元:

    systemctl daemon-reload
    
  7. 最后,启动詹金斯:

    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 服务在系统启动时自动启动,请运行该服务。

相关内容