Jenkins之Windows服务器通过ssh远程发布

 更新时间:2025年09月02日 15:14:07   作者:关关长语  
该文章介绍了在Windows系统中通过SSH插件实现Jenkins远程构建部署的配置方法,包括安装OpenSSH、配置远程服务器连接参数、设置文件传输路径及执行命令,并测试连接确保功能正常

一、安装插件

通过ssh访问远程主机,需要为Windows系统的主机安装Open SSH,防火墙开放22端口,本地Jenkins安装插件安装publish over ssh插件,安装后重启Jenkins服务。

查看任务中构建后操作,可以看到多出选项Send build artifacts over SSH选项,则表明安装成功。

需要的配置相关配置,如果用户为首次使用,则需要转到首页,选择 系统配置添加对应的 SSH 发布配置,首页如下:

二、系统配置

2.1、配置远程SSH服务端

System Configuration-Configure System-Publish over SSH中,配置一个远程ssh连接配置,

各个输入框,用途如下:

  • Passphtase:对应用户私钥的文件加密秘钥,默认可以是空,依据实际情况考虑是否填写。
  • Path to key:用户实际私钥所在文件的绝对或者相对路径,与 Key 考虑二者选择一个即可。
  • Key:用户私钥对应的实际内容,与 Path to key 二者选择一个即可。

配置 SSH 服务地址:

输入框内容用途如下:

  • Name:当前 SSH 服务端配置记录的名称,用于做为记录的唯一辨识,尽量不要重名。
  • Hostname:一般为服务端所属的 IP,其他端口需要通过 高级配置级进行指定。
  • Username:远程访问服务器时,提供的访问用户名,一般为服务端提前配置好的用户名。
  • Remote Directory:远程访问时,非默认访问路径时,需要用户依据实际需求进行指定(Windows仅仅适用于当前盘符)。

​确认配置无误后,点击 Test Configuration 按钮进行测试。配置成功,测如上图返回结果为 Success 字样。

2.2、高级配置

高级配置中,支持通过用户名和密码进行远程访问,同时包含,需要访问的服务端ssh 端口为非22端口时的相关配置,以及代理相关配置操作输入项,此处不一一展开讨论。

SSH Server 配置无误后,点击保存即可。

三、项目添加配置

回到目标项目中,点击构建后项目,选择Send build artifacts over SSH 选项,效果如下:

上述转换 Transfers 输入内容用途如下:

  • Source files 需要上传的文件,可以使用匹配符号,具体查看官方文档。
  • Remove prefix 上传是需要移除的文件前缀,避免拷贝文件时,在服务端生成同样目录层级。
  • Remote directory 上传到远程服务器对应文件目录。
  • Exec command  用于在执行转换后,进行后续的指令操作,方便后续构建的处理操作。

​其中可以使用,Jenkins environment variables,具体可以查看本地地址 http://localhost:8060/env-vars.html/,读者依据实际的部署端口,进行相关环境变量的查看。

参考链接:https://plugins.jenkins.io/publish-over-ssh/

高级配置中,可以添加需要排除的文件,用于在转换过程中,排除上传的文件,** 表示全文本匹配。

笔者案例,填写如下:

确认无后,点击保存。回到项目页面,进行立即构建,查看项目控制台输出如下:

# 省略以上内容
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\ynkenginemap\JenkinsDemo>exit 0 
SSH: Connecting from host [LAPTOP-86GF4FKI]
SSH: Connecting with configuration [localserver] ...
SSH: Disconnecting configuration [localserver] ...
SSH: Transferred 7 file(s)
Finished: SUCCESS

通过 xshell 可以看到对应工作目录中,已经生成一个 jenkins 的文件目录,文件目录中,包含对应本地发布的项目文件。

C:\Users\ggcyuser>dir jenkins                                                                          
 驱动器 C 中的卷是 Windows                                                                            
 卷的序列号是 22DB-1BE1                                                                               
                                                                                                      
 C:\Users\ggcyuser\jenkins 的目录                                                                     
                                                                                                      
2021/10/06  20:35    <DIR>          .                                                                 
2021/10/06  20:35    <DIR>          ..                                                                
2021/10/06  20:35               168 appsettings.Development.json                                      
2021/10/06  20:35           106,809 JenkinsDemo.deps.json                                             
2021/10/06  20:35             9,216 JenkinsDemo.dll                                                   
2021/10/06  20:35           174,592 JenkinsDemo.exe                                                   
2021/10/06  20:35            20,016 JenkinsDemo.pdb                                                   
2021/10/06  20:35               311 JenkinsDemo.runtimeconfig.json                                    
2021/10/06  20:35               555 web.config                                                        
               7 个文件        311,667 字节                                                           
               2 个目录 34,109,632,512 可用字节

此时,可能读者就会问,那如果需要远程访问的文件目录,并不是当前账户所在的根目录如何处理?

其实对于这个问题,分情况处理,主要针对远程账户默认用户目录与非默认目录。

3.1、默认用户目录

默认空间下的子级目录切换可以通过配置的 SSH Servers 进行处理,在配置 SSH Servers 就提到过如下输入字段:

Remote Directory 远程访问时,非默认访问路径时,需要用户依据实际需求进行指定(Windows仅仅适用于当前盘符)。

如果用户有实际需求,可以在当前字段中进行特定目录的目录配置,需要注意的是,目前笔者测试结果为通过 SSH Server 方式仅仅适用于当前Windows服务端的所在盘符,跨盘符操作不支持。

此处为了方便,笔者选择非默认目录,设置为服务器中的目录 jenkins,配置一个新的 SSH Severs,具体内容如下:

项目配置中对应的 SSH Server 修改为当前配置好的 directoryserver

保存后,进行构建,控制台输出如下:

# 省略以上内容
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\ynkenginemap\JenkinsDemo>exit 0 
SSH: Connecting from host [LAPTOP-86GF4FKI]
SSH: Connecting with configuration [directoryserver] ...
SSH: Disconnecting configuration [directoryserver] ...
SSH: Transferred 7 file(s)
Finished: SUCCESS

3.2、非默认目录

虽然无法直接切换目录,但是可以考虑在文件上传后,通过指令方式,将上传的文件进行指定目录的拷贝,此时需要使用的到 Exec command 输入框,进行输入转换之后的文件其他处理操作。

当前指令xcopy /s /y jenkins "E:\Study\Servers\jenkins",表示拷贝并在目标文件夹文件存在时进行强制覆盖操作,在 xshell 中能够正常使用,保存后,进行 Build Now,查看控制台输出结果如下:

# 省略以上内容
C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\ynkenginemap\JenkinsDemo>exit 0 
SSH: Connecting from host [LAPTOP-86GF4FKI]
SSH: Connecting with configuration [localserver] ...
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [localserver] ...
SSH: Transferred 7 file(s)
Finished: SUCCESS

SSH 远程可以直接执行指令,而不考虑文件转换和拷贝,上述操作可以将文件转换和指令执行进行拆分,操作如下:

总结

上述为笔者对自定义构建项目的操作与技巧说明。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何给HttpServletRequest增加消息头

    如何给HttpServletRequest增加消息头

    这篇文章主要介绍了如何给HttpServletRequest增加消息头的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • java中的空指针异常情况以及解决方案

    java中的空指针异常情况以及解决方案

    这篇文章主要介绍了java中的空指针异常情况以及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • SpringBoot解析JSON报错400 Bad Request的解决方案

    SpringBoot解析JSON报错400 Bad Request的解决方案

    在Spring Boot开发中,400 Bad Request错误是常见的客户端错误之一,本文将从问题分析,排查步骤到解决方案进行系统性讲解,帮助开发者高效定位并修复问题
    2025-07-07
  • SpringBoot防止大量请求攻击的实现

    SpringBoot防止大量请求攻击的实现

    在有些特定的时候需要加上IP访问时间限制,防止一个IP多次访问请求,本文主要介绍了SpringBoot防止大量请求攻击的实现,感兴趣的可以了解一下
    2021-11-11
  • feign调用跳过HTTPS的SSL证书校验配置过程

    feign调用跳过HTTPS的SSL证书校验配置过程

    Feign默认验证SSL证书,若服务器使用自签名或内部CA证书会导致连接失败,解决方法是跳过校验,但仅限测试环境,生产环境需严格验证以确保安全
    2025-07-07
  • Spring Boot 集成 Swagger2构建 API文档

    Spring Boot 集成 Swagger2构建 API文档

    这篇文章主要介绍了Spring Boot 集成 Swagger2构建 API文档,通过使用 Swagger,我们只需要按照它所给定的一系列规范去定义接口以及接口的相关信息,然后它就能帮我们自动生成各种格式的接口文档,方便前后端开发者进行前后端联调,下文需要的朋友可以参考一下
    2022-03-03
  • Java设计模式之观察者模式

    Java设计模式之观察者模式

    这篇文章主要介绍了Java设计模式之观察者模式,观察者模式,是一种行为性模型,又叫发布-订阅模式,他定义对象之间一种一对多的依赖关系,使得当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新,需要的朋友可以参考下
    2023-11-11
  • PostMan如何传参给@RequestBody(接受前端参数)

    PostMan如何传参给@RequestBody(接受前端参数)

    这篇文章主要介绍了PostMan如何传参给@RequestBody(接受前端参数),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Springboot3.4.x中的@Bean使用案例

    Springboot3.4.x中的@Bean使用案例

    Spring Boot 3.4.x中@Bean新增defaultCandidate=false属性,用于在存在相同类型Bean时忽略非默认候选者,确保仅实例化一个Bean,下面就来介绍一下如何使用
    2025-08-08
  • java向文件中追加内容与读写文件内容源码实例代码

    java向文件中追加内容与读写文件内容源码实例代码

    这篇文章主要介绍了java向文件中追加内容与读写文件内容源码实例代码的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论