思路
利用jenkins
+ gitlab
+ powershell server for windows
+ powershell
脚本 实现自动化部署
主要实践步骤
jenkins 操作步骤
- jenkins 安装maven,publish over ssh等插件
- 配置gitlab访问权限,如果未安装ssh可以使用http协议(需要配置用户名和密码)
应用服务器操作步骤
- 在应用服务器安装 powershell server for windows修改默认端口以及在防火墙开通入站权限
- 编写脚本–新开一个窗口运行命令
$WinPID = netstat -aon |findstr port |D:\software\gawk-3.1.6-1-bin\bin\gawk.exe '{print $5}'| Select -First 1
if ( "$WinPID" -ne ""){
taskkill /pid "$WinPID" /f
}
cd "D:\autojenkins"
Copy-Item "D:\jenkinstar\a-1.0.0-SNAPSHOT.jar" "D:\autojenkins\"
Start-Process cmd -ArgumentList '/c java -D"file.encoding=utf-8" -jar a-1.0.0-SNAPSHOT.jar --spring.profiles=dev "&"'
采坑并补填
- powershell脚本的路径中有字符串空格时会出现错误,需要使用“”变成字符串。
Copy-Item : 找不到接受实际参数“2016\sftproot\a-1.0.0-SNAPSHOT.jar”的位置形式参数。
所在位置 D:\script\start_imodel-server.ps1:2 字符: 1
+ Copy-Item D:\software\PowerShell Server 2016\sftproot\a-1.0.0-SNAPSHO ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Copy-Item],ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.CopyItemCommand
java : 错误: 找不到或无法加载主类 .encoding=utf-8
所在位置 D:\script\start_imodel-server.ps1:3 字符: 1
+ java -Dfile.encoding=utf-8 -jar a-1.0.0-SNAPSHOT.jar --spring.profile ...
- 使用Get-ExecutionPolicy确认是否可以被远端执行脚本
Set-ExecutionPolicy RemoteSigned / Unrestricted
- 由于jenkins执行应用服务器的脚本时如果没有在新的命令行窗口执行命令,会将输出结果全部打印在jenkins控制台中,导致构建任务一直在挂起,无法达到自动化部署的运行。
Start-Process cmd -ArgumentList '/c java -D"file.encoding=utf-8" -jar a-1.0.0-SNAPSHOT.jar --spring.profiles=dev "&"'
待补充~~~~~~~~