【问题标题】:How can I change the working directory when I run a script with ant sshexec in Jenkins?在 Jenkins 中使用 ant sshexec 运行脚本时如何更改工作目录?
【发布时间】:2012-04-05 16:38:03
【问题描述】:

我有一个 ant 目标,我成功地使用 sshexec-task 在 OpenSuse 11 上使用 tomcat 安装服务器。

当我尝试运行启动新安装的服务器的脚本时,我的问题就出现了。 我需要以 root 身份执行此操作,所以我使用这样的任务:

<sshexec host="${tss.hostname}"
    username="${username}"
    password="${password}"
    trust="true"
    Command="/usr/local/bin/foo/bar/tomcat/bin/startup.sh"
    failonerror="false"/>

问题是我需要从它所在的文件夹运行脚本,因为它会从该位置找到 CATALINA_HOME 和 JAVA_HOME。并且路径“foo/bar”会随着时间而改变,所以我不想永久设置它。 我只想将我的跑步路径更改为正确的路径。

由于我无法像那样启动服务器,我想调查一下并更改脚本,所以我使用“CommandResource =“cmd.txt”而不是直接命令。我想我可以用它来设置 CATALINA_HOME 之前我启动了服务器并以这种方式解决了问题。

这是使用 cmd.txt 时的结果:

  [sshexec] Connecting to foo-bar:22
  [sshexec] cmd : 
  [sshexec] cmd : cd /usr/local/bin/foo/bar/tomcat/bin
  [sshexec] cmd : pwd
  [sshexec] /root
  [sshexec] cmd : echo $PATH
  [sshexec] /usr/java/jdk1.6.0_27/bin:/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin
  [sshexec] cmd : export CATALINA_HOME=$PATH:/usr/local/bin/tibco/tss/4.5.0/tomcat
  [sshexec] cmd : echo $PATH
  [sshexec] /usr/java/jdk1.6.0_27/bin:/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin

这说明cd和export命令都没有任何作用。

我怀疑我需要更改 ssh 的权限。我已经读到我可能需要在 .ssh/config 中进行更改。但我不知道如何或在哪里......

所以,总结一下这个长长的问题:

我需要做什么才能使用在 Jenkins 中运行的 ant 脚本以 root 身份从正确的 tomcat/bin 文件夹运行我的 startup.sh?

【问题讨论】:

  • 您能否将output="sshlog.txt" verbose="true" 添加到您的 sshexec 并发布 sshlog.txt 的内容?
  • 我也怀疑CommandResource 文件中的每一行都在单独的子shell 中执行。
  • 感谢您的意见。我在任务中添加了 output="sshlog.txt" verbose="true" 并再次运行它。遗憾的是 sshlog.txt 是空的。我猜这本身就是一个答案......
  • 通过运行ssh,看看结果是否不同。
  • 会做,但目前我没有时间。尘埃落定后会回到这个...

标签: linux ant ssh jenkins


【解决方案1】:

我发现“cd”在同一行完成时有效...

<sshexec host="${tss.hostname}"
username="${username}"
password="${password}"
trust="true"
Command="(cd /usr/local/bin/foo/bar/tomcat/bin; startup.sh)"
failonerror="false"/>

我实际上并没有使用它来运行 shell 脚本,但我经常需要 ant 更改目录,然后运行 ​​GIT 命令。

【讨论】:

  • 酷,当我需要做更多 sshexec 的事情时,我会试试这个。谢谢。
【解决方案2】:

是的,我也遇到了同样的问题。 cd 命令在 sshexec 中不起作用。另一种方法是将所有命令放在某个 install.sh 文件中并将其 scp 到远程计算机。然后使用 sshexec commandresource 在远程机器上执行这个文件。希望这会有所帮助。

【讨论】:

  • 谢谢。我最终没有使用这种方法,但我怀疑它也会起作用。
猜你喜欢
  • 2018-09-23
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 2012-09-01
  • 1970-01-01
  • 2011-04-16
  • 2013-11-17
相关资源
最近更新 更多