Установка в Xcode Bots Trigger
Я запустил триггер предварительной интеграции со следующим
cd "${XCS_PRIMARY_REPO_DIR}"
pwd
pod install --verbose
И это дало мне
pod: command not found
Просто верно? Не могу найти бинарный файл, поэтому я просто укажу его на путь. Легко.
cd "${XCS_PRIMARY_REPO_DIR}"
pwd
/usr/local/bin/pod install --verbose
Что дает мне следующее
env: ruby_executable_hooks: No such file or directory
Это заставляет меня думать, что рубин не настроен правильно для запуска триггеров. Теперь поймите, простая "установка pod" в терминале сервера сборки исправляет все это и работает нормально. Проект определенно построен правильно на сервере сборки.
Так как я думаю, что среда испорчена, я попытаюсь запустить ее из каталога оболочки, которая должна быть настроена хорошо и красиво. Это то, что сделано правильно? Исторически это работало всякий раз, когда мне нужно было запустить ruby на этапе сборки сценария выполнения. Итак, здесь мы нажимаем на курок.
~/.rvm/wrappers/ruby-2.2.3@global/pod install
Я тестирую это в терминале сервера сборки, и это здорово, так что я положил его в триггер, и я получаю это
/Users/XcodeServer/.rvm/wrappers/ruby-2.2.3@global/pod: line 7: exec: pod: not found
:/ Хорошо, я разбираюсь с источником стручка и вижу, что он говорит в строке 7
exec pod "$@"
Я не рубин, но это ничего не значит для меня. О да, и я попытался загрузить cocoapods непосредственно в usr / local / bin, вместо того, чтобы позволить ему установить его в какой-то другой каталог, сначала удалив все cocoapods, а затем выполнив следующее
sudo gem install -n /usr/local/bin cocoapods --pre
Я поставил --pre, потому что мне нужен был 1.1.0.rc.2, чтобы исправить ошибку при сборке swift 3. Любой, кто, все это не работает. Кажется, что все остальные могут просто поставить
cd /path/to/proj/
pod install
в их боты Xcode запускает и заставляет их работать.
3 ответа
Я запустил триггер на сервере сборки, который установил модуль.
Поэтому создайте на вашем сервере сборки сценарий оболочки, который имеет следующее:
#make sure the encoding is correct
export LANG=en_US.UTF-8
# fix the path so Ruby can find it's binaries
export PATH=/usr/local/bin:$PATH
echo "PATH: $PATH"
# update or install depending on what we got
if [ -d ${PODS_DIR} ]; then
# pods directory exist
echo "=================="
echo " Delete Pods"
echo "=================="
# delete cocoapods files if they exist
rm -rf "${PODS_DIR}"
eval rm "${BS_SRCROOT}/Podfile.lock"
eval rm -rf "${BS_SRCROOT}/${BS_EXECUTABLE_NAME}.workspace"
echo "Deleted Pods directory ${PODS_DIR}"
echo "Deleted ${BS_EXECUTABLE_NAME}.workspace"
echo "Deleted Podfile.lock"
else
# no need to delete pod files
echo "Pods NOT detected at ${PODS_DIR}"
fi
echo "=================="
echo " Install Pods"
echo "=================="
# make sure we are where we need to be
eval cd "${BS_SRCROOT}"
pwd
~/.rvm/wrappers/ruby-2.2.3@global/pod install
Не забудьте использовать суффикс 'sh' при именовании скрипта. И тогда в вашем боте триггер запустить скрипт, как это
sh ~/Path/to/Scripts/podUpdateHack.sh
Довольно глупо, но это работает, ¯\_(ツ)_/¯ О, да, все эти глупые уловки есть, потому что BS_SRCROOT - это переменная окружения для ботов XCode, которая ссылается на переменную окружения $XCS_PRIMARY_REPO_DIR. Вы можете просто заменить его на $ XCS_PRIMARY_REPO_DIR и удалить eval. Я не помню, кто определяет PODS_DIR, который может быть из рабочей области, а BS_EXECUTABLE_NAME - это переопределение имени исполняемого файла из проекта, так как оно не существует на данный момент.
Надеюсь, это поможет братан.
Установите путь по умолчанию, выполните.bash_profile, и тогда ваш бот будет работать как обычный пользователь
#!/bin/sh
cd $XCS_PRIMARY_REPO_DIR
PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands"
. ~/.bash_profile
bundle install
pod install --repo-update
Ps bundle install устанавливает все гемы, указанные в моем Gemfile, который выглядит следующим образом (поэтому вы можете иметь разные требования к гемам на бот):
source 'https://rubygems.org'
gem 'cocoapods', '1.3.1'