0

我们正在开发一个自动部署脚本,需要在Hudson的“Execute Shell”步骤中运行。目前该脚本读取参数
1. GroupId:ArctifactId:Version:Packaging(该项目是Mavenized)
2.服务器名称:VahRoot:TcInstance使用Hudson自动部署脚本的帮助

我需要从Hudson作业配置中指定的pom.xml读取G:A:V:P param。尽管Hudson提供了WORKSPACE env-var,但考虑到可能存在当前正在执行的pom名称为pom.xyz.xml的情况,因此很难在工作空间中搜索pom.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 

我需要阅读哈德森配置给我的作业中指定的POM位置,这样我不必要求用户输入摹帮助:A:V:P PARAM。

+0

为什么不写一个Java程序来读取POm和所需的信息,或者编写一个Maven插件来完成这项工作或编写一个Hudson插件来做到这一点...... – khmarbaise 2011-04-19 11:42:10

回答

0

有几个部署插件可用于哈德逊(詹金斯),可以为你做这项工作。如果这不是您的选择:您可以将hudson环境变量WORKSPACE传递给您的脚本,并相对于它应该很容易找到工作区中的pom.xml。

+0

嗯,是的,我可以做到这一点。但工作空间可能包含多pom提到pom.xyz.xml,pom.abc.xml等。我需要找到当前hudson工作使用的pom,然后检索所有的GAVP参数。有没有一种方法可以读取哈德森配置,在这种配置中,我会指定pom的位置? – tulasivk 2011-04-19 11:50:51

+0

WORKSPACE变量指向执行作业的工作区。如果你为每个哈德森作业构建1,那么你将只有1个pom.xml。 – 2011-04-19 12:20:02

+0

好的。会给那一枪。另一个问题,有没有一种方法可以引用在“Execute Shell”步骤之前构建的工件?是的,就提到要部署的工件而言,这是非常有用的。 – tulasivk 2011-04-19 13:07:40