我使用 Jenkins 来部署构建。
我们需要将 .war 中的文件解压缩到某个目录中。 我们有一个 .xml 文件,其中包含从 .war 文件中提取文件并启动服务器的命令。
正在正确创建构建,但未发生 .war 提取,并且目标文件夹保留为空。 Jenkins控制台显示以下输出:
[sshexec] bash: jar: command not found
从其他答案中读到,我已将PATH
正确地设置在 .bashrc 或 .profile 中,但我还是面对同样的问题。
答案 0 :(得分:18)
安装Java devel,如下所示:
isBusy = true;
Task.Factory.StartNew(() =>
{
//do some code. It is a new thread
}).ContinueWith((x) =>
{
//do some code after previous task is done. This code runs in the UI thread
isBusy = false;
}, TaskScheduler.FromCurrentSynchronizationContext());
答案 1 :(得分:2)
" [sshexec]"告诉我你正在使用一些Jenkins插件在远程主机上执行命令。
这通常意味着Jenkins执行此操作(或通过本地实现SSH协议来执行此操作):
ssh user@remotehost 'jar arg1 arg2...'
这里发生的是远程主机上的sshd守护程序将执行用户的默认shell并要求shell执行命令行。 shell通常不会作为"登录shell"执行,这意味着shell将跳过登录shell在用户以交互方式登录时通常执行的初始化步骤。
您可以研究man (name of your shell)
以确切了解使用-l
选项执行的shell与使用.profile
选项执行的shell之间的区别。对于bash,它实质上意味着.bashrc
并且jar
将不会被执行,因此您可能不会在那里进行任何PATH修改。
我认为您最好的选择是在执行时提供{{1}}命令的完整路径。
答案 2 :(得分:1)
具体而言,JAVA
bin目录不在您的PATH
变量中。将其添加到PATH
变量。为了搜索可执行文件,操作系统需要有一个要查找的目录列表。因此,添加包含' jar tool in the
PATH`环境变量
注意:对于Windows,路径分隔符为(;
),对于类Unix操作系统,路径分隔符为(:
)
答案 3 :(得分:0)
当您在远程主机上执行命令时,它将调用远程主机上的新Shell。您在当前主机.bashrc文件中设置的PATH不会有任何区别。相反,如果你在远程主机的.bashrc中设置PATH for Java,那么如果你正在运行任何脚本,那么其他东西应该工作,然后提到JAR的完整路径,如/usr/jdk64/jdk1.8.0_40/bin/jar -tf /tmp/jars/abc.jar在远程主机上调用命令时。
两种方法:
export PATH = $ PATH:/usr/jdk64/jdk1.8.0_40/bin --->在远程主机的.bashrc
/usr/jdk64/jdk1.8.0_40/bin/jar -tf /tmp/jars/abc.jar - >从远程主机调用带有JAR完整路径的jar命令。