这次我有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不退出后。 我错过了什么?
解决:'SSH -t -t app_deployer @ $ {}服务器<< EOF sudo su - $ {tomcat} -c'./deployer_script.sh“deploy”' exit 0 EOF' –