jenkins+docker实现可持续自动化部署springboot项目

目录

一、前言

二、微服务带来的挑战

2.1 微服务有哪些问题

2.2 微服务给运维带来的挑战

三、可持续集成与交付概述

3.1 可持续集成与交付概念

3.1.1 持续集成

3.1.2 持续交付

3.1.3 可持续集成与交付核心理念

3.2 可持续集成优点

3.3 微服务为什么需要可持续集成

四、可持续集成方案

4.1 可持续集成常用工具

4.2 常用可持续集成方案

4.3 jenkins介绍

五、环境准备

5.1 部署架构与流程

5.2 服务器准备

5.3 搭建docker环境

5.3.1 安装yml

5.3.2 设置阿里云镜像仓库

5.3.3 安装docker

5.3.4 启动docker

5.4 安装maven(非必须)

5.4.1 下载maven

5.4.2 上传并解压

5.4.3 配置仓库地址和镜像

5.4.4 配置环境变量

5.4.5 验证maven是否配置成功

六、安装jenkins

6.2 docker安装

6.2.1 创建持久化目录

6.2.2 运行jenkins容器

6.2.3 配置jenkins镜像加速

6.3 使用yum 安装jenkins

6.3.1 安装jdk

6.3.2 设置java环境变量

6.3.3 安装git

6.3.4 配置yum源以及安装jenkins

6.3.5 修改Jenkins配置文件

6.3.6 启动jenkins服务

6.4 jenkins初始化配置

七、jenkins配置

7.1 配置maven

7.1.1 修改maven的镜像地址

7.2 配置git

7.3 配置jenkins插件

7.4 配置Gitee访问凭证

八、搭建springboot工程并推送gitee

8.1 搭建springboot工程

8.2 gitee创建一个仓库

8.3 将本地工程推送至gitee

九、配置jenkins任务

9.1 创建Maven类型的项目任务

9.2 构建docker镜像

9.2.1 编写Dockerfile文件

9.2.2 修改jenkins任务脚本

9.2.3 再次运行任务

十、写在文末


一、前言

微服务开发模式已经成为当下java主流,微服务在给团队开发协作带来便利,也给项目快速交付提供高效支撑的同时,也给服务的部署、运维等工作提出了更高的要求。可持续集成(CI/CD)的实践,让繁杂的部署运维工作以高效的方式进行协作,本篇将详细介绍可持续集成环境的搭建。

二、微服务带来的挑战

2.1 微服务有哪些问题

尽管微服务架构有许多优点,如灵活性、可伸缩性和独立部署等,但也存在一些缺点,包括:

  • 复杂性增加
    • 微服务架构中涉及多个小型服务,会增加系统整体的复杂性,包括服务间通信、数据一致性、服务发现等方面
  • 运维成本增加
    • 由于涉及多个服务,运维和监控工作量会增加,需要更多的人力和资源来管理各个服务的部署、运行和监控
  • 分布式系统挑战
    • 微服务架构是一种分布式系统设计,需要解决分布式事务、服务发现、负载均衡等问题,增加了开发和维护的难度
  • 服务间通信开销
    • 微服务之间通过网络进行通信,可能导致网络延迟和通信开销增加,影响系统的性能和响应速度
  • 数据管理困难
    • ​​​​​​​微服务架构中每个服务都有自己的数据库存储,可能导致数据管理和一致性维护方面的困难,需要额外的工作来处理数据同步和一致性问题
  • 安全性挑战
    • ​​​​​​​由于涉及多个服务,微服务架构面临更多的安全风险,需要加强对服务间通信、身份验证、权限控制等方面的安全防护

2.2 微服务给运维带来的挑战

除了微服务自身的一些挑战,还有一个不可忽视的要素,那就是给后续的运维带来的一系列挑战,具体来说,主要包括下面几点:

  • 运维复杂性增加
    • ​​​​​​​微服务架构中涉及多个独立的服务单元,每个服务都需要独立部署、监控和维护,增加了整体系统的复杂性
  • 部署和版本控制
    • ​​​​​​​由于涉及多个服务,需要进行频繁的部署和版本控制,可能导致部署过程复杂、耗时增加
  • 监控与故障排查难度增加
    • ​​​​​​​微服务架构下的服务数量庞大,需要更加细致的监控和日志记录,以便快速发现问题并进行故障排查
  • 负载均衡与容错机制
    • ​​​​​​​在微服务架构中,需要考虑服务间的负载均衡和容错机制,确保各个服务能够稳定运行
  • 安全管理要求增加
    • ​​​​​​​由于涉及多个服务之间的通信,安全管理方面面临更多挑战,需要加强对服务间通信、身份验证、权限控制等方面的安全防护
  • 持续集成与交付
    • ​​​​​​​微服务架构需要频繁进行持续集成和交付,确保各个服务的版本兼容性和稳定性,运维团队需要搭建自动化的CI/CD流程
  • 容量规划与扩展性
    • ​​​​​​​微服务架构下,需要灵活地进行容量规划和扩展,根据业务需求和流量变化来调整服务的数量和规模

综上所述,微服务架构的实施给运维团队带来了一些挑战,需要团队具备更多的技术和管理能力来应对这些挑战,确保系统的稳定性和可靠性

三、可持续集成与交付概述

3.1 可持续集成与交付概念

在当今快节奏的软件开发环境中,持续集成(Continuous Integration)和持续交付(Continuous Delivery)已经成为构建高效软件交付流程的关键组成部分。这两个实践不仅提高了团队的效率,还能够确保软件质量、加速交付并降低风险。

3.1.1 持续集成

持续集成是一种实践,开发者在频繁的将代码集成到代码仓库中,就可以对代码进行自动构建、部署,以便尽早地发现和解决集成问题。持续集成旨在减少集成问题的积累,确保代码在集成到主干分支之前是稳定和可靠的。

3.1.2 持续交付

持续交付是在持续集成的基础上进一步发展的实践。它强调自动化的部署流程,使得每次代码更改都可以自动部署到生产环境中,从而实现频繁的软件交付。持续交付能够将新功能、修复和改进快速地交付到用户手中,同时降低发布过程中的风险。

3.1.3 可持续集成与交付核心理念

可持续集成(Continuous Integration,CI)是一种软件开发实践,旨在通过将团队成员的代码频繁集成到共享存储库中,并自动进行构建和测试,以确保软件质量、减少集成问题、提高开发效率。可持续集成的核心理念包括:

  • 频繁集成:团队成员每天将代码提交到共享存储库,确保代码库保持最新状态。

  • 自动化构建:每次代码提交后,自动触发构建流程,包括编译、打包等操作,生成可执行的软件。

  • 自动化测试:自动运行各种测试,包括单元测试、集成测试、功能测试等,快速发现问题并及时修复。

  • 及时反馈:及时向开发人员反馈构建和测试结果,帮助他们尽早发现和解决问题。

通过可持续集成,团队能够减少集成问题、提高软件质量、加快交付速度,促进团队协作和沟通。这种持续集成的方式可以让开发团队更快速地交付高质量的软件产品,从而提升整体开发效率和质量水平。

3.2 可持续集成优点

了解了微服务的痛点之后,可持续集成的优势是很明显的,主要包括:

  • 快速发现问题
    • ​​​​​​​通过频繁地集成、构建和测试代码,可以更早地发现和解决问题,减少错误在后续阶段的修复成本。
  • 提高软件质量
    • ​​​​​​​持续集成能够确保每次集成都是可运行的,通过自动化测试和代码检查等手段,有助于提高软件质量。
  • 减少集成风险
    • ​​​​​​​定期进行集成和测试可以降低集成风险,避免长时间分支导致的集成问题,保证代码库的稳定性。
  • 加速交付周期
    • ​​​​​​​持续集成可以实现快速、频繁地发布软件,并促进持续交付,加速新功能和改进的上线速度。
  • 增强团队合作
    • ​​​​​​​通过持续集成,团队成员可以及时分享代码变更和解决方案,促进团队协作和沟通,提高工作效率。
  • 自动化流程
    • ​​​​​​​持续集成倡导自动化构建、测试和部署流程,减少人工干预,提高生产力和效率。
  • 追踪项目进度
    • ​​​​​​​持续集成工具可以记录每次集成的结果和日志,帮助团队追踪项目进度和代码变更历史。

3.3 微服务为什么需要可持续集成

微服务架构是一种分布式系统设计方法,将整个应用拆分为小而自治的服务单元,每个服务都可以独立开发、部署和运行。在微服务架构中,由于服务之间的相互依赖性较强,因此需要对每个微服务进行持续集成,以确保整个系统的稳定性和可靠性。以下是微服务需要可持续集成的主要原因:

  • 快速迭代:微服务架构下,每个服务都可以独立开发和部署,因此需要频繁地进行集成和测试,以实现快速的迭代和发布。

  • 复杂度管理:微服务架构中可能涉及多个不同的服务和团队协作,通过持续集成可以帮助管理复杂度,确保各个服务能够正常协同工作。

  • 隔离风险:微服务架构下,一个服务的变更可能会影响到其他服务,通过持续集成可以及时发现问题并减少风险。

  • 自动化测试:微服务架构通常涉及多个服务之间的交互,通过自动化测试可以确保各个服务的功能和接口都正常工作。

  • 系统完整性:通过持续集成可以确保每次集成都是可运行的,保证系统的完整性和稳定性。

综上所述,微服务架构下的可持续集成是确保系统稳定性、可靠性和高效性的重要手段,有助于团队更好地管理和发展微服务应用。

四、可持续集成方案

经过多年的行业经验的沉淀和发展,业内也逐渐形成了一些比较成熟的解决方案,下面列举一些常用的可持续集成方案。

4.1 可持续集成常用工具

一些常用的可持续集成工具包括:

  • Jenkins:是一个开源的持续集成工具,可以实现自动化构建、测试和部署流程,支持丰富的插件和扩展功能。

  • GitLab CI/CD:与GitLab版本控制系统集成,提供完整的CI/CD功能,支持自动化构建、测试、部署等操作。

  • CircleCI:是一个基于云的持续集成平台,提供简单易用的CI/CD功能,支持多种编程语言和环境。

  • Travis CI:也是一个基于云的持续集成平台,支持GitHub等版本控制系统,能够快速配置和运行持续集成任务。

  • TeamCity:是JetBrains开发的持续集成工具,支持多种项目类型和构建环境,具有灵活的配置和定制能力。

  • Bamboo:是Atlassian公司的持续集成工具,与Jira等软件开发工具集成紧密,提供全面的CI/CD功能。

  • GoCD:是ThoughtWorks开发的持续交付工具,支持复杂的CI/CD管道配置和多阶段流水线。

以上是一些常见的可持续集成工具,团队可以根据自身需求和项目特点选择适合的工具来实现持续集成和持续交付。每个工具都有其特点和优势,可以根据具体情况进行评估和选择。

4.2 常用可持续集成方案

一些常见的可持续集成解决方案包括:

  • 自建方案

    • 团队可以自行搭建持续集成环境,使用开源工具如Jenkins、GitLab CI等,根据项目需求和规模定制化配置持续集成流程。

  • 云端托管服务

    • ​​​​​​​一些云服务提供商如AWS CodePipeline、Azure DevOps、Google Cloud Build等提供了托管的持续集成解决方案,能够快速搭建并管理持续集成流程。

  • 集成开发平台

    • ​​​​​​​一些集成开发平台如GitHub Actions、GitLab CI/CD等提供了集成的CI/CD功能,能够与代码仓库无缝集成,简化持续集成流程。

  • 企业级解决方案

    • ​​​​​​​一些企业级的持续集成解决方案如TeamCity、Bamboo等提供了更加完善和复杂的持续集成功能,适用于大型企业项目。

  • 容器化解决方案

    • ​​​​​​​使用容器技术如Docker、Kubernetes等构建持续集成环境,能够实现快速部署、灵活扩展和环境隔离。

  • 专业的持续集成服务提供商

    • ​​​​​​​一些专业的持续集成服务提供商如CircleCI、Travis CI等提供了稳定、可靠的持续集成解决方案,支持多种项目类型和编程语言。

以上是一些常见的可持续集成解决方案,团队可以根据自身的需求、技术栈和预算选择合适的方案来实现持续集成,提高软件开发效率和质量。

4.3 jenkins介绍

Jenkins是一个开源的持续集成工具,用于自动化构建、测试和部署软件项目。它支持多种插件和扩展功能,可以与各种版本控制工具(如Git、SVN等)和构建工具(如Maven、Gradle等)集成,提供灵活、可定制的持续集成解决方案。

在可持续集成中,Jenkins是一个非常常用且强大的工具,以下是Jenkins在可持续集成中的使用方式:

  • 自动化构建:Jenkins可以通过配置Pipeline或Job来自动化构建代码。当团队成员提交新的代码变更时,Jenkins会自动触发构建过程,编译代码、运行测试,并生成构建报告。

  • 持续集成:Jenkins支持持续集成,可以定期或基于代码提交等事件来触发构建流程。持续集成有助于快速发现问题、减少错误,确保代码库的稳定性和质量。

  • 自动化测试:Jenkins可以集成各种测试工具,如JUnit、Selenium等,自动运行单元测试、集成测试、端到端测试等。通过自动化测试,Jenkins能够帮助团队及时发现问题,保证软件质量。

  • 集成部署:Jenkins可以与部署工具(如Ansible、Docker)等集成,实现自动化部署。一旦构建成功,Jenkins可以自动将代码部署到测试环境、预生产环境甚至生产环境。

  • 版本控制集成:Jenkins可以与版本控制系统(如Git、SVN)进行集成,监测代码仓库的变化,触发构建流程。这样可以确保每次构建都是基于最新的代码。

  • 持续交付:通过Jenkins实现持续集成和自动化部署,能够加速软件交付周期,使新功能或改进快速地交付给用户,提高团队的生产力和响应速度。

  • 报告和通知:Jenkins可以生成构建报告、测试结果报告,并通过邮件、Slack等渠道发送通知给团队成员,让大家了解构建状态和结果。

综上所述,Jenkins在可持续集成中发挥着关键作用,能够帮助团队实现自动化构建、持续集成、自动化测试、持续交付等,提高软件开发效率和质量。通过合理配置和优化Jenkins的使用,团队可以更好地实现持续集成的目标。

五、环境准备

5.1 部署架构与流程

本篇以jekins为基础,然后集成docker,对微服务项目进行打包构建,并做成镜像,推送镜像仓库,最后由可视化工具或其他方式对构建的镜像统一运维管理。整体的流程如下:

5.2 服务器准备

搭建上述的部署流程,预计需要至少3台机器(推荐),可以结合自身的情况酌情选择

服务器配置(推荐)作用备注
192.168.1.112C8G部署jenkinsjenkins比较吃资源,需要安装较多的插件,建议宽带不要太低
192.168.1.122C2G部署gitlab代码仓库,一般来说企业为了保护代码的安全,会自建代码仓库
192.168.1.122C4G部署容器管理平台jenkins最后构建出来的包要做出镜像需要推送到镜像仓库

5.3 搭建docker环境

5.3.1 安装yml

yum install -y yum-utils device-mapper-persistent-data lvm2

5.3.2 设置阿里云镜像仓库

加速镜像的下载

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5.3.3 安装docker

yum -y install docker-ce-20.10.10-3.el7

检查下docker版本

5.3.4 启动docker

使用下面的命令启动docker

systemctl start docker

查看docker的启动状态

systemctl status docker

5.4 安装maven(非必须)

因为后面安装jenkins并配置插件的时候,可以基于jenkins自身进行自动安装,当然,可以在jenkins服务器上安装maven,然后再在jenkins上进行引用也可以。

5.4.1 下载maven

这里选择3.6.3的版本

wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

5.4.2 上传并解压

如果是直接在服务器上进行下载,可以跳过上传这一步直接解压

tar -zxvf apache-maven-3.6.3-bin.tar.gz

5.4.3 配置仓库地址和镜像

mkdir repo
cd apache-maven-3.6.3
cd conf
cp settings.xml settings.xml.bk

将下面的配置文件拷贝到setting.xml中

<localRepository>/usr/local/soft/mvn/repo</localRepository>

#使用阿里镜像下载
<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

5.4.4 配置环境变量

#改环境变量
vi /etc/profile

#复制下面三行到最下面(路径要根据自己情况改)
#maven
export MAVEN_HOME=/usr/local/soft/mvn/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

#保存退出,然后重载配置
source /etc/profile

5.4.5 验证maven是否配置成功

#查看
mvn -v

#检查
mvn -version

六、安装jenkins

搭建jenkins目前主要有两种方式,可以通过docker安装,也可以通过yum或源码包的方式安装,为了减少后面的踩坑和各种插件安装失败的问题,建议使用yum或源码包的方式安装,这里将两种安装方式都贴出来,方便学习和参考。

6.2 docker安装

6.2.1 创建持久化目录

mkdir -p /usr/local/docker/jenkins

6.2.2 运行jenkins容器

使用下面的命令启动jenkins容器

docker run -d \
-u root \
--name docker_jenkins \
-p 9302:8080 \
-v /usr/local/docker/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
jenkins/jenkins:2.319.3-lts-jdk11

参数说明:

  • -u root,使用root用户运行容器;

  • --name docker_jenkins,jenkins的容器命名,方便后续查找;

  • -p 9302:8080,主机的9302端口映射容器的8080端口,浏览器可以通过9302访问;

  • -v /usr/local/docker/jenkins:/var/jenkins_home

    • 将左边宿主机的目录映射为容器的 /var/jenkins_home 目录,即数据的本地持久化;

  • -v /var/run/docker.sock:/var/run/docker.sock \ 与 -v /usr/bin/docker:/usr/bin/docker \

    • 把宿主机上面的docker.sock文件映射在容器中docker.sock文件,这么做目的是为了方便容器中的jenkins可以与主机中的docker进行通讯;

  • jenkins/jenkins:2.319.3-lts-jdk11,指定使用哪一个镜像源,指定标签和版本信息;

第一次运行,下载镜像会比较慢

6.2.3 配置jenkins镜像加速

后面需要在jenkins上面安装各种插件,如果不配置加速地址,将会从远程下载安装比较慢,建议配置一下。修改宿主机 Jenkins 工作目录下的hudson.model.UpdateCenter.xml文件。

vi /var/jenkins_home/hudson.model.UpdateCenter.xml

原始内容如下:

URL修改为国内清华大学的官方镜像地址,内容如下:

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
  </site>
</sites>

修改完成后,重启jenkins

6.3 使用yum 安装jenkins

jenkins的运行需要依赖java环境,因此需要安装一下java环境

6.3.1 安装jdk

基于yum安装jdk

sudo yum install -y fontconfig java-11-openjdk

查看jdk安装位置

6.3.2 设置java环境变量

vim /etc/profile

#在文件最后添加
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64
export PATH=$PATH:$JAVA_HOME/bin

#立即生效文件
source /etc/profile

#检查是否配置成功
echo $JAVA_HOME

6.3.3 安装git

yum install git

6.3.4 配置yum源以及安装jenkins

sudo yum upgrade

sudo yum install -y ca-certificates

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key

sudo yum install -y jenkins

过程截图

6.3.5 修改Jenkins配置文件

vi /usr/lib/systemd/system/jenkins.service

修改User和Group为root

修改端口号为9302(可以改为其他任何端口)

6.3.6 启动jenkins服务

sudo systemctl start jenkins

# 开机就启动jenkins
sudo systemctl enable jenkins

6.4 jenkins初始化配置

紧接着上面的操作,jenkins服务启动之后,访问地址 http://IP:9302/(自行替换IP),看到如下界面

找到/var/lib/jenkins/secrets/initialAdminPassword 路径下的密码

cat /var/lib/jenkins/secrets/initialAdminPassword

选择安装推荐的插件

等待插件安装完成(这个过程可能有点漫长,根据你的网速)

创建管理员账户

注意保管好这个账户和登录密码,否则后面找回密码比较麻烦

七、jenkins配置

使用jenkins进行持续集成,可以说就是熟练掌握jenkins的各种配置的过程。根据你的需求场景,需要做不同的配置,这里以java为例进行基础环境的配置以及相关插件的安装。

7.1 配置maven

maven是java微服务项目的打包构建工具,参照下面的步骤进行配置

进入配置工具界面

点击新增 Maven

配置Maven版本,选择3.6.3版本,并点击保存。

7.1.1 修改maven的镜像地址

上面保存maven的配置之后,在jenkins的目录下,会找到maven的文件目录

找到下面的配置镜像的标签,改为阿里云的镜像仓库地址

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

修改完成后,建议重启下jenkins

sudo systemctl restart jenkins

7.2 配置git

只需要执行yum命令安装即可

yum install git

7.3 配置jenkins插件

这里暂时只配置后面打包构建使用的几个必备的插件,点击插件管理

安装 docker 插件

等待安装完成

安装maven插件

安装之后重启Jenkins

sudo systemctl stop jenkins
sudo systemctl start jenkins

7.4 配置Gitee访问凭证

点击 凭证管理 按钮

点击 全局 按钮

点击 add credentials 按钮

输入你的gitee的账号和密码,点击创建按钮。

八、搭建springboot工程并推送gitee

8.1 搭建springboot工程

本地快速搭建一个springboot工程,核心依赖如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.congge</groupId>
    <artifactId>boot-docker</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <docker.image.prefix>dcloud</docker.image.prefix>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <finalName>boot-docker</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>

           <!-- <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.10</version>
                <configuration>
                    <repository>${docker.image.prefix}/${project.artifactId}</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>-->
        </plugins>
    </build>

</project>

在项目的根目录下,提供一个Dockerfile文件,内容如下:

FROM java:8
ADD target/boot-docker.jar boot-docker.jar
ENTRYPOINT ["java","-jar","/boot-docker.jar"]

由于比较简单,这里就不再过多赘述了,工程中提供一个如下的测试接口

@RestController
public class TestController {

    //localhost:8088/test
    @GetMapping("/test")
    public String test(){
        return "test";
    }
}

工程启动之后,访问测试一下

8.2 gitee创建一个仓库

参照如下步骤,登录之后,创建一个空的gitee仓库

8.3 将本地工程推送至gitee

idea安装gitee插件

创建本地git仓库

右键项目文件–>Git–>Add

选中项目,鼠标右键项目目录,点击”Git—>Commit Directory”

最后选中项目右键直接提交,此时会弹出一个需要输入你的gitee远程仓库地址,然后输入你的账户和密码即可,当然也可以首先检出远程仓库地址

最后push即可

九、配置jenkins任务

上述所做的一切都是为了创建jenkins任务做准备的,接下来基于上面的配置,我们将创建一个jenkins任务展现完整的springboot项目从拉取代码到构建部署的完整流程。

9.1 创建Maven类型的项目任务

配置Gitee代码地址和凭证

配置 Pre Steps

这里简单执行以下maven的打包安装命令即可,然后再在任务列表中就可以看到这个任务,点击执行

在build的高级选项这里,建议自定义构建的文件目录,方便后续查找项目构建后的包的位置

基本上这几步就完成了

任务执行后,从gitee上面拉代码之后,进行install 命令时,由于需要从maven中央仓库拉代码,需要耗费很长时间,因此需要修改maven的镜像仓库地址,找到上述jenkins中配置的maven配置文件,修改下setting.xml文件中的镜像地址(这个在上已经完成)

等待执行完成即可

最后在构建完成的产物中,进入到工程的target目录下,可以看到构建完成的jar包,这是一个springboot工程构建出来的jar,因此可以直接运行和访问

9.2 构建docker镜像

9.2.1 编写Dockerfile文件

再次确认springboot工程中的dockerfile文件

FROM java:8
ADD target/boot-docker.jar boot-docker.jar
ENTRYPOINT ["java","-jar","/boot-docker.jar"]

在上述构建完成之后的工程目录结构下,可以看到一个Dockerfile文件,即我们在springboot工程中编写的dockerfile

9.2.2 修改jenkins任务脚本

其他的配置保持不变,需要修改的位置如下

Post Steps编写使用Dockerfile构建镜像的脚本

9.2.3 再次运行任务

再次执行任务,运行成功成功之后

通过docker命令,可以看到镜像已经成功构建出来

基于当前的docker镜像,后面可以在当前服务器直接启动,也可以在jenkins中执行命令将镜像推送到其他的镜像仓库进行后续使用。

十、写在文末

本文通过较大的篇幅详细介绍了可持续集成的相关理论和常用的解决方案,同时通过实际操作演示了jenkins的搭建配置全过程,最后通过jenkins配置任务的形式集成springboot进行可持续集成的过程,后续将会以此为基础,进一步深入介绍与镜像仓库的整合使用,从而完成一个更加完整的全生命周期的集成过程,本篇到此结束感谢观看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/520658.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金三银四面试题(十五):Java基础问题(6)

这部分面试题多用于面试的热身运动&#xff0c;对很多找实习和准备毕业找工作的小伙伴至关重要。 HashMap与ConcurrentHashMap 都是key-value 形式的存储数据&#xff1b; HashMap 是线程不安全的&#xff0c;ConcurrentHashMap 是JUC 下的线程安全的&#xff1b; HashMap 底层…

降低笔记本电脑噪音的七种方法,看下有没有适合你的

序言 无论是玩游戏、浏览网络还是做严肃的工作,差不多都有这么一台笔记本电脑,它有足够的处理能力来处理几乎任何事情。不幸的是,它可能会变得非常大声,但有办法来遏制这种噪音。 清洁通风口和风扇,并使用硬表面 如果你的笔记本电脑现在比过去运行同样的软件时声音更大…

docker笔记(二):镜像、容器数据卷

四、 docker镜像 4.1 镜像 镜像是一种轻量级、可执行的独立软件包&#xff0c;用来打包软件运行环境和基于运行环境开发的软件&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;包括代码、库、环境变量和配置文件 所有的应用&#xff0c;直接打包docker镜像就可以直…

深度学习500问——Chapter05: 卷积神经网络(CNN)(4)

文章目录 5.18 卷积神经网络凸显共性的方法 5.18.1 局部连接 5.18.2 权值共享 5.18.3 池化操作 5.19 全连接、局部连接、全卷积与局部卷积 5.20 局部卷积的应用 5.21 NetVLAD池化 参考文献 5.18 卷积神经网络凸显共性的方法 5.18.1 局部连接 我们首先了解一个概念&#xff0c…

Office办公软件之Excel的使用(一)

1、“开始”菜单中的部分属性 2、制作斜线表头 ctrl1,弹出设置单元格格式&#xff0c;选择“边框”&#xff0c;点击右下角有斜线的即可。 3、冻结窗口 一般冻结首列或首行&#xff0c;当我们翻页的时候&#xff0c;也能看到每一行的描述。 4、快捷键 1、 Ctrl1 设置单元格格…

【Java基础知识总结 | 第十篇】HashSet底层实现原理

文章目录 10.HashSet底层实现原理10.1HashSet特点10.2HashSet源码10.3 add流程10.4总结 10.HashSet底层实现原理 10.1HashSet特点 存储对象&#xff1a;HashSet 存储对象采用哈希表的方式&#xff0c;它不允许重复元素&#xff0c;即集合中不会包含相同的元素。当向 HashSet …

C语言实现快速排序算法

1. 什么是快速排序算法 快速排序的核心思想是通过分治法&#xff08;Divide and Conquer&#xff09;来实现排序。 算法的基本步骤是: 1. 选择一个基准值&#xff08;通常是数组中的某个元素&#xff09;&#xff0c;将数组分成两部分&#xff0c;使得左边的部分所有元素都小于…

2024.4.1-[作业记录]-day06-认识 CSS(三大特性、引入方式)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; day06-认识 CSS(三大特性、引入方式) 文章目录 day06-认识 CSS(三大特性、引入方式)作业…

xss.pwnfunction-Ma Spaghet!

根据代码得知 这个是根据get传参的并且是由someboby来接收参数的 所以 <script>alert(1137)</script> js并没有执行因为 HTML5中指定不执行由innerHTML插入的<script>标签 所以 ?somebody<img%20src1%20onerror"alert(1337)"> 这样就成…

Java栈和队列的实现

目录 一.栈(Stack) 1.1栈的概念 1.2栈的实现及模拟 二.队列(Queue) 2.1队列的概念 2.2队列的实现及模拟 2.3循环队列 2.4双端队列&#xff08;Deque&#xff09; 一.栈(Stack) 1.1栈的概念 栈:一种特殊的线性表&#xff0c;其 只允许在固定的一端进行插入和删除元素操作…

JavaWeb--JavaScript Part 01

1. JavaScript概述 JavaScript&#xff08;简称JS&#xff09;是一种轻量级的、解释执行的客户端脚本语言&#xff0c;主要用于增强网页的交互性和动态性。它起源于Netscape的LiveScript&#xff0c;并在1995年发布时更名为JavaScript。尽管名称中包含"Java"&#xf…

JS 利用 webcam访问摄像头 上传到服务器

webcam JS 较为详细的指南 定义标题 <!doctype html> <html> <head><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>How to capture picture from webcam with Webcam.js</title></…

FreeMarker系列--指令的用法(全面,有示例)

原文网址&#xff1a;FreeMarker系列--指令的用法(全面&#xff0c;有示例)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍FreeMark指令的用法。 相关网址 中文官方参考手册 assign 描述 使用该指令你可以创建一个新的变量&#xff0c; 或者替换一个已经存在的变量。注…

Redis实现高可用持久化与性能管理

前言 在生产环境中&#xff0c;为了实现Redis的高可用性&#xff0c;可以采用持久化、主从复制、哨兵模式和 Cluster集群的方法确保数据的持久性和可靠性。这里首先介绍一下使用持久化实现服务器的高可用。 目录 一、Redis 高可用方法 1. 持久化 2. 主从复制 3. 哨兵 4.…

2024.4.5-[作业记录]-day10-CSS 布局模型(层模型)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业 2024.4.5-学习笔记1 CSS定位1.1 相对定位 relative1.2 绝对定位 absolut…

【C++】map set 底层刨析

文章目录 1. 红黑树的迭代器2. 改造红黑树3. map 的模拟实现4. set 的模拟实现 在 C STL 库中&#xff0c;map 与 set 的底层为红黑树&#xff0c;那么在不写冗余代码的情况下使用红黑树同时实现 map 与 set 便是本文的重点。 1. 红黑树的迭代器 迭代器的好处是可以方便遍历&…

Day84:服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

目录 端口协议-口令爆破&未授权 弱口令爆破 FTP&#xff1a;文件传输协议 RDP&#xff1a;Windows远程桌面协议 SSH&#xff1a;Linux安全外壳协议 未授权案例(rsync) 桌面应用-QQ&WPS&Clash QQ RCE 漏洞复现 WPS RCE 漏洞复现 Clas* RCE 漏洞复现 知识点…

90天玩转Python—04—基础知识篇:Python编程基础:标识符、保留字、注释、多行语句、print输出以及模块导入详解

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

淘宝里的优惠券在哪里查看_淘宝优惠券怎么找到领取

淘宝里的优惠券在哪里查看&#xff1f; 1、打开手机淘宝APP&#xff0c;点击右下角我的淘宝&#xff1b; 2、在我的淘宝里找到我的权益&#xff0c;看到优惠券后点击进入&#xff1b; 3、我淘宝我的权益券里可以看到已领取到的淘宝天猫优惠券&#xff1b; 淘宝优惠券怎么找到领…

开源代码分享(17)-基于足球队训练算法(Football Team Training Algorithm,FTTA)的组合风速预测

参考文献&#xff1a; [1]Tian Z, Gai M. Football team training algorithm: A novel sport-inspired meta-heuristic optimization algorithm for global optimization[J]. Expert Systems with Applications, 2024, 245: 123088. 1.算法基本原理 足球队训练算法&#xff0…