powershell - 在从机上运行 powershell 命令 - Jenkins

标签 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:\Users\xxx\AppData\Local\Temp\hudson1582303083838020200.ps1'"

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

所以我在从站上手动创建了脚本并将其放入c:\foo\listServices.ps1。然后在 Jenkins(主站)中,此命令在从站上运行:“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从属代理以某个用户身份运行;您用来启动它的用户,或者如果它作为服务运行,那么它将是服务帐户。

用户可能没有写入 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%)。您只需浏览每个用户个人资料即可了解其最终位置,然后您就会了解该用户。

关于powershell - 在从机上运行 powershell 命令 - Jenkins,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39113683/

相关文章:

shell - 在powershell中检查文件是否可读且正常

Jenkins 管道sh返回stdout不起作用

jenkins - Groovy 使用当前构建路径创建文件?

MySQL复制从机错误22

MySQL从不同的Master复制不同的数据库

mysql - 大的mysql表应该被分割,使用合并引擎,主/从还是其他什么?

powershell - 无法将我的类的实例添加到列表<我的类>

c# - Notepad++ 中的 NppExec 不重新编译我的 C# 代码

powershell - 任务调度程序 powershell 脚本永远不会结束

带有个人访问 token 的 Jenkins 中的 Git 克隆永远闲置