type
status
date
slug
summary
tags
category
icon
password
入门体验
📝 主旨内容

本文章不涉及上图的绿色部分,是个入门体验,只涉及自由风格项目实现流程。本章思维路线:
- 使用spring initializr生成一个springboot项目(加入web依赖)
- 将生成的springboot项目推送到GitHub
- 在Jenkins中从GitHub中拉取代码→Build程序包→分发到程序运行主机
为了以上思路通畅:
- 使用docker部署Jenkins
- 将程序码构建
- jar/war
- docker image
- 准备程序运行主机
- 以一个docker容器作为程序运行主机(需部署好srpingboot运行环境)
- 以docker所在主机作为运行主机(需部署好srpingboot运行环境)
- 分发程序包
- docker镜像方式部署程序容器
- java -jar方式部署服务
补充
- 很多文章都介绍了maven、git、jdk安装。但实际上它们是可选的,可以由Jenkins安装配置
- 若使用自定义的三者,则需要在Jenkins中配置好
正文
spring initializr生成一个springboot-web项目

对该项目做一些修改
新增BasicController.java

可选:修改模块版本
若是发现构建的日志中提醒jdk版本不适合,则修改模块版本。
包名
如下,将会生成包名:bootApp2-0.0.1-SNAPSHOT.jar
GitHub上新建一个公开仓库,然后将生成的boot项目推送到云仓库
- 创建公开仓库:Jenkins中就不需要配置GitHub登录token
- 创建私有仓库:Jenkins中需要配置GitHub登录token
也可使用本文章演示的仓库
部署Jenkins
本文章,采用的是docker容器部署Jenkins
因为需要给Jenkins容器安装maven、jdk、git,所以更好的方式是定制镜像。或完全依靠Jenkins来安装它们。此处需要补充它们的安装
VMware workstation下CentOS Stream 9 :192.168.100.103 物理机:192.168.100.100 ;使用代理客户端:clash
部署命令
以上转换为脚本
接下来,查看容器日志获取Jenkins生成的解锁码
访问8080端口,输入解锁码

接下来,安装插件 & 设置登录账户
选哪个都行。默认方式安装20个插件。若是网络不太好,则自定义安装选择必要的先安装上
一份参考的自定义插件

略过设置登录账户

在开始前,需要配置maven、jdk、git
三者都可不手动安装,由Jenkins帮我们安装。不过要想自定义或是考虑网络问题还是自己安装吧

使用软件包(rpm/apt)安装
Jenkins容器是Ubuntu为基础镜像
如下方式确定JDK、MAVEN的home目录
maven换仓库源 & 设置本地仓库路径
解压缩方式安装的关键(环境变量配置)
在Jenkins中配置maven、jdk、git
Maven

JDK

Git
git是指定git可执行文件路径

在开始前,我们先安装一些必要插件,以支持构建springboot-web项目

Publish Over SSH插件使用前的配置
- remote directory:Jenkins连接到此主机的哪个目录。为空则为$HOME目录(root则为/root/)
- 远程主机要能够SSH登录,建议用密钥而非密码👉详情看后文参考部分

可选:让Jenkins使用代理以能从GitHub拉取
- 要求自备机场订阅

本案例中,准备一台远程主机(注意需要能SSH登录)
不准备使用Jenkins本身来执行部署任务
定制一个docker镜像来作这个主机
待更新:生成密钥对,然后公钥绑定自己,输出私钥的路径 - 在docker build后可实现输出吧?
使用一个现成的虚拟机
构建一个maven项目


进入配置页面,关键步骤是源码地址填写;build前、build、build后
General中的项目填写:是介绍该项目

源码地址填写
- 注意点:分支(branch),云端为master,那么则更改为
*/master

添加一个Pre Steps节点

Build节点:将由maven执行打包命令
- 关键在于goals中,填写的是maven执行命令
- 更多maven命令介绍看后文参考章节


添加Post Steps节点:将打包后的jar包上传到目标主机并执行一些命令
- 添加一个post-build step

- source files:maven打包会输出到生成的target目录中
- remove prefix:去除掉target/,只留下包名*.jar
- Remote directory: 程序包要分发的目标主机中的哪个目录
- 注意:是在前文中publish over ssh插件配置的remote directory路径下;若留空则是${HOME}下
- 也就是说实际上是${HOME}/data
- Exec command
- 在运行项目程序包的主机上执行的命令
- 演示中将执行一个脚本,该脚本需要提前在主机上准备,具体内容看后文参考部分
- 勾选Verbose output in console:详细输出此部分的执行日志

再添加要给Post step : 健康检查

点击保存后,去构建



构建成功后,去程序执行主机查看程序是否有正常运行
扩展:👉给项目加入actuator模块👈实现健康检查
Jenkins只参与DEVOPS流程中的build和delivery两个步骤。
- 意味着程序虽然是通过Jenkins发布的,但它不会理会程序是否正常运行
- 所以它的工作是实现了将构建的package发送到目标主机或加载到目标docker服务中,就successful了。
本节的目的就是通过curl程序检测服务是否启动。作健康检测还可通过监控、k8s集群实现
效果图

项目修改
pom.xml修改
配置健康检查点
在
application.properties 或 application.yml 中配置健康检查端点(默认情况下,Spring Boot 会自动启用健康检查端点)。Jenkins项目配置修改
给post steps节点中添加一个post build step(Execute shell)。意味着Jenkins主机执行shell指令,非远程主机。

🤗 总结归纳
整体步骤是手动,谈不上自动化部署。所以为了实现自动化,接下来需学习使用jenkinsfile的pipeline项目。
- 每次构建都需要每个步骤依次执行
- 不能在Jenkins中完成应用发布状态健康检查
项目被打包成war或是jar,主要依托pom.xml中指定的输出格式,springboot默认是jar格式
📎 参考文章
- 代理客户端:clash
- spring initializr:https://start.spring.io/
- 演示GitHub仓库:https://github.com/LDGcode/jenkinsAPP
ssh生成密钥对与配置
maven命令介绍
GitHub上的代码不一定拉取下来。可让Jenkins代理。也可让GitHub镜像来代替原有的GitHub仓库地址;或是fork为gitee、gitlab等仓库项目
远程主机执行的脚本:startJob.sh
参考文章
- 教你自动部署springboot项目:https://www.51cto.com/article/715617.html
有关以上的问题,欢迎QQ1761461214,一起交流~
- 作者:SmallRookie
- 链接:https://blog.xzptop.sbs/article/1764c9ba-a04e-80de-836a-ca1107a1abcd
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章