在slave上运行powershell命令 - Jenkins

时间:2016-08-24 02:55:09

标签: powershell jenkins master-slave

我在从属服务器上运行Jenkins作业时获得此控制台输出。作业应该创建一个文件并将其放在c:\foo\services.csv

这是作业powershell命令:

Get-Service | Export-CSV c:\foo\service.csv

请注意此控制台输出中的“bypass”一词。我无法超越它。我认为这是问题所在:

  

[AnonymousJWTApi] $ powershell.exe -NonInteractive -ExecutionPolicy   ByPass“&   'C:\用户\ XXX \应用程序数据\本地\ TEMP \ hudson1582303083838020200.ps1'“

我在网上发现,当在主服务器上运行脚本时,会发生错误。

所以我手动在奴隶上创建了脚本并将其放在c:\foo\listServices.ps1中。然后在Jenkins(master)中,此命令在slave:“C:\foo\listServices.ps1”上运行,以调用脚本直接从slave运行。

我仍然得到相同的控制台输出......关于“绕过”的事情似乎仍然导致它无法正常工作。 csv文件未放在foo文件夹中。是旁路阻止它工作,如果是,那么解决方案是什么?

完整的控制台输出:

Started by user anonymous
Building remotely on slave1 in workspace C:\Jenkins\Master\workspace\AnonymousJWTApi
 > git.exe rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git.exe config remote.origin.url C:\Users\xxx\Source\Repos\AnonymousJWTApi # timeout=10
Fetching upstream changes from C:\Users\xxx\Source\Repos\AnonymousJWTApi
 > git.exe --version # timeout=10
 > git.exe -c core.askpass=true fetch --tags --progress C:\Users\xxx\Source\Repos\AnonymousJWTApi +refs/heads/*:refs/remotes/origin/*
Seen branch in repository origin/master
Seen 1 remote branch
Checking out Revision a7087f81af855cc96b8763a5ec66b96c19a44a30 (origin/master)
 > git.exe config core.sparsecheckout # timeout=10
 > git.exe checkout -f a7087f81af855cc96b8763a5ec66b96c19a44a30
 > git.exe rev-list a7087f81af855cc96b8763a5ec66b96c19a44a30 # timeout=10
[AnonymousJWTApi] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\xxx\AppData\Local\Temp\hudson1582303083838020200.ps1'"
Finished: SUCCESS

编辑:文件已保存到主文件...:P

似乎奴隶并不打算托管PowerShell脚本或它们的输出,我不知道。

1 个答案:

答案 0 :(得分:2)

-ExecutionPolicy Bypass确保无论计算机或用户的执行策略如何,都可以运行脚本文件。这是正确的,这不是你问题的原因。

问题可能是权限。

Jenkins slave代理正在以某个用户身份运行;无论是您用来启动它的用户,还是作为服务运行的用户,它都将是服务帐户。

用户可能无权写信C:\Foo,因此您可以查看。

另一种测试方法是写入工作区目录,所以执行以下操作:

Get-Service | Export-CSV $env:WORKSPACE\service.csv

那应该有用。如果是,则更改C:\Foo目录的权限,或者将奴隶作为已拥有权限的帐户运行。

这是一种方法,您可以告诉哪个用户正在运行该服务,以及工作区目录的位置:

Get-ChildItem env:\ | Out-String | Set-Content -Path $env:USERPROFILE\env.txt

这会将名为env.txt的文件写入运行脚本的用户的配置文件中,其中包含所有环境变量(包括%WORKSPACE%)。您只需浏览每个用户个人资料以查看其结束位置,然后您也将了解该用户。