2015-06-04 1 views
0

Я писал некоторые задачи оболочки, которые не могут выполняться, если в сборке Travis CI PR нет защищенных переменных окружения. Существует токен аутентификации, который должен присутствовать, чтобы подтолкнуть некоторую информацию к сборке, поэтому для сборок, созданных из вилок, я хотел бы просто пропустить эти части. Они не критичны.Пропуск частей задания Трэвиса при построении из вилки

Как узнать, происходит ли сборка из вилки?

the documentation around "Environment Variables" От:

TRAVIS_SECURE_ENV_VARS: используются ли или не защищенные вары окружающей среды. Это значение является либо «истинным», либо «ложным».

Это немного неоднозначно. Означает ли это, что используются безопасные переменные среды где угодно (как в, присутствует в .travis.yml)? Что они экспортируются в качестве переменных среды в текущей сборке? Я не уверен, что это хороший способ гарантировать, что я тестирую запрос на перенос, который возник из вилки, но я не видел другого способа сделать это.

Моя первая попытка была код, который выглядел как-то

[ ${TRAVIS_SECURE_ENV_VARS} = "false" ] && exit 0; # more shell code here... 

, но это, как представляется, по-прежнему вперед и толкать вверх без токен аутентификации, в противном случае задача (и сборки). Дальнейшее усложнение заключается в том, что если команда завершится неудачно, выход может содержать токен auth ... так что все из stderr и stdout перенаправляется на /dev/null. Учитывая, что сборки не запускаются в течение нескольких минут, я застрял в ожидании длинного цикла отладки.

Моя следующая попытка просто обошла эту встроенную переменную среды, вместо того, чтобы пытаться напрямую захватить защищенную переменную среды.

[ ${ghToken} -n ] && exit 0; 

Это не так, как указано выше. Я начинаю задаваться вопросом, действительно ли [ $COND ] && exit 0; работает так, как я ожидаю этого в этом контексте. Кажется, все работает отлично, когда я запускаю эквивалентные сценарии оболочки локально (Mac OSX и bash).

Есть ли у Travis встроенный способ определения, строится ли запрос на тягу, исходящий из исходного хранилища, против вилки?

Here is my current work around.

screenshotsClone: { 
    command: ['[ ${ghToken} ] &&', 
       'git submodule add -f', screenshotPullTemplate, 'screenshots > /dev/null 2>&1;'].join(' '), 
    options: { 
     stdout: false, 
     failOnError: false 
    } 
} 

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

ответ

2

Остановить использование grunt-shell для вещей в вашем .travis.yml. Поместите эти задачи оболочки в свои собственные файлы, чтобы вы могли прекратить использование /bin/sh и начать использовать /bin/bash, что и было то, что вы тестировали локально.

Something like this will fix your problems.

Не забудьте отметить shebang как #! /bin/bash, что имеет решающее значение для видов проверок, которые должны происходить на Travis.

1

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

Следовательно, я предлагаю вам использовать -z comparison operator в BASH для обнаружения нулевых строк, потому что оператор -n обнаруживает непустую строку. Непустая безопасная переменная среды будет означать, что вы не используете сборку из вилки.

Мое предложения изменить линию:

[ -z "${ghToken}" ] && exit 0; 

Надеется, что это помогает.

+0

Я не использую bash. Я использую оболочку. Мне потребовалось слишком много времени (чтобы понять это) (http://stackoverflow.com/a/30676941/881224). – Droogans

Смежные вопросы