Доступ к папке сборки в Xcode Server CI bot run (переменные env?)

Мне нужно получить доступ к папке, которая создается динамически во время каждой интеграции бота. На одном из прогонов это что-то вроде этого -

/Library/Developer/XcodeServer/Integrations/Caches/a3c682dd0c4d569a3bc84e58eab88a48/DerivedData/Build/Products/Debug-iphonesimulator/my.app

Я хотел бы попасть в эту папку в триггере post, как мне это сделать? На основе wwdc-разговора кажется, что используются некоторые переменные среды, такие как "XCS_INTEGRATION_RESULT" и XCS_ERROR_COUNT и т.д.). Также я вижу в журналах что-то вроде PROJECT_DIR.

Но я не могу получить доступ к какой-либо из этих переменных из моей командной строки (это потому, что я другой пользователь, чем бот?) Также где я могу найти список переменных, созданных этой системой CI?

Ответ 1

Я повторяю настройку в бот-журнал, первая строка моего бота script - это просто

set   

Когда вы просматриваете журнал после завершения интеграции, он будет находиться в вашем выводе триггера.

XCS_ANALYZER_WARNING_CHANGE=0
XCS_ANALYZER_WARNING_COUNT=0
XCS_ARCHIVE=/Library/Developer/XcodeServer/Integrations/Integration-76eb5292bd7eff1bfe4160670c2d4576/Archive.xcarchive
XCS_BOT_ID=4f7c7e65532389e2a741d29758466c18
XCS_BOT_NAME='Reader'
XCS_BOT_TINY_ID=00B0A7D
XCS_ERROR_CHANGE=0
XCS_ERROR_COUNT=0
XCS_INTEGRATION_ID=76eb5292bd7eff1bfe4160670c2d4576
XCS_INTEGRATION_NUMBER=15
XCS_INTEGRATION_RESULT=warnings
XCS_INTEGRATION_TINY_ID=FF39BC2
XCS_OUTPUT_DIR=/Library/Developer/XcodeServer/Integrations/Integration-76eb5292bd7eff1bfe4160670c2d4576
XCS_PRODUCT='Reader.ipa'
XCS_SOURCE_DIR=/Library/Developer/XcodeServer/Integrations/Caches/4f7c7e65532389e2a741d29758466c18/Source
XCS_TESTS_CHANGE=0
XCS_TESTS_COUNT=0
XCS_TEST_FAILURE_CHANGE=0
XCS_TEST_FAILURE_COUNT=0
XCS_WARNING_CHANGE=36
XCS_WARNING_COUNT=36

Ответ 2

@Viktor верен, эти переменные существуют только во время их соответствующих сеансов. @Pappy дал большой список этих переменных.

Они могут использоваться в script следующим образом:

IPA_PATH="${XCS_OUTPUT_DIR}/${XCS_BOT_NAME}.ipa"
echo $IPA_PATH

Ответ 3

Я не знаком с Xcode Server, но, как правило, Unix/CI-системами, когда переменные среды экспорта экспортируют его только в текущую сессию.

Если вы хотите постоянно устанавливать переменную среды, вы должны установить ее в файле инициализации, например ~/.bash_profile или ~/.bashrc, чтобы он всегда становился установленным/загружаемым при запуске сеанса оболочки (например: при входе в систему с терминалом - точный файл зависит от того, какую оболочку вы запускаете).

Было бы нецелесообразно экспортировать их настойчиво либо потому, что в этом случае, если вы выполняете разные интеграционные процессы, они просто перезаписывают друг друга экспортированными переменными среды (они будут устанавливать одни и те же переменные среды).

Поэтому системы, которые обмениваются данными через переменные среды, обычно не записывают переменные в файл постоянной инициализации, а просто export переменные. С экспортом переменная доступна из процесса, который экспортирует ее, и из дочерних процессов запускает процесс.

Например, в bash script, если вы экспортируете переменную, вы можете получить к ней доступ из bash script после экспорта и из любой команды/программы, запускаемой с bash script, но при завершении bash script среда будет недоступна.

изменить Просто немного уточнить: вы должны иметь доступ к этим переменным среды из триггера post script, запускаемого Xcode Server, но вы, скорее всего, не сможете получить доступ к ним из своей командной строки.

И где я могу найти список переменных, созданных этой системой CI?

Вы можете распечатать все доступные переменные среды с помощью команды env. В bash script просто введите env в следующей строке:

#!/bin/bash
env

Это будет печатать все доступные переменные среды (а не только те, которые определены Xcode Server!) - вы можете просто передать его в файл для проверки, если хотите, например:

#!/bin/bash
env > $HOME/envinspect.txt

После запуска script вы можете просто открыть файл envinspect.txt в домашней папке пользователя.