【问题标题】:Help with auto-deployment script with Hudson使用 Hudson 帮助自动部署脚本
【发布时间】:2011-04-19 11:32:51
【问题描述】:

我们正在开发一个需要在 Hudson 的“执行 Shell”步骤中运行的自动部署脚本。目前该脚本读取参数
1. GroupId:ArctifactId:Version:Packaging(项目已Maven化)
2. 服务器名:VahRoot:TcInstance

我需要从 pom.xml 中读取 G:A:V:P 参数,该参数在 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 参数。

【问题讨论】:

  • 为什么不编写一个读取 POm 和所需信息的 java 程序,或者编写一个 Maven 插件来完成这项工作,或者编写一个 Hudson 插件来完成这项工作......

标签: maven continuous-integration hudson continuous-deployment


【解决方案1】:

有几个可用于 hudson (jenkins) 的部署插件可以为您完成这项工作。如果这不适合您:您可以将 hudson 环境变量 WORKSPACE 传递给您的脚本,并且相对于它应该很容易在工作区中找到 pom.xml。

【讨论】:

  • 嗯,是的,我可以这样做。但是工作区可能包含多个 pom,如 pom.xyz.xml , pom.abc.xml 等。我需要获取当前 hudson 作业使用的 pom,然后检索所有 GAVP 参数。有没有办法读取 hudson 配置,无论如何我都会指定 pom 位置?
  • WORKSPACE 变量指向您正在执行的作业的工作空间。如果您为每个 hudson 作业构建 1 个,那么您将只有 1 个 pom.xml。
  • 好的。会试一试。另一个问题,有没有办法可以参考在“执行外壳”步骤之前构建的工件?是的,这在引用要部署的工件方面非常有用。
  • “构建的工件”到底是什么意思。 maven 工件的名称(~项目名称)还是生成的 jar 文件的名称?
  • 工件所在的 nexus 存储库的 URL。
猜你喜欢
  • 1970-01-01
  • 2012-04-18
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2017-04-06
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
相关资源
最近更新 更多