jenkins(linux)远程构建windows项目(超详细)
1.背景公司开发的资产管理探针需要在linux、unix、windows上分别部署,使用自动化构建jenkins工具远程部署linux平台容易实现,windows比较折腾,现将个人经验分享。2.环境IP操作系统/版本用途10.66.11.158centos7部署jenkins,版本2.303.110.66.11.159windows2010部署探针(java进程)3.步骤3.1windows...
1.背景
公司开发的资产管理探针需要在linux、unix、windows上分别部署,使用自动化构建jenkins工具远程部署linux平台容易实现,windows比较折腾,现将个人经验分享。
2.环境
IP | 操作系统/版本 | 用途 |
10.66.11.158 | centos7 | 部署jenkins,版本2.303.1 |
10.66.11.159 | windows2010 | 部署探针(java进程) |
3.步骤
3.1windows安装启动OpenSSH服务
参考链接:安装 OpenSSH | Microsoft Docs
Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。
尝试新的跨平台 PowerShell https://aka.ms/pscore6 PS C:\Windows\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0;
Path :
Online : True
RestartNeeded : False
PS C:\Windows\system32> Start-Service sshd;
PS C:\Windows\system32> Set-Service -Name sshd -StartupType 'Automatic';
PS C:\Windows\system32> New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force;
DefaultShell : C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE
PSChildName : OpenSSH
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry
PS C:\Windows\system32>
3.1.1 ssh默认安装在 C:\ProgramData\ssh
3.1.2 修改sshd配置文件,指定根目录
3.1.3 如果保存sshd_config_default提示“你需要TrustedInstaller提供的权限才能对此文件进行更改”,需要修改文件权限
3.1.3.1 右键点击属性,选择安全
3.1.3.2 点击高级选项,更改所有者
3.1.3.3 选择高级后点击立即查找,找到自己本地的计算机用户,将所有者改为本地计算机用户
3.1.3.4 在编辑中更改权限为所有
这样就拥有对文件删除和编辑保存的权限了
3.2 windows安装WinRAR,解压tar.gz压缩包
3.2.1 下载地址:WinRAR archiver, a powerful tool to process RAR and ZIP files
3.2.2 打开安装目录,将WinRAR.exe复制到ssh根目录/tanzhen/ssh下
3.3 windows安装Git,用以执行shell脚本
3.3.1 下载地址:Git - Downloading Package
3.3.2 打开安装目录,将git-bash.exe加入到环境变量
3.4 jenkins安装配置Publish Over SSH
3.3.1 安装Publish Over SSH
3.3.2 配置Publish Over SSH(填写windows主机信息)
参数说明:
Name:服务名称
Hostname:主机IP或主机名
Username:主机登录用户名
Remote Directory:ssh根目录,/代表C:\tanzhen\ssh(取决于sshd_config配置的根目录)
Passphrase/Password:主机登录的密码(明文)
3.3.3 点击Test Configuration验证,返回Success则成功
3.3.4 创建Item,选择Send files or execute commands over SSH
参数说明:
Source files
:准备发送的文件,该文件是相对于这个项目的workspace
目录,也就是$JENKINS_HOME/workspace/xxxx/
。例如要发送/home/jenkins_home/workspace/Server-Demo/src/Hello.java
到目标目录,则设置Source files
为src/Hello.java
。如果要发送src
下的所有文件,可以设置为src/*.*
。
Remove prefix
:例如设置为src
就是只发送Hello.java
文件,如果不填会创建src
目录层级。
Remote directory
:目标目录,比如/usr/local
。
Exec command
:最后执行的指令。
3.5 window编写deploy.bat和deploy.sh脚本
3.4.1 编写deploy.bat脚本
SET sourceFile=C:\tanzhen\ssh\diting-servicesjob-2.0.0.1.tar.gz
SET sourceDir=C:\tanzhen\ssh\diting-servicesjob-2.0.0.1
SET winrar=C:\tanzhen\ssh\WinRAR.exe
SET backupDir=C:\tanzhen\ssh\backup
SET startFile=C:\tanzhen\ssh\diting-servicesjob-2.0.0.1\bin\start.bat
rem 结束进程
FOR /F "tokens=2 delims= " %%P IN ('tasklist ^| findstr "javaw.exe"') DO TaskKill.exe /PID %%P -t -f
FOR /F "tokens=2 delims= " %%P IN ('tasklist ^| findstr "java.exe"') DO TaskKill.exe /PID %%P -t -f
rem 删除原程序目录
if exist %sourceDir% (
rd /s/q %sourceDir%
)
rem 解压tar.gz包
if exist %sourceFile% (
if exist %winrar% (
%winrar% x %sourceFile% .\
)
)
rem 替换配置和启动文件
if exist %backupDir% (
if exist %sourceDir% (
copy %backupDir%\conf\*.yml .\diting-servicesjob-2.0.0.1\conf\
copy %backupDir%\bin\start.bat .\diting-servicesjob-2.0.0.1\bin\
)
)
rem C:\tanzhen\ssh\diting-servicesjob-2.0.0.1\bin\start.bat
rem 启动程序
"C:\Program Files\Git\git-bash.exe" C:\tanzhen\ssh\deploy.sh
3.4.2 编写deploy.sh脚本
pwd
sleep 2
cd diting-servicesjob-2.0.0.1/bin
pwd
sleep 2
WORK_ROOT=/diting-servicesjob-2.0.0.1/bin
echo ${WORK_ROOT}
sleep 3
JAVA_OPTS="$JAVA_OPTS -Drun_dir=$WORK_ROOT"
JAVA_OPTS="$JAVA_OPTS -Xss256k -Xms2048m -Xmx2048m -Xss256k"
JAVA_OPTS="$JAVA_OPTS -Djava.ext.dirs=../lib -Djava.library.path=../lib"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/a:../conf"
echo $JAVA_OPTS
sleep 3
nohup java $JAVA_OPTS -Dfile.encoding=utf-8 com.idss.asm.diting.servicesjob.App &
备注:pwd和sleep只是调试作用。
3.5 构建查看进程是否启动
进程已经启动,至此自动化构建完成
PS:单独再编写deploy.sh脚本而不是在deploy.bat编写原因是:构建的时候报错不成功,没有找到解决方案
更多推荐
所有评论(0)