Мне настраивали пользователя на Ubuntu 14.
Если я проверяю при входе в систему как пользователь
build@linux-build-agent-1:~$ type rvm | head -1
rvm is a function
Однако эта машина будет teamcity агентом...
Когда задание выполняется в контексте teamcity сервиса, мы видим
[13:19:11][Step 1/1] RVM is not a function, selecting rubies with 'rvm use ...' will not work.
[13:19:11][Step 1/1]
[13:19:11][Step 1/1] You need to change your terminal emulator preferences to allow login shell.
[13:19:11][Step 1/1] Sometimes it is required to use `/bin/bash --login` as the command.
[13:19:11][Step 1/1] Please visit https://rvm.io/integration/gnome-terminal/ for an example.
Я попробовал несколько команд, пытающихся вынудить сервис работать в оболочке входа в систему
su - build -c 'source "$HOME/.rvm/scripts/rvm" && /home/build/buildAgent/bin/agent.sh start'
sudo -u build -i bash -lc '/home/build/buildAgent/bin/agent.sh start'
su - build -c '/home/build/buildAgent/bin/agent.sh start'
в /etc/init.d/
сценарий без эффекта.
Если я работаю source "$HOME/.rvm/scripts/rvm
во главе сценария в teamcity затем все в порядке, но существуют многочисленные пользователи, и я не могу попросить, чтобы они все не забыли делать это.
Это, как я установил RVM или..?
Разъясниться:
1) когда я зарегистрирован, поскольку пользователь по SSH rvm установлен правильно и функционирует как ожидалось. Как показано type rvm | head -1
=> 'rvm функция' 2), когда сервис входит в систему, поскольку пользователь rvm не работает правильно.
Я хочу, чтобы rvm работал при выполнении в контексте сервиса так, чтобы пользователи не имели к явно source "$HOME/.rvm/scripts/rvm
в их сценариях сборки
Обычно эта проблема вызывается, не работая как оболочка входа в систему. Таким образом, я должен знать также, как выполнить сервис как оболочку входа в систему. Или как к fangle rvm так, чтобы это могло работать за пределами контекста оболочки входа в систему
Когда Вы работаете su - build -c foo.sh
, Вы запускаете оболочку входа в систему, которая затем запускается foo.sh
. Сценарий foo.sh
, однако, работает в его собственной подоболочке (это - то, как сценарии работают), и тип той оболочки зависит от строки хижины сценария. Так, su - -c foo.sh
не делает foo.sh
выполненный в оболочке входа в систему, это просто выполняет оболочку входа в систему, которая затем запускается foo.sh
.
Так, редактирование /home/build/buildAgent/bin/agent.sh
и измените это:
#!/bin/sh
к этому:
#!/bin/sh -l
Это заставит его работать в оболочке входа в систему и должно заставить его читать /etc/profile
, и ~/.profile
файлы и вводят Вашу функцию. Обратите внимание на то, что ~/.bash_profile
не релевантно здесь. Это - файл, который только читается bash
, и нет sh
который, на Ubuntu, на самом деле dash
.