问题描述
正在使用Jenkins自动化部署Fullstack应用程序的过程中遇到了问题。该应用程序部署在Windows服务器上。他使用的自动部署脚本是这样的:
@ECHO OFF
REM 设置脚本运行的参数
SET CONFIG_ENV=%1
SET SERVER_DOMAIN=%2
SET ADMIN_LOGIN=%3
SET ADMIN_PASS=%4
SET ARTIFACT_DIR=%~5
SET DROPFOLDER_PATH=%~6
SET DEPLOY_PATH=%~7
SET SERVICE_NAME=%8
REM 输出参数到控制台(以便查看)
ECHO ...
ECHO RUNNING WCF AUTO DEPLOYMENT. PARAMETERS ARE:
ECHO CONFIG_ENV : %CONFIG_ENV%
ECHO SERVER_DOMAIN : %SERVER_DOMAIN%
ECHO ADMIN_LOGIN : %ADMIN_LOGIN%
ECHO ADMIN_PASS : %ADMIN_PASS%
ECHO ARTIFACT_DIR : %ARTIFACT_DIR%
ECHO DROPFOLDER_PATH : %DROPFOLDER_PATH%
ECHO DEPLOY_PATH : %DEPLOY_PATH%
ECHO SERVICE_NAME : %SERVICE_NAME%
ECHO ...
REM 从DSL中选择最新的发布构建
FOR /F "delims=" %%i IN ('dir "%ARTIFACT_DIR%" /b /ad-h /t:c /od') DO SET latest_build=%%i
ECHO DEPLOYING ARTIFACTS IN: %ARTIFACT_DIR%\%latest_build% (latest build)
ECHO DEPLOYING TO "\\%SERVER_DOMAIN%\%DROPFOLDER_PATH%"
ECHO ...
REM 登录到服务器
net use \\%SERVER_DOMAIN% %ADMIN_PASS% /USER:%ADMIN_LOGIN%
REM 复制所有发布构建到服务器上的目标文件夹
ECHO COPYING ARTIFACTS TO DROP FOLDER
ROBOCOPY "%ARTIFACT_DIR%\%latest_build%" "\\%SERVER_DOMAIN%\%DROPFOLDER_PATH%" /MIR /is /it /np /r:1 /w:1 /eta /tee /copy:DT
ECHO ...
REM 停止服务以便更新文件
ECHO STOPPING THE SERVICE
SC \\%SERVER_DOMAIN% STOP %SERVICE_NAME%
ECHO ...
REM 复制所有的.dll和.exe文件
ECHO COPYING .DLL AND .EXE FILES
ROBOCOPY "\\%SERVER_DOMAIN%\%DROPFOLDER_PATH%" "\\%SERVER_DOMAIN%\%DEPLOY_PATH%" *.dll *.exe /is /it /np /r:1 /w:1 /eta /tee /copy:DT
ECHO ...
REM 复制适用于环境的配置文件
ECHO COPYING CONFIGURATION FILE
ROBOCOPY "\\%SERVER_DOMAIN%\%DROPFOLDER_PATH%\Configuration_Files\%CONFIG_ENV%" "\\%SERVER_DOMAIN%\%DEPLOY_PATH%" *.config /is /it /np /r:1 /w:1 /eta /tee /copy:DT
ECHO ...
REM 启动服务
ECHO STARTING THE SERVICE
SC \\%SERVER_DOMAIN% START %SERVICE_NAME%
ECHO ...
REM 完成
ECHO SCRIPT COMPLETE
如果我直接在Jenkins服务器上运行脚本,脚本会在几秒钟内完成。但是,当我将脚本排队在Jenkins作业中运行时,ROBOCOPY命令大约需要一分钟才能复制每个文件。
问题评论:
1. 当您将其作为Jenkins作业运行时,它是在同一台服务器上运行还是在从节点上运行?
2. Jenkins作业在主节点上运行。
3. 它将文件复制到何处?本地还是远程节点?
4. 您是否在进行任何多线程操作,这可能与核心/虚拟CPU有关?
5. 文件正在从远程服务器复制到远程服务器,但服务器位于完全相同的内部网络中。就像我说的,如果直接调用它,脚本就可以正常工作。
6. @JosephFaulkner Jenkins是否在同一网络中?
7. 是的,Jenkins服务器与远程服务器在同一个本地网络中。
8. 您使用的Jenkins版本是什么?
最佳回答:
这个问题已经解决了。Robocopy有很多智能功能,可以检查复制的文件是否实际上有所不同。不幸的是,这个比较过程是耗时的。一旦我们将脚本更改为首先删除目标文件夹中的文件(每次都删除)- 我们应该有一个可重复运行的过程,运行时间约为10-15秒。
评论:
1. 另一种解决方法是在备份模式下复制文件(使用/b标志)。
正文完