Помогите со сценарием автоматического развертывания с Hudson

Мы разрабатываем сценарий автоматического развертывания, который необходимо запустить на шаге Hudson «Выполнить оболочку». В настоящее время сценарий читается как param
1. GroupId:ArctifactId:Version:Packaging(Проект Mavenized)
2. Имя сервера: VahRoot: TcInstance

Мне нужно прочитать параметр G:A:V:P из pom.xml, который указан в конфигурации Hudson Job. Хотя Hudson предоставляет WORKSPACE env-var, поиск pom.xml в рабочей области становится затруднительным, учитывая, что может быть сценарий, в котором текущее исполняемое имя pom — pom.xyz.xml.

#!/bin/bash

usage()
{
echo "Usage: $0 -s-r-g-a-v-p-i";
exit 1;
}

if [ $# -lt 14 ] ; then
usage;
fi

# ":" decides which options require an argument
while getopts s:r:g:a:v:p:i: opt
do
case "$opt" in
s) echo "hello $OPTARG";
serverName=$OPTARG;;
r) echo "hello $OPTARG";
vahroot=$OPTARG;;
g) echo "hello $OPTARG";
groupid=$OPTARG;;
a) echo "hello $OPTARG";
artifactid=$OPTARG;;
v) echo "hello $OPTARG";
version=$OPTARG;;
p)echo "hello $OPTARG";
packagetype=$OPTARG;;
i)echo "hello $OPTARG";
tcinstance=$OPTARG;;
\?) usage;;
esac
done
cd $vahroot
echo "Now in $vahroot"
source $vahroot/admin/env/vahenv.sh
tcmgr.sh restart -t all
echo "$?"
if [ $? -ne 0 ]
then
echo "Exception occured"
exit 1;
fi
version_chk="SNAPSHOT"
if [[ $version =~ $version_chk ]]
then
echo "groupid is $groupid artifactid $artifactid version $version packagetype             $packagetype tcinstance $tcinstance"
tcmgr.sh deploy -w nexus://snapshots:$groupid:$artifactid:$version:$packagetype -i     $tcinstance
exit 0;
else
echo "groupid is $groupid artifactid $artifactid version $version packagetype     $packagetype tcinstance $tcinstance"
tcmgr.sh deploy -w nexus://releases:$groupid:$artifactid:$version:$packagetype -i     $tcinstance
exit 0;
fi   

Мне нужна помощь в чтении конфигурации hudson, чтобы указать местоположение pom, указанное в задании, чтобы мне не нужно было просить пользователя вводить параметр G:A:V:P.


person tulasivk    schedule 19.04.2011    source источник
comment
Почему бы не написать java-программу, которая читает POm и необходимую информацию, или написать плагин Maven для выполнения этой работы или написать плагин Hudson для этого...   -  person khmarbaise    schedule 19.04.2011


Ответы (1)


Для hudson (jenkins) доступно несколько подключаемых модулей развертывания, которые могут выполнить эту работу за вас. Если это не вариант для вас: вы можете передать переменную среды hudson WORKSPACE в свой сценарий, и относительно этого будет легко найти pom.xml в рабочей области.

person Stijn Geukens    schedule 19.04.2011
comment
Ну да, я могу это сделать. Но рабочая область может содержать несколько pom, как уже упоминалось, pom.xyz.xml, pom.abc.xml и т. д. Мне нужно добраться до pom, используемого текущим заданием hudson, а затем получить все параметры GAVP. Есть ли способ прочитать конфигурацию hudson, в которой я бы все равно указал местоположение pom? - person tulasivk; 19.04.2011
comment
Переменная WORKSPACE указывает на рабочую область выполняемого вами задания. Если вы создадите 1 для каждого задания hudson, у вас будет только 1 pom.xml. - person Stijn Geukens; 19.04.2011
comment
Хорошо. Попробую. Другой вопрос: есть ли способ, которым я могу ссылаться на артефакт, созданный до шага Execute Shell? Да, это было бы очень полезно с точки зрения ссылки на артефакт, который нужно развернуть. - person tulasivk; 19.04.2011
comment
Что именно вы имеете в виду под «построенным артефактом». Имя артефакта maven (~ имя проекта) или, скорее, имя сгенерированного файла jar? - person Stijn Geukens; 19.04.2011
comment
URL-адрес репозитория Nexus, в котором находится артефакт. - person tulasivk; 20.04.2011
comment
Зачем вам это нужно, вы можете просто выбрать jar/war из целевой папки в ${WORKSPACE}. Хадсон не знает о нексусе, так как это делается на уровне maven, обычно это делается в файле settings.xml, и в этом случае даже pom.xml вам не поможет. - person Stijn Geukens; 20.04.2011