У меня мой проект работает на сервере ubuntu, и я все делал через пользователя myname
. Файлы проекта, все связанные каталоги и статические файлы, используемые моим приложением, принадлежат пользователю myname
.
Теперь я хочу настроить проект Jenkins Freestyle для CI/CD на сервере Ubuntu, когда я устанавливаю Jenkins, создается новый пользователь jenkins
.
На этапе сборки, когда jenkins выполняет задание через Execute shell
, он выполняет команды оболочки через пользователя jenkins
вместо пользователя myname
по умолчанию, у которого нет разрешений на что-либо в приложении. Следовательно, сборка Jenkins не может работать:
- он не может выполнить от
git pull origin master
доjenkins
пользователя, чтобы получить последние изменения; - он не может запустить
venv/bin/python myapp.py
для запуска приложения - даже если я изменю владельца
myapp.py
на пользователяjenkins
, запущенный процесс не сможет получить доступ к каким-либо каталогам/хранилищам/статическим файлам с пользователемjenkins
. - Итак, мне придется сделать
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
sudo
, либоsudo -u john
. Первое означает, что разработка имеет полные права администратора в этой системе. Последнее просто неправильный путь. - person Thomas Sablik   schedule 06.11.2020sudo
? - person Kid_Learning_C   schedule 06.11.2020sudo
? - person Kid_Learning_C   schedule 06.11.2020