在jenkins的项目中上配置通过ssh发布jar包到远程服务器
克隆 – 编译 – 测试 – 打包
下载 jenkins.war
下载地址
https://blog.csdn.net/m0_46370483/article/details/121508249
jenkins 2.346.3 应该是 LTS 版本中最后一个支持java8的版本
maven工具安装
初始化
初次登录Jenkins
java -jar jenkins.war
*************************************************************
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
4a86d099da1d4bda9849c00fbfb6a1d2
This may also be found at: /root/.jenkins/secrets/initialAdminPassword
*************************************************************
admin
中文语言设置 Locale
jenkins中文语言设置
https://blog.csdn.net/yu_hongrun/article/details/124147064
安装插件
Jenkins 启动成功之后,接下来我们安装三个必要的插件:
Maven Integration:Maven 构建工具,在jenkins中打jar包。
Publish Over SSH:SSH文件传输工具插件,把Jenkins 打包好的 jar文件上传到应用服务器上。相当于xftp,用于文件上传。
Gitee:协助使用 Gitee 仓库。
Role-based Authorization Strategy:用于控制权限的,可以给不同用户设置管理员、读、写权限。
#常用插件汇总
Build-timeout Plugin:任务构建超时插件
Naginator Plugin:任务重试插件
Build User Vars Plugin:用户变量获取插件
Build Pipeline Plugin View :Pipeline 管道流图表展示插件
Build Flow Plugin:工作流插件,支持DSL脚本定义工作流
Build Graph View Plugin:build Flow插件视图(安装后需要重新才能生效)
Multijob Plugin:多任务插件
Build-timeout Plugin:job构建超时插件
Build Timestamp Plugin :任务log时间戳插件,使得job log的每次输出前面都增加当时的时间
Parameterized Trigger Plugin:这是一个扩展型的插件,使各个job连接的时候可以传递一些job相关的信息
Join Plugin:这也是一个触发job的插件,亮点在于它触发job的条件是等待所有当前job的下游的job都完成才会发生。
Files Found Trigger:检测指定的目录,如果发现指定模式的文件则启动build。
BuildResultTrigger Plugin:根据其他的job的成功或失败来启动此build。
Publish Over SSH ,用于远程服务器发布,将编译生成的jar、war等文件通过ssh发送到远程服务器中指定的目录;
Rebuild Plugin:重新执行插件
ws-cleanup Plugin :workspace清理插件
Cron Column Plugin: 通过定时任务例行的运行一些job
Job Configuration History Plugin:使用心得:使job具备版本管理的能力,diff和rollback功能更是非常赞
HTTP Request Plugin:使用心得:在构建前后可以通过该插件以http形式调用各种api接口实现和内部系统的联动
Periodic Backup:使用心得:备份是运维一个系统必须要保障的事情,该插件的恢复功能可能不可用,需要手工进行,好处在于可以定时备份
Job Import Plugin:使用心得:可以快速导入其他jenkins集群的已有job,需要认证的jenkins系统导入需要提供凭证才可以
Status Monitor Plugin:构建状态插件
Build Monitor View :使用心得:基于该插件可以实现dashboard功能
Build Environment Plugin:构建环境插件,可以进行构建环境比较。
FTP插件:
Monitoring:Monitoring of Jenkins
基础依赖插件:
jQuery Plugin:jQuery插件
作为CI/CD的调度中心,Jenkins具有十八般武艺,目前已有1700多个插件,功能强大到似乎有点过分了。本文主要列出平时我们常用的插件。
以下这两个网站是Jenkins所有的插件及说明
Jenkins Plugins https://plugins.jenkins.io
Jinkins Plugins Wiki https://wiki.jenkins.io
配置插件(清华源)
Global Tool Configuration
Maven配置
配置SSH Server
进入到系统配置的第一个,系统配置。找到publish over ssh
Jenkins通过SSH进行文件传输 https://blog.csdn.net/rockstics/article/details/117379233
Source files **/* 表示Jenkins工作空间下的jar文件。
Remove prefix 该操作是针对上面的source files目录,会移除匹配的目录。通常留空。
Remote directory 目标服务器目录进行。这里我的服务器配置是的/www. 因此这里应该写sites/sskzmz即可。
Exec command 远程服务器执行的命令。例如可以输出 service nginx restart 或者/www/start. sh等命令。
高级:
Exclude files:排除的文件(在你传输目录的时候很有用,使用通配符,例如:/.log,/.tmp,.Git/)
Pattern separator:分隔符(配置Transfer Set Source files的分隔符。如果你这儿更改了,上面的内容也需要更改)
No default excludes:禁止默认的排除规则(具体的自己看帮助)
Make empty dirs:此选项会更改插件的默认行为。默认行为是匹配该文件是否存在,如果存在则创建目录存放。选中此选项会直接创建一个目录存放文件,即使是空目录。(个人理解)
Remote directory is a date format:远程目录建立带日期的文件夹(需要在Remote directory中配置日期格式)
Flatten files:只上传文件,不创建目录(除了远程目录)
Exec timeout (ms):运行脚步的超时时间(毫秒)
Exec in pty:模拟一个终端执行脚步
Add Transfer Set:增加一个配置
4.创建自动化任务
全部准备工作就绪,就开始创建自动化部署任务。拉取代码、打包、上传对应服务器、重启jar包。
构建一个Maven项目
安装maven插件,搜索 Maven Integration
配置
General
Discard old builds 只保留最近5条
1.源码管理 Git 无
Build
D:\CodingProject\v5-cloud\pom.xml
clean install -pl v5-company-service -am -Dmaven.test.skip=true
-Dmaven.repo.local=C:\Users\Lyndon\.m2\repository
mvn命令
参数说明:
-am --also-make 同时构建所列模块的依赖模块;
-amd -also-make-dependents 同时构建依赖于所列模块的模块;
-pl --projects 构建制定的模块,模块间用逗号分隔;
-rf -resume-from 从指定的模块恢复反应堆。
#其他写法
${WORKSPACE_HOME}\pom.xml
${WORKSPACE_HOME}\mall-gateway\pom.xml
clean install -pl mall-base,mall-common -am -Dmaven.test.skip=true 多个基础模块用逗号隔开
https://zhuanlan.zhihu.com/p/337241687
问题 编译时clean 指令没有识别出来,在pom.xml中加入
<properties>
<skipTests>true</skipTests>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<version>2.4.1</version>
</plugin>
</plugins>
</build>
其他
构建环境中勾选“Add timestamps to the Console Output”,代码构建的过程中会将日志打印出来。
不自动触发下游项目
设置即可实现不自动触发下游项目
取消选项:Enable triggering of downstream projects
取消选择:Block downstream trigger when building
Post Steps
Run only if build succeeds 选项
Jenkins 可以在构建中执行shell命令或者windows的batch 命令。
Execute Windows batch command
新增Windows 拷贝文件命令(Execute Windows batch command ),将Maven执行编译的Idea项目内target/*.jar包,拷贝到Jenkins job下的workspace目录。(因为我Windows本地Jenkins的workspace是空目录,到这里卡住好久,这个办法帮到我了)
copy D:\CodingProject\v5-cloud\v5-company-service\target\*.jar D:\jenkins\jobs\v5-company-service\workspace
Send files or execute commands over SSH
将jar包发送到远程Linux指定目录
执行结果
11:48:54 Started by user unknown or anonymous
11:48:54 Running as SYSTEM
11:48:54 Building in workspace D:\jenkins\jobs\v5-company-service\workspace
11:48:54 Parsing POMs
11:48:54 Established TCP socket on 50207
11:48:54 [v5-cloud] $ java -cp D:\jenkins\plugins\maven-plugin\WEB-INF\lib\maven35-agent-1.14.jar;D:\apache-maven-3.8.1\boot\plexus-classworlds-2.6.0.jar;D:\apache-maven-3.8.1/conf/logging jenkins.maven3.agent.Maven35Main D:\apache-maven-3.8.1 D:\jenkins\war\WEB-INF\lib\remoting-4.13.2.jar D:\jenkins\plugins\maven-plugin\WEB-INF\lib\maven35-interceptor-1.14.jar D:\jenkins\plugins\maven-plugin\WEB-INF\lib\maven3-interceptor-commons-1.14.jar 50207
11:48:56 <===[JENKINS REMOTING CAPACITY]===>channel started
11:48:57 Executing Maven: -B -f D:\CodingProject\v5-cloud\pom.xml -s D:\apache-maven-3.8.1\conf\settings.xml -gs D:\apache-maven-3.8.1\conf\settings.xml clean install -pl v5-company-service -am -Dmaven.test.skip=true
11:48:58 [INFO] Scanning for projects...
11:48:58 [INFO] ------------------------------------------------------------------------
11:48:58 [INFO] Reactor Build Order:
11:48:58 [INFO]
11:48:58 [INFO] v5-cloud [pom]
11:48:58 [INFO] v5-base [jar]
11:48:58 [INFO] v5-company-service [jar]
11:48:58 [INFO]
11:48:58 [INFO] -------------------------< com.java:v5-cloud >--------------------------
11:48:58 [INFO] Building v5-cloud 0.0.1-SNAPSHOT [1/3]
11:48:58 [INFO] --------------------------------[ pom ]---------------------------------
11:48:59 [INFO]
11:48:59 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ v5-cloud ---
11:48:59 [INFO]
11:48:59 [INFO] --- spring-boot-maven-plugin:2.6.3:repackage (default) @ v5-cloud ---
11:49:00 [INFO]
11:49:00 [INFO] --- maven-install-plugin:2.4:install (default-install) @ v5-cloud ---
11:49:00 [INFO] Installing D:\CodingProject\v5-cloud\pom.xml to D:\repository\com\java\v5-cloud\0.0.1-SNAPSHOT\v5-cloud-0.0.1-SNAPSHOT.pom
11:49:00 [INFO]
11:49:00 [INFO] --------------------------< com.java:v5-base >--------------------------
11:49:00 [INFO] Building v5-base 0.0.1-SNAPSHOT [2/3]
11:49:00 [INFO] --------------------------------[ jar ]---------------------------------
11:49:00 [INFO]
11:49:00 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ v5-base ---
11:49:00 [INFO] Deleting D:\CodingProject\v5-cloud\v5-base\target
11:49:00 [INFO]
11:49:00 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ v5-base ---
11:49:01 [INFO] Using 'UTF-8' encoding to copy filtered resources.
11:49:01 [INFO] Copying 0 resource
11:49:01 [INFO]
11:49:01 [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ v5-base ---
11:49:01 [INFO] Changes detected - recompiling the module!
11:49:01 [INFO] Compiling 17 source files to D:\CodingProject\v5-cloud\v5-base\target\classes
11:49:04 [INFO] /D:/CodingProject/v5-cloud/v5-base/src/main/java/com/java/utils/QRCodeUtil.java: D:\CodingProject\v5-cloud\v5-base\src\main\java\com\java\utils\QRCodeUtil.java使用了未经检查或不安全的操作。
11:49:04 [INFO] /D:/CodingProject/v5-cloud/v5-base/src/main/java/com/java/utils/QRCodeUtil.java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
11:49:04 [INFO]
11:49:04 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ v5-base ---
11:49:04 [INFO] Not copying test resources
11:49:04 [INFO]
11:49:04 [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ v5-base ---
11:49:04 [INFO] Not compiling test sources
11:49:04 [INFO]
11:49:04 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ v5-base ---
11:49:04 [INFO] Tests are skipped.
11:49:04 [INFO]
11:49:04 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ v5-base ---
11:49:05 [INFO] Building jar: D:\CodingProject\v5-cloud\v5-base\target\v5-base-0.0.1-SNAPSHOT.jar
11:49:05 [INFO]
11:49:05 [INFO] --- spring-boot-maven-plugin:2.6.3:repackage (default) @ v5-base ---
11:49:05 [INFO] Attaching repackaged archive D:\CodingProject\v5-cloud\v5-base\target\v5-base-0.0.1-SNAPSHOT-exec.jar with classifier exec
11:49:05 [INFO]
11:49:05 [INFO] --- maven-install-plugin:2.4:install (default-install) @ v5-base ---
11:49:05 [INFO] Installing D:\CodingProject\v5-cloud\v5-base\target\v5-base-0.0.1-SNAPSHOT.jar to D:\repository\com\java\v5-base\0.0.1-SNAPSHOT\v5-base-0.0.1-SNAPSHOT.jar
11:49:05 [INFO] Installing D:\CodingProject\v5-cloud\v5-base\pom.xml to D:\repository\com\java\v5-base\0.0.1-SNAPSHOT\v5-base-0.0.1-SNAPSHOT.pom
11:49:05 [INFO] Installing D:\CodingProject\v5-cloud\v5-base\target\v5-base-0.0.1-SNAPSHOT-exec.jar to D:\repository\com\java\v5-base\0.0.1-SNAPSHOT\v5-base-0.0.1-SNAPSHOT-exec.jar
11:49:06 [INFO]
11:49:06 [INFO] --------------------< com.java:v5-company-service >---------------------
11:49:06 [INFO] Building v5-company-service 0.0.1-SNAPSHOT [3/3]
11:49:06 [INFO] --------------------------------[ jar ]---------------------------------
11:49:06 [INFO]
11:49:06 [INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ v5-company-service ---
11:49:06 [INFO] Deleting D:\CodingProject\v5-cloud\v5-company-service\target
11:49:07 [INFO]
11:49:07 [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ v5-company-service ---
11:49:07 [INFO] Using 'UTF-8' encoding to copy filtered resources.
11:49:07 [INFO] Copying 28 resources
11:49:07 [INFO]
11:49:07 [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ v5-company-service ---
11:49:07 [INFO] Changes detected - recompiling the module!
11:49:07 [INFO] Compiling 170 source files to D:\CodingProject\v5-cloud\v5-company-service\target\classes
11:49:15 [INFO]
11:49:15 [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ v5-company-service ---
11:49:15 [INFO] Not copying test resources
11:49:15 [INFO]
11:49:15 [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ v5-company-service ---
11:49:15 [INFO] Not compiling test sources
11:49:15 [INFO]
11:49:15 [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ v5-company-service ---
11:49:15 [INFO] Tests are skipped.
11:49:15 [INFO]
11:49:15 [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ v5-company-service ---
11:49:15 [INFO] Building jar: D:\CodingProject\v5-cloud\v5-company-service\target\v5-company-service-0.0.1-SNAPSHOT.jar
11:49:15 [INFO]
11:49:15 [INFO] --- spring-boot-maven-plugin:2.6.3:repackage (default) @ v5-company-service ---
11:49:15 [INFO] Replacing main artifact with repackaged archive
11:49:15 [INFO]
11:49:15 [INFO] --- maven-install-plugin:2.4:install (default-install) @ v5-company-service ---
11:49:15 [INFO] Installing D:\CodingProject\v5-cloud\v5-company-service\target\v5-company-service-0.0.1-SNAPSHOT.jar to D:\repository\com\java\v5-company-service\0.0.1-SNAPSHOT\v5-company-service-0.0.1-SNAPSHOT.jar
11:49:15 [INFO] Installing D:\CodingProject\v5-cloud\v5-company-service\pom.xml to D:\repository\com\java\v5-company-service\0.0.1-SNAPSHOT\v5-company-service-0.0.1-SNAPSHOT.pom
11:49:17 [INFO] ------------------------------------------------------------------------
11:49:17 [INFO] Reactor Summary for v5-cloud 0.0.1-SNAPSHOT:
11:49:17 [INFO]
11:49:17 [INFO] v5-cloud ........................................... SUCCESS [ 1.627 s]
11:49:17 [INFO] v5-base ............................................ SUCCESS [ 5.031 s]
11:49:17 [INFO] v5-company-service ................................. SUCCESS [ 9.658 s]
11:49:17 [INFO] ------------------------------------------------------------------------
11:49:17 [INFO] BUILD SUCCESS
11:49:17 [INFO] ------------------------------------------------------------------------
11:49:17 [INFO] Total time: 18.951 s
11:49:17 [INFO] Finished at: 2022-11-21T11:49:17+08:00
11:49:17 [INFO] ------------------------------------------------------------------------
11:49:17 Waiting for Jenkins to finish collecting data
11:49:30 [JENKINS] Archiving D:\CodingProject\v5-cloud\pom.xml to com.java/v5-cloud/0.0.1-SNAPSHOT/v5-cloud-0.0.1-SNAPSHOT.pom
11:49:30 [JENKINS] Archiving D:\CodingProject\v5-cloud\v5-company-service\pom.xml to com.java/v5-company-service/0.0.1-SNAPSHOT/v5-company-service-0.0.1-SNAPSHOT.pom
11:49:30 [JENKINS] Archiving D:\CodingProject\v5-cloud\v5-company-service\target\v5-company-service-0.0.1-SNAPSHOT.jar to com.java/v5-company-service/0.0.1-SNAPSHOT/v5-company-service-0.0.1-SNAPSHOT.jar
11:49:31 [JENKINS] Archiving D:\CodingProject\v5-cloud\v5-base\pom.xml to com.java/v5-base/0.0.1-SNAPSHOT/v5-base-0.0.1-SNAPSHOT.pom
11:49:31 [JENKINS] Archiving D:\CodingProject\v5-cloud\v5-base\target\v5-base-0.0.1-SNAPSHOT.jar to com.java/v5-base/0.0.1-SNAPSHOT/v5-base-0.0.1-SNAPSHOT.jar
11:49:31 [JENKINS] Archiving D:\CodingProject\v5-cloud\v5-base\target\v5-base-0.0.1-SNAPSHOT-exec.jar to com.java/v5-base/0.0.1-SNAPSHOT/v5-base-0.0.1-SNAPSHOT-exec.jar
11:49:31 channel stopped
11:49:31 [workspace] $ cmd /c call C:\Users\ADMINI~1\AppData\Local\Temp\jenkins8965795402839122703.bat
11:49:31
11:49:31 D:\jenkins\jobs\v5-company-service\workspace>copy D:\CodingProject\v5-cloud\v5-company-service\target\*.jar D:\jenkins\jobs\v5-company-service\workspace
11:49:31 D:\CodingProject\v5-cloud\v5-company-service\target\v5-company-service-0.0.1-SNAPSHOT.jar
11:49:31 已复制 1 个文件。
11:49:31
11:49:31 D:\jenkins\jobs\v5-company-service\workspace>exit 0
11:49:31 SSH: Connecting from host [WIUTT6AD99JP027]
11:49:31 SSH: Connecting with configuration [V5 Server] ...
11:49:41 SSH: EXEC: completed after 202 ms
11:49:41 SSH: Disconnecting configuration [V5 Server] ...
11:49:41 SSH: Transferred 1 file(s)
11:49:47 Finished: SUCCESS
Git
Additional Behaviours
Advanced clone behaviours
克隆和拉取操作的超时时间(分钟)——默认是10分钟
配置输出html报告,自动化测试等
TestNG
问题
SSH UNSTABLE
jenkins构建UNSTABLE原因及解决
https://blog.csdn.net/hejingfang123/article/details/121320180
SSH: Disconnecting configuration [TestServer001] ...
ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [127]]
Build step 'Send files or execute commands over SSH' changed build result to UNSTABLE
Finished: UNSTABLE
[127]代表的意思是没有找到执行文件的目录,那么把执行文件配对了就能解决
SSH: Current build result is [NOT_BUILT], not going to run.
参考资料
使用Jenkins部署SpringBoot 使用密钥方式登录目标发布服务器
https://www.cnblogs.com/JpfBlog66/p/14237889.html
Jenkins部署安装
https://blog.csdn.net/m0_46370483/article/details/121508249
Jenkins docker
https://mp.weixin.qq.com/s/XCjntYGPb4Q0sVKN60PGGA
Jenkins 用户手册
https://www.jenkins.io/zh/doc/
Jenkins可用环境变量
https://www.cnblogs.com/Dengv5/p/16466784.html