通过Jenkins使用psexec
运行远程批处理文件失败。使用来自奴隶的psexec
直接运行相同的批处理文件可以直接使用。
让我提供一些更多信息。 Jenkins及其奴隶与我们的目标机器位于一个单独的域中。
当我像这样运行批处理文件时:
"D:\Temp\PsTools\PsExec.exe" \\<targetmachine> -u <targetdomain\targetdomainuser> -p <pwd> -accepteula "d:\temp\remotescript.bat" arg1 arg2
直接来自奴隶(远程桌面接管机器并打开命令提示符),这非常有效。
当在Jenkins的Windows批处理构建步骤中输入它时,没有可见的输出,我只看到一个微调器,但没有任何事情发生,并且构建挂起排队任何其他构建创建大量积压。显然我得到了一个失败的审计,我的Jenkins用户尝试登录到目标计算机,但是我在目标计算机上指定了一个具有管理员权限的域用户(目标计算机域的域用户)。
有没有人知道为什么用户尝试使用除提供的凭据之外的任何其他凭据登录以及为什么这样可以直接从Jenkins-slave运行它?
或者任何其他实现此目的的方法(在远程计算机上运行批处理文件)都非常受欢迎。
答案 0 :(得分:6)
这是psexec的一个臭名昭着的问题:
http://forum.sysinternals.com/psexec-always-hangs-when-run-from-java_topic5013.html
Program output lost when passed through PsExec
您可以尝试使用xCmd: http://feldkir.ch/xcmd.htm (它不会对localhost起作用)
答案 1 :(得分:6)
PAExec是PSExec的功能性克隆,让我们通过Jenkins等看到输出。
<强> http://www.poweradmin.com/paexec/ 强>
XCmd是我们在惠普使用的,但出于某种原因,它不适用于我目前的演出。
我不知道PAExec何时出现,但它似乎是一个理想的解决方案。发现它(今天)后不久,我发现了一个非常长/涉及的Jenkins部署管道的间歇性问题。
答案 2 :(得分:2)
试试这个,这将有效
"D:\Temp\PsTools\PsExec.exe" \\\\remoteMachine -u username -p password /accepteula -h cmd /c "C:\remotescript.bat"
答案 3 :(得分:-1)
尝试几件事......
在命令中的acceptteula之后添加参数选项0,该参数应该终止任何挂起并开始处理psexec的现有psexec进程
验证机器是否为32位或64位..
对于64位,在C:\ Windows \ system32中搜索psexec 对于32位,在C:\ Windows \ SysWOW64中搜索psexec
在jenkins作业中,您可以将msbuild版本设置为64 BIT或32 BIT,并且它应该按预期工作。