zoukankan      html  css  js  c++  java
  • jenkins连接windows服务器配置

    背景

    有时候针对特殊项目配置,必须使用windows作为服务器使用;对于经常使用jenkins进行项目自动化的构建,所以想到的第一个念头就是如何使用jenkins进行windows项目的构建呢?

    对于linux系统,需要使用ssh进行文件的传输,通过资料筛选和实践,发现windows也是同一原理。

    环境配置

    jenkins服务器:windows系统(windows10)

    web服务器:windows系统(PC2,可以是windows10或者2012)


    windows服务器powershell Server端口号设置

    使用windows服务器,同样也必须支持SSH连接,这里使用的是powershell Server作为中间件,进行传输配置

    powershell Server可以访问官网下载或者如下地址链接:https://pan.baidu.com/s/1iJJis5KGqR0uhXa0OZumDw 提取码:jfwx

    安装完成之后使用管理员身份运行程序:打开配置,如下默认22端口如果被占用,需要修改其他端口号;这里修改端口号为1122;

    image-20201026144220980

    jenkins-服务器putty配置&证书

    客户端(jenkins服务器)连接powershell Server可以使用用户名密码连接或者通过证书连接;证书连接需要通过puttygen生成证书并上传到windows服务器上,如下打开puttygen

    image-20200929104920890

    密钥生成后,可以为密钥设置密码,点击save private key, 保存客户端私钥,保存为自定义后缀名为“.ppk”的文件:

    image-20200929105228292

    之后不要点击save public key,手动复制public key的内容到.txt文件保存(其他任何文件类型皆可),并上传到web服务器端:

    如图

    image-20201026142811190

    powershell Server 证书配置

    web服务器上PowerShell server 配置如下,修改配置后要重启服务:

    image-20201026145115461

    putty连接powershell server配置:

    打开putty,设置IP和端口,connection-SSH-Auth 设置如下

    image-20200929110103542

    然后点击"open"连接powershell server,连接如下:提示输入"rsa-key-20200929",需要输入连接服务器的私钥,

    image-20200929110500236

    输入私钥之后,提示"SSH-Enable powerShell Acess for Windows"表示连接成功,如上图。


    jenkins构建配置

    这样jenkins服务器就可以和web服务器通信了,接下来就是通过jenkins上传war完成项目自动化构建,在jenkins系统配置中设置windows服务器的连接配置,如图

    image-20200929111556987

    配置中需要注意连接的Username、Remote Directory、Passphrase / Password以及Port。配置好之后可以点击[Test Configuration]测试是否配置完成。

    项目自动化构建

    新建一个自由风格的项目,基本配置这里忽略,特别说明构建后的操作如下

    image-20201026150948284

    killJar脚本如下

    @echo off
    D:
    cd D:project	omcat-stj	omcat-rcm-stjin
    ::关闭tomcat
    call shutdown.bat
    :: 休眠10秒
    ping 127.0.0.1 -n 1 >nul
    
    

    jenkins-auto-start脚本如下

    @echo off
    :: 源文件设置
    :: set SourceFile=C:"Program Files"
    software"PowerShell Server 2020"sftproot
    cm*.war
    :: 删除发布文件
    D:
    rd /s/q D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stj
    echo test2
    :: 新建文件夹rcm_stj
    md "D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stj"
    :: XCOPY FILES
    xcopy C:"Program Files"
    software"PowerShell Server 2020"sftproot
    cm*.war D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stj /E /Y
    echo test3
    :: 重命名war包
    ren D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stj
    cm*.war rcm_stj.war
    :: 复制war包会/E会产生空的rcm_stj文件夹,需要删除
    rd /s/q D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stj
    cm_stj
    :: 解压war包
    d:
    cd D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stj
    jar -xvf rcm_stj.war
    :: 休眠10秒
    :: ping 127.0.0.1 -n 10 >nul
    echo test4
    ::替换配置文件
    copy /Y D:projectak
    cm_stjjdbc.properties D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stjWEB-INFclasses
    copy /Y D:projectak
    cm_stjlicense.lic D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stjWEB-INFclasses
    :: call startup.bat
    :: 休眠10秒
    ping 127.0.0.1 -n 10 >nul
    :: 删除发布文件夹中的war包
    del D:project	omcat-stj	omcat-rcm-stjwebapps
    cm_stj*.war
    :: 删除xftp中的所有war文件
    del C:"Program Files"
    software"PowerShell Server 2020"sftproot*.war
    :: call startup.bat
    :: 休眠10秒
    :: ping 127.0.0.1 -n 10 >nul
    ::启动tomcat
    D:
    cd D:project	omcat-stj	omcat-rcm-stjin
    ::关闭tomcat
    call startup.bat
    :: 休眠10秒
    ping 127.0.0.1 -n 10 >nul
    

    脚本执行思路说明流程图如下:

    stateDiagram [*] --> 停止tomcat 停止tomcat --> 删除发布war 删除发布war --> 新建rcm_stj文件夹 新建rcm_stj文件夹 --> 复制重命名war包到该文件夹 复制重命名war包到该文件夹 --> 解压war包 解压war包 --> 替换配置文件 替换配置文件 --> 删除rcm_stj中的war包 删除rcm_stj中的war包 --> 删除sftproot中的war包 删除sftproot中的war包 --> 启动tomcat 启动tomcat --> [*]

    其他补充

    war上传位置说明

    通过putty连接powershell server上传的war的默认位置是在powershell server的安装路径sftproot目录下

    windows脚本命令

    del是删除文件夹的命令
    rd或rmdir是删除文件夹包括文件
    copy是复制单一的文件信息,而xcopy是复制包括文件夹

    错误处理

    在构建时会出现提示如图"ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 960,001 ms]"

    image-20201106170023001

    这个问题经查证是:连接超时,而Jenkins无法从脚本中正确退出。可以参考https://stackoverflow.com/questions/11290540/jenkins-text-finder-unable-to-success-my-build

    解决方法:

    第一步:在构建后操作钟,设置"Exec timeout(ms)"设置为项目构建时间,为毫秒为单位;这里根据项目情况设置为960000;且勾选"Exec in pyt"如图

    image-20201106172922660

    第二步:在Exec command中添加"exit 0"作为结束,如图

    参考

    https://blog.csdn.net/achenyuan/article/details/81166526

    https://blog.csdn.net/achenyuan/article/details/81181347

    https://blog.csdn.net/qq_39720249/article/details/88052325

  • 相关阅读:
    VScode 修改中文字体
    missing KW_END at ')' near '<EOF>'
    SQL inner join, join, left join, right join, full outer join
    SQL字符替换函数translater, replace
    SQL COOKBOOK SQL经典实例代码 笔记第一章代码
    sqlcook sql经典实例 emp dept 创建语句
    dateutil 2.5.0 is the minimum required version python
    安装postgresql后找不到服务 postgresql service
    Postgres psql: 致命错误: 角色 "postgres" 不存在
    【西北师大-2108Java】第十六次作业成绩汇总
  • 原文地址:https://www.cnblogs.com/LOVEYU/p/13879013.html
Copyright © 2011-2022 走看看