type
status
date
slug
summary
tags
category
icon
password
😀
入门体验
 

📝 主旨内容

notion image
本文章不涉及上图的绿色部分,是个入门体验,只涉及自由风格项目实现流程。本章思维路线:
  • 使用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项目
notion image
对该项目做一些修改
新增BasicController.java
notion image
可选:修改模块版本
若是发现构建的日志中提醒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端口,输入解锁码
notion image
接下来,安装插件 & 设置登录账户
选哪个都行。默认方式安装20个插件。若是网络不太好,则自定义安装选择必要的先安装上
一份参考的自定义插件
notion image
略过设置登录账户
notion image
在开始前,需要配置maven、jdk、git
三者都可不手动安装,由Jenkins帮我们安装。不过要想自定义或是考虑网络问题还是自己安装吧
notion image
使用软件包(rpm/apt)安装
Jenkins容器是Ubuntu为基础镜像
如下方式确定JDK、MAVEN的home目录
 
maven换仓库源 & 设置本地仓库路径
解压缩方式安装的关键(环境变量配置)
在Jenkins中配置maven、jdk、git
Maven
notion image
JDK
notion image
Git
git是指定git可执行文件路径
notion image
 
 
在开始前,我们先安装一些必要插件,以支持构建springboot-web项目
notion image
Publish Over SSH插件使用前的配置
  • remote directory:Jenkins连接到此主机的哪个目录。为空则为$HOME目录(root则为/root/)
  • 远程主机要能够SSH登录,建议用密钥而非密码👉详情看后文参考部分
notion image
可选:让Jenkins使用代理以能从GitHub拉取
  • 要求自备机场订阅
notion image
本案例中,准备一台远程主机(注意需要能SSH登录)
不准备使用Jenkins本身来执行部署任务
定制一个docker镜像来作这个主机
待更新:生成密钥对,然后公钥绑定自己,输出私钥的路径 - 在docker build后可实现输出吧?
使用一个现成的虚拟机

构建一个maven项目
notion image
notion image
进入配置页面,关键步骤是源码地址填写;build前、build、build后
General中的项目填写:是介绍该项目
notion image
源码地址填写
  • 注意点:分支(branch),云端为master,那么则更改为*/master
notion image
添加一个Pre Steps节点
notion image
Build节点:将由maven执行打包命令
  • 关键在于goals中,填写的是maven执行命令
    • 更多maven命令介绍看后文参考章节
notion image
notion image
添加Post Steps节点:将打包后的jar包上传到目标主机并执行一些命令
  • 添加一个post-build step
notion image
  • source files:maven打包会输出到生成的target目录中
  • remove prefix:去除掉target/,只留下包名*.jar
  • Remote directory: 程序包要分发的目标主机中的哪个目录
    • 注意:是在前文中publish over ssh插件配置的remote directory路径下;若留空则是${HOME}下
    • 也就是说实际上是${HOME}/data
  • Exec command
    • 在运行项目程序包的主机上执行的命令
    • 演示中将执行一个脚本,该脚本需要提前在主机上准备,具体内容看后文参考部分
  • 勾选Verbose output in console:详细输出此部分的执行日志
notion image
再添加要给Post step : 健康检查
notion image
 
点击保存后,去构建 
notion image
notion image
notion image
构建成功后,去程序执行主机查看程序是否有正常运行
扩展:👉给项目加入actuator模块👈实现健康检查
Jenkins只参与DEVOPS流程中的build和delivery两个步骤。
  • 意味着程序虽然是通过Jenkins发布的,但它不会理会程序是否正常运行
  • 所以它的工作是实现了将构建的package发送到目标主机或加载到目标docker服务中,就successful了。
本节的目的就是通过curl程序检测服务是否启动。作健康检测还可通过监控、k8s集群实现
效果图
notion image
项目修改
pom.xml修改
配置健康检查点
application.propertiesapplication.yml 中配置健康检查端点(默认情况下,Spring Boot 会自动启用健康检查端点)。
Jenkins项目配置修改
给post steps节点中添加一个post build step(Execute shell)。意味着Jenkins主机执行shell指令,非远程主机。
notion image
 

🤗 总结归纳

整体步骤是手动,谈不上自动化部署。所以为了实现自动化,接下来需学习使用jenkinsfile的pipeline项目。
  • 每次构建都需要每个步骤依次执行
  • 不能在Jenkins中完成应用发布状态健康检查
项目被打包成war或是jar,主要依托pom.xml中指定的输出格式,springboot默认是jar格式

📎 参考文章

  • 代理客户端:clash
ssh生成密钥对与配置
maven命令介绍
GitHub上的代码不一定拉取下来。可让Jenkins代理。也可让GitHub镜像来代替原有的GitHub仓库地址;或是fork为gitee、gitlab等仓库项目
远程主机执行的脚本:startJob.sh
参考文章
 
 
💡
有关以上的问题,欢迎QQ1761461214,一起交流~
🔒待阅读清单docker镜像加速之cloudflare worker