Извлечение сценария оболочки из параметризованного задания Хадсона - PullRequest
1 голос
/ 20 апреля 2010

У меня есть параметризованное задание Хадсона , используемое для некоторых развертываний AWS , которые на одном этапе сборки запускают определенные команды оболочки.

Однако этот сценарий стал достаточно сложным, и я хочу «извлечь» его из Hudson в отдельный файл сценария, чтобы его можно было легко корректировать. Затем задание Hudson будет просто обновляться из VCS и выполнять внешний файл сценария.

Мой главный вопрос о передаче параметров в скрипт. У меня есть параметр Hudson с именем AMI_ID и несколько других. Сценарий ссылается на эти параметры, как если бы они были переменными среды:

echo "Using AMI $AMI_ID and type $TYPE"

Теперь, это хорошо работает внутри Хадсона, но не в том случае, если Хадсон вызывает внешний скрипт. Могу ли я как-то заставить Хадсона установить параметры в качестве переменных среды, чтобы мне не нужно было менять скрипт? Или мой лучший вариант изменить сценарий так, чтобы он принимал параметры командной строки (и, возможно, назначал их именованным переменным для удобства чтения: ami_id=$1; type=$2; ...)?

Я пробовал что-то подобное, но скрипт не получает правильно замененные значения:

export AMI_ID=$AMI_ID
export TYPE=$TYPE
external-script.sh # this tries to use e.g. $AMI_ID

Бонусный вопрос : когда скрипт находится внутри Гудзона, «вывод консоли» будет содержать как выполненные команды, так и их вывод. Это очень полезно для отладки, когда что-то идет не так со сборкой! Например, здесь строка, начинающаяся с «+», является частью скрипта, а следующая строка - его вывод:

+ ec2-associate-address -K pk.pem -C cert.pem 77.125.116.139 -i i-aa3487fd
ADDRESS 77.125.116.139  i-aa3487fd

При вызове внешнего скрипта вывод Hudson будет содержать только последнюю строку, что затрудняет отладку. Я мог бы cat файл сценария для stdout перед его запуском, но это тоже не оптимально. В сущности, я бы хотел что-то вроде DOS-стиля " echo on " для сценария, который я вызываю из Гудзона - кто-нибудь знает способ добиться этого?

1 Ответ

3 голосов
/ 20 апреля 2010

Не нужно делать export var=$var - попробуйте просто export var. Однако попробуйте:

AMI_ID=$AMI_ID TYPE=$TYPE external-script.sh

все в одной строке.

Чтобы ответить на второй вопрос, попробуйте использовать опцию -x Bash. В своем внешнем сценарии добавьте его в свой шебанг:

#!/bin/bash -x

или объемные части скрипта, которые вы хотите отследить:

set -x
do_stuff
more_stuff
set +x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...