Используя RVM из сервисного контекста

Мне настраивали пользователя на 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 так, чтобы это могло работать за пределами контекста оболочки входа в систему

2
задан 1 March 2017 в 16:39

1 ответ

Когда Вы работаете 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.

1
ответ дан 2 December 2019 в 04:50

Другие вопросы по тегам:

Похожие вопросы: