在从属服务器上运行Jenkins作业时,我得到了这个控制台输出。作业应该创建一个文件并将其放在c:fooservices.csv
。
Get-Service | Export-CSV c:fooservice.csv
注意这个控制台输出中的"bypass"一词。我无法忘记它。我认为这就是问题所在:
[AnonymousJWTApi] $ powershell.exe -NonInteractive -ExecutionPolicy .exe搭桥","C: xxx AppData 用户当地 Temp hudson1582303083838020200.ps1"
我在网上发现,当一个脚本在主服务器上运行时,这个错误会发生。
因此,我在从属服务器上手动创建了脚本,并将其放在c:foolistServices.ps1
中。然后在詹金斯(主)中,这个命令在从属服务器上运行:“C:foolistServices.ps1”
调用脚本直接从从属服务器运行。
我仍然得到相同的控制台输出…关于"旁路"的事情似乎仍然导致它不工作。csv文件没有放在foo文件夹中。是旁路阻止了它的工作吗?如果是,解决方案是什么?
和完整的控制台输出:
Started by user anonymous
Building remotely on slave1 in workspace C:JenkinsMasterworkspaceAnonymousJWTApi
> git.exe rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git.exe config remote.origin.url C:UsersxxxSourceReposAnonymousJWTApi # timeout=10
Fetching upstream changes from C:UsersxxxSourceReposAnonymousJWTApi
> git.exe --version # timeout=10
> git.exe -c core.askpass=true fetch --tags --progress C:UsersxxxSourceReposAnonymousJWTApi +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:UsersxxxAppDataLocalTemphudson1582303083838020200.ps1'"
Finished: SUCCESS
编辑:文件正在被保存到主…: P
似乎slave不打算托管PowerShell脚本或它们的输出,这是我不知道的。
-ExecutionPolicy Bypass
确保无论计算机或用户的执行策略如何,脚本文件都可以运行。这是正确的,这不是你的问题的原因。
问题可能是权限。
Jenkins从属代理作为某个用户运行;或者是用来启动它的用户,或者如果它作为服务运行,那么它将是服务帐户。
用户可能没有权限写C:Foo
,所以你可以检查一下。
Get-Service | Export-CSV $env:WORKSPACEservice.csv
应该可以。如果是,那么更改C:Foo
目录的权限,或者以已经拥有权限的帐户运行从服务器。
这里有一种方法可以告诉您哪个用户正在运行服务,以及工作空间目录在哪里:
Get-ChildItem env: | Out-String | Set-Content -Path $env:USERPROFILEenv.txt
这将把一个名为env.txt
的文件写入运行脚本的用户的配置文件,其中包含所有的环境变量(包括%WORKSPACE%
)。您只需要浏览每个用户配置文件,看看它在哪里结束,然后您也知道了用户。