Как запустить Jenkins с указанной рабочей директорией и под конкретной учетной записью пользователя?

Вопрос или проблема

Я выполняю ниже jenkins.war с помощью следующей команды:

  jenkins -jar jenkins.war

Но я хочу указать путь, который будет использоваться при выполнении war:

 `/data/jenkins`

и он должен выполняться как пользователь jenkins. В настоящее время он выполняется как пользователь root и в каталоге /root.

Как я могу этого добиться?

Я использовал переменные окружения следующим образом в скрипте:

JENKINS_HOME=”/data/jenkins”
JENKINS_WAR=”/data/jenkins/jenkins.war”

и передал их в Java с опцией -D:

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

Вики-сайт Jenkins обсуждает настройку службы как демона Unix: Installing Jenkins as a Unix daemon. У вас в вопросе тег 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, создав новый unit-файл:

    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 новый unit, перезагрузив его:

    systemctl daemon-reload
    
  7. Наконец, запустите Jenkins:

    systemctl start jenkins
    

Теперь вы должны иметь возможность доступа к Jenkins на порту 8080. Если 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 автоматически запускалась при загрузке системы.

.

Ответ или решение

Чтобы запустить Jenkins с определённой рабочей директорией и под конкретным пользовательским аккаунтом, как это требуется в описанной вами ситуации, вам необходимо выполнить ряд шагов, которые включают настройку системного демона через systemd на вашем сервере RHEL 7.

Теория

Ваш текущий подход использует java -jar, но для запуска Jenkins как службы systemd с использованием определённого пути и пользователя требуется создать специфическую конфигурацию. Преимуществом использования systemd является упрощённое управление службами, автоматический запуск при старте системы и более чёткий контроль над средой выполнения.

Пример

Вот пошаговое руководство:

  1. Получение Jenkins WAR: Скачайте файл jenkins.war и разместите его, например, в /opt/jenkins/.

  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: Создайте файл юнита jenkins.service.

    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. Запуск Jenkins:

    systemctl start jenkins
  8. (Опционально) Настройка автозапуска:

    systemctl enable jenkins

Применение

С использованием вышеописанных шагов, Jenkins будет запускаться под пользователем jenkins и использовать директорию /data/jenkins для хранения данных. Таким образом, управление Jenkins становится более сопоставимым с стандартными практиками работы на RHEL 7 и увеличивает безопасность за счёт выполнения процесса от ограниченного системного пользователя.

Убедитесь, что ваш файерволл позволяет доступ к необходимому порту (обычно 8080) с помощью команды:

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

Это решение обеспечит вам надёжное и безопасное развертывание Jenkins в продакшн среде.

Оцените материал
Добавить комментарий

Капча загружается...