我正在配置Jenkins作业,Jenkins slave安装在Windows服务器(A)中。我想将项目构建输出文件夹复制到另一个Windows服务器(B)。
我可以在服务器A上手动执行批处理文件,其中包含以下内容。
powershell -executionpolicy remotesigned -Command Copy-Item "C:\Jenkins\workspace\DEV_Build\DEPLOY\UAT\build" -Destination "\\SYDUATAPP01\E$\build" -recurse
然而,当我通过Jenkins执行这个批处理文件时,我收到一个错误" Access Denied"
Access is denied
+ CategoryInfo : NotSpecified: (:) [Copy-Item], UnauthorizedAcces
sException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.Pow
erShell.Commands.CopyItemCommand
感谢您的帮助.....如果通过powershell无法实现,我想知道我在Jenkins工作中复制文件的其他选择
答案 0 :(得分:1)
作为管理员,检查您是否将-executionpolicy
设置为预期
powershell get-executionpolicy
如果没有那么作为管理员,运行:
powershell set-executionpolicy remotesigned -force
然后我不能100%确定为什么要将其作为批处理文件运行,而只是将其另存为.ps1文件。
Copy-Item -Path "C:\Jenkins\workspace\DEV_Build\DEPLOY\UAT\build" -Destination "\\SYDUATAPP01\E$\build" -recurse
您还可以使用-Force -PassThru -Verbose
如果您仍想将其作为批处理文件运行,则只需运行
powershell Copy-Item -Path "C:\Jenkins\workspace\DEV_Build\DEPLOY\UAT\build" -Destination "\\\SYDUATAPP01\E$\build" -recurse
编辑要以管理员身份运行脚本,您可以将其复制到脚本的最顶层。它基本上只创建一个VBS文件,以管理员身份启动批处理。最初它会弹出UAC提示,但它只是一次交易,从那里它将以管理员身份每次运行脚本。
@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
echo Checking privileges.
goto UPrompt
) else ( goto Admin )
:UPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\Admin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\Admin.vbs"
"%temp%\Admin.vbs"
exit /B
:Admin
if exist "%temp%\getadmin.vbs" ( del "%temp%\Admin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
:----------------- Copy the rest of your Batch below this line------
答案 1 :(得分:0)
@Gergard,非常感谢你的帮助。我尝试将提供的代码段作为管理员运行。然而,没有任何效果。执行政策被重新调整。
最后,下面的步骤解决了我的问题;
我在Windows远程奴隶上安装了Powershell插件(1.3)。 Powershell 1.3,由" ByPass"执行政策
并从powershell添加了一个步骤来复制项目。
Copy-Item"源路径" -Destination" \ destination path" -recurse
上述步骤并未解决问题,仍然抱怨未经授权。
然后我配置了jenkins远程从属进程 - >属性 - >以管理员帐户运行。
这解决了问题,现在我能够成功复制文件。