Установка в 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 - это переопределение имени исполняемого файла из проекта, так как оно не существует на данный момент.

Надеюсь, это поможет братан.

#!/bin/sh
cd ProjectDirectory
/usr/local/bin/pod install

Установите путь по умолчанию, выполните.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'
Другие вопросы по тегам