Как Jenkins работает с пользователем jenkins в Ubuntu, пока у него нет разрешений?

У меня мой проект работает на сервере ubuntu, и я все делал через пользователя myname. Файлы проекта, все связанные каталоги и статические файлы, используемые моим приложением, принадлежат пользователю myname.

Теперь я хочу настроить проект Jenkins Freestyle для CI/CD на сервере Ubuntu, когда я устанавливаю Jenkins, создается новый пользователь jenkins.

На этапе сборки, когда jenkins выполняет задание через Execute shell, он выполняет команды оболочки через пользователя jenkins вместо пользователя myname по умолчанию, у которого нет разрешений на что-либо в приложении. Следовательно, сборка Jenkins не может работать:

  1. он не может выполнить от git pull origin master до jenkins пользователя, чтобы получить последние изменения;
  2. он не может запустить venv/bin/python myapp.py для запуска приложения
  3. даже если я изменю владельца myapp.py на пользователя jenkins, запущенный процесс не сможет получить доступ к каким-либо каталогам/хранилищам/статическим файлам с пользователем jenkins.
  4. Итак, мне придется сделать sudo chown -R jenkins:jenkins * все, над чем я работал, все, что связано с моим приложением.

Это кажется действительно глупым. Я, должно быть, пропустил что-то очевидное...

Каков элегантный способ работы Дженкинса?


@Raman упомянул, что я должен запускать команды с sudo -u myname; Я пробовал так:

Команды оболочки Jenkins build Execute проекта Freestyle определяются следующим образом:

cd /home/john/jenkins_test/
whoami
sudo -u john whoami 
sudo -u john git pull

Сборка Jenkin показывает следующий вывод:

[test] $ /bin/sh -xe /tmp/jenkins2232617598308237553.sh
+ cd /home/john/jenkins_test/
+ whoami
jenkins
+ sudo -u john whoami
sudo: no tty present and no askpass program specified
Build step 'Execute shell' marked build as failure
Finished: FAILURE

person Kid_Learning_C    schedule 06.11.2020    source источник
comment
Вам нужно запустить команды с помощью sudo -u myname   -  person Raman Sailopal    schedule 06.11.2020
comment
@RamanSailopal Спасибо за ваш ответ. Не могли бы вы проверить мои обновления в вопросе? Я пробовал, но не получилось...   -  person Kid_Learning_C    schedule 06.11.2020
comment
@RamanSailopal Нет, не делай этого!!! Никогда!!! За это можно потерять работу и было бы правильно вас уволить.   -  person Thomas Sablik    schedule 06.11.2020
comment
@ThomasSablik Не могли бы вы уточнить? Какой здесь риск?   -  person Kid_Learning_C    schedule 06.11.2020
comment
Вам нужно разрешить либо sudo, либо sudo -u john. Первое означает, что разработка имеет полные права администратора в этой системе. Последнее просто неправильный путь.   -  person Thomas Sablik    schedule 06.11.2020
comment
@ThomasSablik Так почему неправильно давать полные права администратора? Как мне тогда настроить Jenkins для сборки? Это кажется очень простым вопросом для всех, кто пытается использовать Jenkins, и все же я не смог найти официальную документацию по этому поводу...   -  person Kid_Learning_C    schedule 06.11.2020
comment
@ThomasSablik делает справедливое замечание. Мой комментарий можно было написать лучше. Я бы предложил поместить необходимые команды в определенный скрипт и разрешить доступ sudo к этому конкретному скрипту.   -  person Raman Sailopal    schedule 06.11.2020
comment
В серьезной компании у вас есть разработка и работа. Операционная управляет системами. У разработки есть максимум разрешение на чтение для некоторых каталогов. Запуск таких скриптов с правами администратора означает, что разработчики могут создавать новых пользователей с правами администратора и взламывать ваши системы. Если вы думаете, что можно запускать сценарии с правами администратора, вы не понимаете систему разрешений Linux. Большинство сборочных машин имеют пароли для производственных систем. Разработчик не должен иметь доступа к этим паролям.   -  person Thomas Sablik    schedule 06.11.2020
comment
@ThomasSablik Понятно. Это честно. Хотя я не в серьезной компании, лол. Я делаю всю разработку и эксплуатацию самостоятельно. Как разрешить Jenkins выполнять команды оболочки с помощью sudo?   -  person Kid_Learning_C    schedule 06.11.2020
comment
@RamanSailopal Как разрешить Jenkins выполнять команды оболочки с помощью sudo?   -  person Kid_Learning_C    schedule 06.11.2020
comment
Взгляните на это — linux.die.net/man/8/visudo   -  person Raman Sailopal    schedule 06.11.2020


Ответы (2)


После долгих поисков и попыток я нашел решение. Ниже приведены краткие сведения о том, что вы можете сделать:

Способ 1

ссылка: отказано в разрешении команды оболочки jenkins build failure

Поскольку все принадлежит пользователю myname, просто добавьте пользователя jenkins в группу myname:

sudo usermod -a -G myname jenkins

и команда groups jenkins должна показать:

> myname@vm:~/myname/jenkins_test$ groups jenkins
> jenkins : jenkins myname

Теперь вы должны перезапустить jenkins, чтобы это изменение вступило в силу:

 `sudo systemctl restart jenkins`

Собери заново, работает. Это метод, который я пробовал.

Метод 2

Я еще не пробовал этот метод. Просто перечисляю его для справки. В сборке Jenkins Execute shell поместите команды с sudo, например. sudo git pull; При построении будет ошибка:

sudo: no tty present and no askpass program specified

Чтобы пользователь jenkins работал от имени sudo, отредактируйте файл /etc/sudoers:

sudo visudo

и добавьте эту строку в конец файла: jenkins ALL=(ALL) NOPASSWD: ALL

Затем перезапустите Дженкинс

ссылка: https://stackoverflow.com/a/37653164/3703783

https://stackoverflow.com/a/24648413/3703783

Способ 3

Я еще не пробовал этот метод. Просто перечисляю его для справки.

измените пользователя jenkins по умолчанию на myname в sudo vi /etc/default/jenkins;
Для успешного перезапуска также необходимо изменить владельца: /var/lib/jenkins

/var/log/jenkins

/var/cache/jenkins

пользователю myname.

ссылка: https://dev-admin-docs.readthedocs.io/en/latest/Jenkins%20CI/Run_Jenkins_Under_Another_Username/

http://blog.manula.org/2013/03/running-jenkins-under-other-user-in.html

Я до сих пор не могу в это поверить... Это такой основной вопрос для всех, кто пытается использовать Jenkins, и все же я не смог найти официальную документацию по этому поводу.

person Kid_Learning_C    schedule 07.11.2020

Я также не смог найти никакой документации об этом первом шаге, необходимом для Linux.

Следуя вашему методу 1, после установки с помощью yast на OpenSUSE 15.1 у меня работает следующее.

  • Изменена запись для пользователя jenkins в /etc/passwd, поэтому группа jenkins является группой разработки.
  • chown /var/lib/jenkins будет принадлежать jenkins:development
  • Изменен umask членов группы разработки, чтобы члены группы имели разрешение на запись.
  • перезапустить хост
person Bruno Schrade    schedule 14.12.2020