运行 slave 上的 powershell 命令 - Jenkins

Run powershell command on slave - Jenkins

当 运行在从服务器上执行 Jenkins 作业时,我得到了这个控制台输出。该作业应创建一个文件并将其放入 c:\foo\services.csv.

这是作业 powershell 命令:

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

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

[AnonymousJWTApi] $ powershell.exe -NonInteractive -ExecutionPolicy ByPass "& 'C:\Users\xxx\AppData\Local\Temp\hudson1582303083838020200.ps1'"

我在网上发现,当 运行 将脚本放在主机上,从机上时,就会发生错误。

所以我在slave上手动创建了脚本,放到了c:\foo\listServices.ps1。然后在 Jenkins(master)中,此命令在从服务器上获取 运行:“C:\foo\listServices.ps1” 直接从从服务器调用脚本到 运行。

我仍然得到相同的控制台输出……关于“旁路”的某些东西似乎仍然导致它无法工作。 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 脚本或它们的输出,我不知道这一点。

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

可能是权限问题。

Jenkins slave agent 运行ning 为某个用户;要么是您用来启动它的用户,要么是 运行 宁作为服务,那么它将是服务帐户。

用户可能没有写入 C:\Foo 的权限,因此您可以检查一下。

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

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

应该可以。如果是,则更改 C:\Foo 目录的权限,或 运行 slave 作为已具有权限的帐户。

您可以通过以下方法来区分哪个用户正在 运行 服务以及工作区目录所在的位置:

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

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