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 upgradesudo yum install -y ca-certificatessudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.reposudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.keysudo 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进行可持续集成的过程,后续将会以此为基础,进一步深入介绍与镜像仓库的整合使用,从而完成一个更加完整的全生命周期的集成过程,本篇到此结束感谢观看。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】如何定位、解决内存泄漏和溢出

目录 1.概述 2.堆溢出、内存泄定位及解决办法 2.1.示例代码 2.2.抓堆快照 2.3.分析堆快照 1.概述 常见的几种JVM内存溢出的场景如下&#xff1a; Java堆溢出&#xff1a; 错误信息: java.lang.OutOfMemoryError: Java heap space 原因&#xff1a;Java对象实例在运行时持…

AI结合机器人的入门级仿真环境有哪些?

由于使用真实的机器人开发和测试应用程序既昂贵又费时&#xff0c;因此仿真已成为机器人应用程序开发中越来越重要的部分。在部署到机器人之前在仿真中验证应用程序可以通过尽早发现潜在问题来缩短迭代时间。通过模拟&#xff0c;还可以更轻松地测试在现实世界中可能过于危险的…

【每日刷题】Day3

【每日刷题】Day3 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; 目录 1. 69. x 的平方根 - 力扣&#xff08;LeetCode&#xff09; 2. 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 3. 118. 杨辉三…

ZYNQ学习Linux 基础外设的使用

基本都是摘抄正点原子的文章&#xff1a;《领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf》&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 工程的创建参考&#xff1a;《ZYNQ学习之Petalinux 设计流程实战》 一、GPIO 之 LED 的使…

docker安装jenkins 2024版

docker 指令安装安装 docker run -d --restartalways \ --name jenkins -uroot -p 10340:8080 \ -p 10341:50000 \ -v /home/docker/jenkins:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker jenkins/jenkins:lts访问…

耐腐蚀耐高温实验室塑料烧杯进口高纯PFA材质反应器特氟龙烧杯

PFA烧杯在实验过程中可作为储酸容器或涉及强酸强碱类实验的反应容器&#xff0c;用于盛放样品、试剂&#xff0c;可搭配电热板加热、蒸煮、赶酸用。 外壁均有凸起刻度&#xff0c;直筒设计&#xff0c;带翻边&#xff0c;便于夹持和移动&#xff0c;边沿有嘴&#xff0c;便于倾…

深挖苹果Find My技术,伦茨科技ST17H6x芯片赋予产品功能

苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch&#xff0c;如今的Find My已经不单单可以查找苹果的设备&#xff0c;随着第三方设备的加入&#xff0c;将丰富Find My Network的版图。产…

GitOps - 为 OpenShift GitOps 配置邮件通知

《OpenShift 4.x HOL教程汇总》 说明&#xff1a;本文已经 在OpenShift 4.15 OpenShift GitOps 1.11.2 环境中验证 文章目录 ArgoCD 的 Notification 功能简介启动 OpenShift GitOps 的 Notification 功能配置邮件通知验证参考 说明&#xff1a;先根据《OpenShift 4 之 GitOp…

vue创建项目下载动态路由v-for mounted websocket :style :class store使用说明

在Vue中创建一个项目&#xff0c;并整合动态路由、v-for、mounted生命周期钩子、WebSocket、:style、:class以及Vuex的store&#xff0c;涉及到多个Vue核心特性的使用。下面我将简要说明如何逐步整合这些特性。 1. 创建Vue项目 使用Vue CLI创建项目&#xff1a; 2. 配置动态路…

sourcetree提交代码出现闪退报错(已解决)

当我在sourcetree提交代码时&#xff0c;点击提交按钮出现闪退关闭&#xff0c;并弹出下面的报错框&#xff0c;报错的图片如下&#xff1a; 那么经过了解&#xff0c;出现这样的报错原因是&#xff0c;git的提交时无法定位提交的人是谁&#xff0c;导致无法提交 那么解决的方…

git中对子模块的本地修改、提交和推送远程仓库

场景 当前的某个项目&#xff0c;其使用了另一个项目&#xff0c;我在本地需要对子项目进行修改&#xff0c;并将这些修改提交到github中的子项目和父项目。其实在github中&#xff0c;子项目都是特定的指向子项目的某次提交&#xff0c;因此对于父项目的修改&#xff0c;其实…

golang 选择排序

学习笔记&#xff5e; // Author sunwenbo // 2024/4/6 21:49 package mainimport "fmt"/* 选择排序基本介绍选择式排序也属于内部排序法&#xff0c;是从预排序的数据中按指定的规则选出某一元素&#xff0c;经过和其他元素重整&#xff0c;再依原则交换位置后达到…

设置你的第一个React应用

目录 一、React入门 1.1 你好React 1.2 创建React 1.3 应用结构 二、总结 2.1 定义组件 2.2 组件源码 三、组件详解 注意事项 3.1 组件三部曲 3.2 组件通信 —— props 3.3 对象数组迭代 —— map() 3.4 事件处理 3.5 钩子函数 —— useState() 初次学习最终效果…

ThreadLocal上传下载文件

文章目录 ThreadLocal1.基本介绍1.什么是ThreadLocal&#xff1f;2.示意图 2.快速入门1.创建普通java项目2.编写代码1.T1.java2.T1Service.java3.T2Dao.java4.Dog.java 3.结果 3.ThreadLocal源码解读1.set方法2.set方法总结3.get方法 上传下载文件1.基本介绍1.基本说明2.文件上…

Mybatis——一对多关联映射

一对多关联映射 一对多关联映射有两种方式&#xff0c;都用到了collection元素 以购物网站中用户和订单之间的一对多关系为例 collection集合的嵌套结果映射 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import java.util.List;Data public cla…

手动实现Tomcat底层机制+自己设计Servlet

文章目录 1.Tomcat整体架构分析自己理解 2.第一阶段1.实现功能2.代码1.TomcatV1.java 3.调试阶段1.阻塞在readLine导致无法返回结果 4.结果演示 3.第二阶段1.实现功能2.代码1.RequestHander.java2.TomcatV2.java 3.调试阶段1.发现每次按回车会接受到两次请求 4.结果演示 4.第三…

Redis常见数据类型(2)

String字符串 字符串是Redis最基础的数据类型, 关于字符串需要特别注意: (1)首先Redis中所有的键的类型都是字符串类型, 而且其它几种数据结构也是在字符串类型的基础上构建的, 例如列表和集合的元素都是字符串类型, 所以字符串类型能为其它4种数据结构的学习奠定基础. (2)其次…

基于Unet的BraTS 3d 脑肿瘤医学图像分割,从nii.gz文件中切分出2D图片数据

1、前言 3D图像分割一直是医疗领域的难题&#xff0c;在这方面nnunet已经成为了标杆&#xff0c;不过nnunet教程较少&#xff0c;本人之前跑了好久&#xff0c;一直目录报错、格式报错&#xff0c;反正哪里都是报错等等。并且&#xff0c;nnunet对于硬件的要求很高&#xff0c…

Java23种设计模式

本文主要是对Java中一些常用的设计模式进行讲解 后期会进行不断的更新&#xff0c;欢迎浏览 23种设计模式 创建型模式&#xff0c;共五种&#xff1a;工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式。结构型模式&#xff0c;共七种&#xff1a;适配器模式、桥接…

Allavsoft for Mac v3.27.0.8852注册激活版 优秀的视频下载工具

Allavsoft for Mac是一款功能强大的多媒体下载和转换工具&#xff0c;支持从各种在线视频网站和流媒体服务下载视频、音频和图片。它具备批量下载和转换功能&#xff0c;可将文件转换为多种格式&#xff0c;以适应不同设备的播放需求。此外&#xff0c;Allavsoft还提供视频编辑…