Установите глобальные переменные среды внутри сценария запуска фазы сборки Xcode.

Я использую Jenkins для создания непрерывной интеграции. У меня довольно много заданий, которые имеют большую часть одного и того же кода конфигурации. Я как раз собираю все это в общий файл сценария, который я хотел бы запустить до и после сборки.

Я не смог понять, как установить некоторые переменные среды в этом скрипте, чтобы их могли видеть как команда сборки Xcode, так и сборка Jenkins.

Кто-нибудь знает возможно ли это?


person Bryan    schedule 06.04.2012    source источник
comment
Возможно, этот ответ может помочь — stackoverflow.com/a/32743908/67824. Он не позволяет вам определять глобальные переменные среды, но позволяет вам изменять настройки сборки xcodeproj, что, по-видимому, является тем, для чего вам нужны переменные среды (по крайней мере, это так для меня).   -  person Ohad Schneider    schedule 09.11.2016


Ответы (2)


Невозможно сделать именно то, что вы просите. Процесс не может изменять переменные среды другого процесса. Шаги до и после, а также фактическая сборка выполняются в разных процессах.

Но вы можете создать сценарий, который задает общие переменные среды, и использовать этот сценарий во всех ваших сборках.

Сначала будет вызвана ваша оболочка для выполнения команд в сценарии, а затем вызовите xcodebuild:

# Note the dot in the beginning of the next line. It is not a typo.
. set_environment.sh
xcodebuild myawesomeapp.xcodeproj

Скрипт может выглядеть так:

export VARIABLE1=value1
export VARIABLE2=value2

То, как именно ваши задания будут совместно использовать сценарий, зависит от вашей среды и варианта использования. Вы можете

  • поместите скрипт в известное место на хосте Jenkins или
  • поместите сценарий в исходное дерево с контролем версий, если все ваши задания используют один и тот же репозиторий или
  • поместите скрипт в собственный репозиторий и создайте сборку Jenkins, которая архивирует скрипт как артефакт сборки. Затем все остальные задания будут использовать плагин «Копировать артефакт», чтобы получить копию скрипта из артефактов задания скрипта.
person sti    schedule 07.04.2012
comment
Я не вижу, как это помогает. Причина, по которой я (и многие другие) изучаю это, заключается в том, чтобы один шаг сборки мог влиять на следующие шаги сборки посредством установки переменных среды. В моем случае было бы достаточно даже установки предопределенного макроса процессора, но ваш ответ не делает ни того, ни другого. Или, может быть, вы имеете в виду, что определенный шаг сборки должен ЗАПИСАТЬ НА ДИСК скрипт, который экспортирует переменные и который запускается всеми другими целями? - person Motti Shneor; 06.01.2016

Из Технические вопросы и ответы Apple QA1067 похоже, что если вы создадите файл /Users/YOU/.MacOSX/environment.plist и заполните его нужными переменными среды, все процессы (запущенные пользователем с файлом environment.plist в своем домашнем каталоге) будут использовать эти переменные среды. Возможно, вам потребуется перезагрузить компьютер (или просто выйти из системы и снова войти), прежде чем вновь запущенный процесс примет переменные.
В этой статье также утверждается, что Xcode также передаст эти переменные сценарию фазы сборки. Я еще не проверял это, но в следующий раз, когда я перезапущу свой MacBook, я сообщу вам, сработало ли это.

С http://developer.apple.com/library/mac/#/legacy/mac/library/qa/qa1067/_index.html

Q: How do I set environment for all processes launched by a specific user?


A: It is actually a fairly simple process to set environment variables for processes launched by a specific user.

Существует специальный файл среды, который loginwindow ищет каждый раз, когда пользователь входит в систему. Файл среды: ~/.MacOSX/environment.plist (будьте осторожны, регистр чувствителен). Где «~» — это домашний каталог интересующего нас пользователя. Вам нужно будет самостоятельно создать каталог .MacOSX с помощью терминала (введя mkdir .MacOSX). Вам также придется создать файл среды самостоятельно. Файл среды на самом деле имеет формат XML/plist (не забудьте добавить расширение .plist в конец имени файла, иначе это не сработает).

person chown    schedule 27.09.2012
comment
Это сработало? Я не смог заставить xcode увидеть мои переменные, используя этот метод... - person brendanjerwin; 29.04.2013