2016-08-05 24 views
0

这次我有Jenkins问题。我有几个应用服务器,每个应用服务器都有多个tomcat。我想实现的是一个命令选择器。例如:我有APP01,APP02,APP03。每个应用程序服务器都有几个tomcat:tomcat01,tomcat02,tomcat03,.....当我部署时,我运行我的特殊脚本来备份现有应用程序,备份日志,清理,将.war文件放入正确的目录并启动tomcat。该命令是Jenkins - SSH命令执行程序 - 选择器

app-new-execute deploy 

我也-warage(检查.war文件日期),-stop,-start,-kill(如果出现错误)。用户必须向我请求部署,否则他们必须自行登录并执行部署。他们有权(通过sudoers文件)做到这一点 - 但有时候事情会变得混乱。我在Jenkins有多个建筑工作。现在......有可能有选择器 - 例如2下拉列表,用户可以选择服务器(比如说)APP03和tomcat(比方说)TOMCAT06。问题1:有没有可能是JENKINS可以建立我的命令(基于选择)

ssh APP03 sudo su - TOMCAT06 -c 'app-new-execute "deploy"' 

问题2:可以在名单是动态的(txt文件)。原因是 - 我经常删除/移动/删除tomcats。有像(tomcat 01,02,07,08)这样的名称。我会做的是在每台服务器上创建一个名为$(hostname).txt的TXT文件,并且可以从简单脚本(cron,每日)获取一个tomcat数字。例如:echo $(hostname) > $(hostname).txt并使用一些简单的脚本输出tomcat号码,如ll /applications/new/tomcat/ | egrep ^d | grep tomcat | awk '{print $3}。这会给我tomcat01,tomcat03,tomcat07 .... Jenkins可能会从该.txt文件填充每个服务器的tomcats列表。如果不是更好的方法来实现类似的东西?我不是Jenkins的主人 - 我已经设置了多个构建作业(SVN + ANT)。任何建议都是值得欢迎的。问候

进度: 我能够得到扩展选择参数。充当魅力。我得到的服务器以及tomcat。这是(如所述)容易。我拥有的是一个SSH执行者。我选择服务器,键入tomcat号码并可以执行远程SSH。我有SSH密钥认证,并可以成功登录到服务器。詹金斯可以轻松连接到服务器。不过,我有一个SSH问题 - 当执行远程SSH时,Jenkins不能“完成”SSH会话。它停留在旋转的标志等待什么。我的参数是$ {server}(从列表中选择)和$ {tomcat}(输入tomcat号码)。

ssh -t -t [email protected]${server} <<EOF 
sudo su - ${tomcat} -c './deployer_script.sh "deploy"' 
echo "You are deploying app on ${server} to ${tomcat}" 
EOF 

exit 我在做什么错在这里?我可以(从命令行)执行命令

但在服务器上 - 通过SSH登录到应用服务器框。我错过了什么?

我不能做< <'EOF'而不是< < EOF - Jenkins不会理解$ {tomcat}变量。我无法直接以$ {tomcat}的身份登录到服务器 - 安全性。我有一个部署者帐户,有权为每个tomcat运行该脚本(安全问题)感谢您的帮助。

进度更新2. 我无法通过shell退出SSH会话。命令“退出”不起作用。 那里必须有错误。 EOF不退出后。 我错过了什么?

+0

解决:'SSH -t -t app_deployer @ $ {}服务器<< EOF sudo su - $ {tomcat} -c'./deployer_script.sh“deploy”' exit 0 EOF' –

回答

1

例如是可以使用变量使用“参数选择”,并给它一个名称,如APP然后添加选择(app01,app02,app03)与同为TOMCAT(tom01,tom02 ...)

现在詹金斯是能够在外壳使用$ {APP}和$ {TOMCAT}例如:

ssh ${TOMCAT} "sh /path/to/${APP}"

+0

我还没有听说过那个插件:)。会看看。看起来很有前途:)。我认为这是要走的路。 –

+0

完美运作。我做了更改和其他修改(插件),它们都应该如此 –