SpringBoot+Jenkins+Github+Docker+Maven持续集成CI与持续部署CD全自动化部署

简介: 我们采用tomcat运行war包的这种方式,先来到官网下载war包:https://www.jenkins.io/download/然后把war包上传到tomcat的webapps里,自动就解压运行了,访问页面,然后查看并输入密码:cat /root/.jenkins/secrets/initialAdminPassword

1 准备各种环境


1.1 安装jenkins

我们采用tomcat运行war包的这种方式,先来到官网下载war包:https://www.jenkins.io/download/

然后把war包上传到tomcat的webapps里,自动就解压运行了,访问页面,然后查看并输入密码:

cat /root/.jenkins/secrets/initialAdminPassword

然后点击推荐安装,进入安装插件的页面:20201003211922711.png


下载完成后注册个用户即可。

20201003212813541.png


1.2 安装git和maven

yum -y install git

yum -y install maven

都学到jenkins了,java环境相信应该都是有的,这里不在阐述。


1.3 创建SpringBoot项目

随便写一个接口就行,然后进行代码推送和仓库创建。

20201003230113243.png


1.4 配置密钥和webhook

为了能访问仓库,得配置密钥,也可以用用户名密码(但是我添加后下拉框还是没有。。。只能用密钥了),把密钥复制出去保存好!!!

20201003233444719.png


为了让项目每次push时触发自动部署,需要来到这里配置:

20201003231220131.png


1.5 来到jenkins配置访问密钥

20201003234138663.png


这页内容较多,github在中间靠下点位置,输入刚才的密钥添加

20201003234435587.png


然后测试一下连接是否成功

20201003234258191.png


2 开始进入主题


2.1 创建任务

名称随意,选择Freestyle project。

20201003234705557.png


配置源码管理,选择Git

20201003235303509.png


配置触发器:

2020100323575286.png


配置执行脚本:


clean package -DskipTests

BUILD_ID=DONTKILLME
#!/bin/bash
# find jar
echo `pwd`
cd ./target
FILENAME=$(find -name springboot_jenkins**.jar)
echo $FILENAME
JARNAME=${FILENAME##*/}
# stop previous service
PID=$(ps -ef | grep $JARNAME | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
  echo $JARNAME is already stopped
else
  echo kill $PID
  kill -9 $PID
fi
# cp jar to /root and start service
cd /root
cp /root/.jenkins/workspace/springboot_jenkins/target/$JARNAME .
nohup java -jar $JARNAME > springboot_jenkins.log &
# make sure the service had started
ps -ef | grep springboot_jenkins


20201004005950286.png



保存后,点击立即构建(maven建议换成阿里云镜像,settings.xml在这里:/usr/share/maven/conf):

2020100400175999.png



然后就打包成功了,但是还是访问不了,因为8080端口被tomcat占用了,项目并没有启动成功,现在去改改端口,顺便也能测试下push后的自动部署是否生效:

20201004010156255.png


经过测试,push第一次没效果:

20201004012530182.png


后来也没咋搞,最后次终于行了:

20201004012618326.png


试了试效果,还是很快的,一分钟就完事了:

image.png



到这里终于结束了,鼓捣了几小时,可见jenkins的强大之处!


3 使用docker方式启动

创建三个文件:

2020100410302368.png


dockerfile用于创建镜像:

#基于jdk8镜像进行构建,创建的镜像已经配置好java环境
FROM openjdk:8-jdk-alpine
#配置个变量记录jar的名称,方便修改
ARG JAR_FILE=springboot_jenkins-0.0.1-SNAPSHOT.jar
#在镜像中创建一个工作目录
run mkdir /springboot_worker
#将jar文件复制到工作目录中
add /target/${JAR_FILE} /springboot_worker
#暴露镜像的端口8989,其他端口不开放
expose 8989
#启动项目: java -jar /springboot_worker/springboot_jenkins-0.0.1-SNAPSHOT.jar
CMD ["java","-jar","/springboot_worker/springboot_jenkins-0.0.1-SNAPSHOT.jar"]


加入两个脚本,build.sh和run.sh,其实写一个也行,或者直接在构建那边的执行shell里写都行。


build.sh:

# 打包项目这个在构建配置那边配置了调用顶层Maven目标就不用再写了,不然就打包两次了(虽然不会错)
# mvn package -DskipTests
# 先删除上次创建的
docker rmi -f baikunlong.top/springboot_jenkins:1.0
# 创建镜像,最后个.是指使用当前目录下文件(dockerfile)
docker build -t baikunlong.top/springboot_jenkins:1.0 .
# 查看当前有哪些镜像
docker images


run.sh

# 停止容器
docker stop springboot_jenkins_8989
# 删除容器
docker rm -f springboot_jenkins_8989
# 创建容器
docker run -d --name springboot_jenkins_8989 -p 8989:8989 baikunlong.top/springboot_jenkins:1.0
# 查看docker进程
docker ps -a


如果写成脚本文件,需要在这里加入修改权限和执行代码,不然直接把上面的代码复制到文本框里也行:

20201004102837416.png


然后去推送代码,看看构建信息:

20201004103224662.png


因为上边第二节使用了非docker方式启动过这个项目,端口被占用了,先去杀掉:

2020100410370823.png


然后再随便改改代码,推送试试,应该就正常启动了:

20201004105842855.png


看看文件到底放在哪里去了:

20201004105733852.png

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 jenkins
探索软件测试中的自动化与持续集成
【10月更文挑战第21天】 在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的进步和开发模式的转变,自动化测试和持续集成已经成为提高软件质量和效率的关键手段。本文将深入探讨自动化测试和持续集成的概念、实施策略以及它们如何相互配合以优化软件开发流程。我们将通过分析实际案例,展示这些技术如何在实际项目中发挥作用,以及面临的挑战和解决方案。此外,文章还将讨论未来趋势,包括人工智能在测试领域的应用前景。
91 17
|
2月前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成
在现代软件开发过程中,自动化测试和持续集成已成为不可或缺的组成部分。本文将深入探讨自动化测试和持续集成的重要性、优势以及如何有效实施它们以提升软件质量和开发效率。通过具体案例分析,我们将展示这些技术如何在实际项目中发挥作用,并讨论其面临的挑战及应对策略。
75 3
|
2月前
|
存储 测试技术 持续交付
Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用
本文探讨了Docker与CI/CD的集成策略及其对软件开发效率和质量的提升作用。首先介绍了CI/CD的基本概念,接着阐述了Docker在环境一致性、快速部署、资源隔离和轻量化方面的优势。文章还详细讨论了构建、测试和部署阶段的具体集成方法,以及集成后带来的效率提升、可靠性增强、加速交付和易于管理等好处。最后,通过案例分析展示了集成的实际效果,强调了Docker与CI/CD结合的重要性和未来前景。
59 2
|
3月前
|
监控 安全 测试技术
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性
在自动化和持续集成中,确保代码安全与合规至关重要。措施包括集成自动化安全工具、执行自动化合规检查、进行代码质量与安全检测、评估开源代码安全、实施基础设施即代码的安全标准、采用多层防御策略、加强安全教育与文化建设、使用合规性检测工具及许可证合规分析等,共同提升代码安全性与合规水平。
|
3月前
|
监控 测试技术 持续交付
自动化和持续集成在软件开发中各自扮演什么角色
在软件开发中,自动化与持续集成(CI)相辅相成,共同提升开发效率和软件质量。自动化通过高效执行测试、构建和部署等重复任务,减少人为错误,确保流程一致性,并支持持续部署。CI则通过频繁集成代码变更、提供快速反馈、提高代码质量和促进团队协作,简化部署过程。两者结合,极大优化了软件开发流程。
|
3月前
|
监控 jenkins 测试技术
探索软件测试中的自动化与持续集成####
本文旨在探讨软件测试中自动化测试与持续集成(CI)的融合实践,分析其对提升软件开发效率和质量的重要性。通过深入剖析自动化测试的优势、持续集成的核心概念以及两者结合的最佳实践案例,揭示这一技术趋势如何重塑现代软件开发流程。文章还将讨论实施过程中的挑战和应对策略,为读者提供一套实用的方法论指导。 ####
|
3月前
|
Devops 测试技术 持续交付
软件测试中的自动化与持续集成:最佳实践与挑战
在快速迭代的软件开发周期中,自动化测试和持续集成(CI)已成为提高软件质量和加速产品上市的关键策略。本文探讨了自动化测试和CI的实施如何帮助开发团队提前发现缺陷、缩短反馈循环,并确保代码质量。我们将深入分析自动化测试的策略选择、工具应用以及面临的挑战,同时提供一些克服这些挑战的最佳实践。
77 0
|
3月前
|
监控 jenkins 测试技术
探索软件测试中的自动化与持续集成
在快速迭代的软件开发周期中,自动化测试和持续集成已成为保证软件质量的关键因素。本文将深入探讨自动化测试的重要性、持续集成的概念及其实践方法,并分析它们如何共同作用于提升软件开发效率和产品质量。通过实际案例分析,我们将了解这些技术是如何在不同的开发环境中被应用,以及它们带来的具体益处。此外,文章还将讨论实施自动化测试和持续集成过程中可能遇到的挑战及解决方案,为读者提供实用的指导和建议。
58 0
|
3月前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
97 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
3月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
273 8