SpringBoot+Git+Jenkins+Docker实现CI/CD
引:现在DevOps这么运行,你没有理由不去了解,不去实践,这次就以Springboot为底,利用Git,jenkins,Docker实现持续集成和持续部署!
开发流程
下面是常用的开发流程图:
我们简单说说这张图:首先我们会将代码文件、测试文件以及Dockerfile都存在代码仓库里,版本控制利用git,这里代码仓库有很多选择,比如github、码云(本次使用)、Coding以及自己搭建的gitlab。然后由持续集成工具进行自动化构建,包括了测试、编译、打包、构建镜像、推送镜像到仓库(有很多选择,如docker官方仓库,时速运、自己搭建的Registry)、启动服务等操作,持续集成工具也有很多选择,比如Jenkins(这次使用)、Gitlab CI、Trivas CI。这里使用的容器是Docker,这里Docker的编排工具可以选择Swarm,也可以是K8S。
本次实现流程如下:
-
push代码到码云触发WebHook
-
Jenkins从码云拉取代码
-
maven构建代码
-
build镜像
-
push镜像到镜像仓库
-
部署服务
配置
关于Jdk、Git、Maven的配置这里就不说,自己面向搜索引擎。这里主要说Jenkins和码云的配置。
Jenkins安装配置
-
下载Jenkins(采用war包安装)
-
将war包放入Tomcat的webapps目录下
-
进入YourHostIp:8080/jenkins路径下进行Jenkins的初始化,我们进入 用户自定义插件 安装界面,你可以根据自己的构建方式选择需要安装的插件,本次使用的Pipelines方式进行构建,Pipelines方式是Jenkins2推荐的方式,所以我们构建Pipelines相关的插件进行安装,当然待会进入Jenkins安装也行。
-
配置用户名和密码
-
全局工具配置(从系统管理进入全局工具配置,配置Jdk、Git、Maven)
-
安全配置(从系统管理进入全局安全配置),如下图:
Jenkins构建任务
-
新建任务,构建一个流水线任务(Pipeline)
-
在配置里构建触发器,如下图:
-
构建Pipeline脚本(Pipeline脚本写法见参考)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!groovy
pipeline{
agent any
//定义仓库地址
environment {
REPOSITORY="https://gitee.com/todorex/springboot_docker_git_jenkins_demo.git"
}
stages {
stage('获取代码'){
steps {
echo "start fetch code from git:${REPOSITORY}"
// 清空当前目录
deleteDir()
// 拉取代码
git "${REPOSITORY}"
// 清空之前的容器
sh 'docker stop $(docker ps -a -q)'
sh 'docker rm $(docker ps -a -q)'
}
}
stage('Maven 构建'){
steps {
echo "start compile"
// 切换目录
dir('demo') {
// 重新打包
sh 'mvn -Dmaven.test.skip=true -U clean install'
}
}
}
stage('构建镜像'){
steps {
echo "start build image"
dir('demo') {
// build镜像
sh 'docker build -t todorex/springboot_docker_git_jenkins_demo:1.0 .'
// 登录镜像仓库
sh 'docker login -u your_username -p your_password'
// 推送镜像到镜像仓库
sh 'docker push todorex/springboot_docker_git_jenkins_demo:1.0'
}
}
}
stage('启动服务'){
steps {
echo "start demo"
// 部署服务
sh 'docker run -d -p 8888:8888 --name=demo todorex/springboot_docker_git_jenkins_demo:1.0'
}
}
}
}
SSH的配置
为了避免jenkins拉取代码时需要输入密码,这里需要配置SSH免密码拉取。如下图:
WebHooks配置
当你每次对代码仓库进行push操作时,会自动通知jenkins进行构建
测试
这次项目的代码仓库为:springboot_docker_git_jenkins_demo
关于Dockerfile以及docker-compose.yml的编写,自己也去面向搜索引擎看看吧。
当我们push代码之后,jenkins就会自动帮我们进行构建。如下图:
PS:第一次比较慢是因为要安装Maven依赖,后面就好了。
总结
这里只是展示了一个CI/CD的开发流程,关于具体技术细节,无论是Jenkins还是Docker都需要深入学习,加油,骚年!
参考:
-
SpringBoot+Docker+Git+Jenkins实现简易的持续集成和持续部署:
http://niocoder.com/2018/04/22/SpringBoot+Docker+Git+Jenkins%E5%AE%9E%E7%8E%B0%E7%AE%80%E6%98%93%E7%9A%84%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90%E5%92%8C%E9%83%A8%E7%BD%B2/
-
Jenkins pipeline:pipeline 语法详解
http://www.cnblogs.com/fengjian2016/p/8227532.htm
-
更多信息关注公众号:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)