运行 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%
)。您只需浏览每个用户个人资料以查看其最终位置,然后您就会了解该用户。
当 运行在从服务器上执行 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%
)。您只需浏览每个用户个人资料以查看其最终位置,然后您就会了解该用户。