在slave上运行powershell命令 - Jenkins
在slave上运行Jenkins作业时,我得到了这个控制台输出。该工作应该创建一个文件并将其放入c:\foo\services.csv
。在slave上运行powershell命令 - Jenkins
这里是工作PowerShell命令:
Get-Service | Export-CSV c:\foo\service.csv
注意在这个控制台输出词“搭桥”。我无法摆脱它。我认为这是问题:
[AnonymousJWTApi] $ powershell.exe -nonInteractive -ExecutionPolicy 搭桥 “& '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脚本或他们的输出,我不知道。
-ExecutionPolicy Bypass
确保可以运行脚本文件,而不管适用于计算机或用户的执行策略如何。这是正确的,这不是你问题的原因。
问题可能是权限。
詹金斯奴隶代理正在作为某个用户运行;无论是您用来启动它的用户,还是作为服务运行的用户,它都将是服务帐户。
用户可能没有权限写入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%
)。您只需浏览每个用户配置文件即可查看其最终位置,然后您就会知道该用户。
如何找到$ env:WORKSPACE的位置?在master的powershell中运行它实际上是c盘,权限被拒绝。但在奴隶似乎工作,我只是不知道在哪里寻找文件 – BeniaminoBaggins
你如何运行奴隶作为一个帐户? – BeniaminoBaggins
@Beniamino_Baggins当您在主设备上定义了从节点时,您指定了FS根目录; 'workspace'将会低于这个级别,然后我认为它会在那里创建一个文件夹,里面有工作的名字。请参阅https://wiki.jenkins-ci.org/x/BAN-Ag – briantist
您是否登录过从站并尝试手动运行该命令?怎么了? –
@ChrisN是的,它在那么做的时候 – BeniaminoBaggins