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.mzph.cn/news/795909.shtml

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

相关文章

Java栈和队列的实现

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

回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测

回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测 目录 回归预测 | Matlab基于CPO-GPR基于冠豪猪算法优化高斯过程回归的多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于CPO-GPR基于冠豪猪算法优化高斯…

顺序表相关习题

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

平衡二叉树,红黑树,B树和B+树的区别及其应用场景

平衡二叉树 基础数据结构左右平衡高度差大于1会自旋每个节点记录一个数据 平衡二叉树&#xff08;AVL&#xff09; AVL树全称G.M. Adelson-Velsky和E.M. Landis&#xff0c;这是两个人的人名。 平衡二叉树也叫平衡二叉搜索树&#xff08;Self-balancing binary search tree…

58 vue-cli 以及 webpack 提供的默认的插件, 配置

前言 vue-cli 这边作为驱动 webpack 的一个应用 它需要构造 webpack 所需要的上下文, 以及参数 这里 我们来关注一下 vue-cli 这边为 webpack 构造的参数 的相关处理 webpack 这边上下文的配置, 主要分为了几个部分, Entry, Output, Module, Resolve, Plugin, DevServer, O…

入门MyBatis

文章目录 入门MyBatisMyBatis快速入门创建user表添加数据创建模块导入坐标编写Mybatis核心配置文件编写SQL映射文件编码 使用idea编写sql代码链接数据库调出console控制台 Mapper代理开发定义与SQL映射文件同名的Mapper接口编码 MyBatis核心配置文件安装mybatisx插件配置文件完…

9(10)-1(2)-CSS 布局模型+CSS 浮动

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 一、CSS 布局模型1 流动模型&#xff08;标准流&#xff09; 二、CSS 浮动1 浮…

HTTP详解及代码实现

HTTP详解及代码实现 HTTP超文本传输协议 URL简述状态码常见的状态码 请求方法请求报文响应报文HTTP常见的HeaderHTTP服务器代码 HTTP HTTP的也称为超文本传输协议。解释HTTP我们可以将其分为三个部分来解释&#xff1a;超文本&#xff0c;传输&#xff0c;协议。 超文本 加粗样…

k8s存储卷 PV与PVC 理论学习

介绍 存储的管理是一个与计算实例的管理完全不同的问题。PersistentVolume 子系统为用户和管理员提供了一组 API&#xff0c;将存储如何制备的细节从其如何被使用中抽象出来。为了实现这点&#xff0c;我们引入了两个新的 API 资源&#xff1a;PersistentVolume 和 Persistent…

Java集合——Map、Set和List总结

文章目录 一、Collection二、Map、Set、List的不同三、List1、ArrayList2、LinkedList 四、Map1、HashMap2、LinkedHashMap3、TreeMap 五、Set 一、Collection Collection 的常用方法 public boolean add(E e)&#xff1a;把给定的对象添加到当前集合中 。public void clear(…

用C/C++加Easyx实现俄罗斯方块游戏(爆肝4万字,完全免费)

前言 相信大家一定玩过俄罗斯方块这款小游戏&#xff0c;简单容易上手是老少皆宜的小游戏&#xff0c;今天大家就跟着我来实现这个小游戏吧&#xff01;让自己学的C语言有用武之地。 为了让俄罗斯方块的开发更为简单些&#xff0c;图像更为丰富&#xff0c;在这里就利用了Easyx…

LOOP循环

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 循环语句和条件语句一样都可以控制程序的执行顺序&#xff0c;而循环语句是指一段程序可以重复执行&#xff0c;PL/SQL 语言主要支持 3 种类型的循环&#xff1a;LOOP 循环、…

最优乘车

题目描述 H 城是一个旅游胜地&#xff0c;每年都有成千上万的人前来观光。为方便游客&#xff0c;巴士公司在各个旅游景点及宾馆&#xff0c;饭店等地都设置了巴士站并开通了一些单程巴上线路。每条单程巴士线路从某个巴士站出发&#xff0c;依次途经若干个巴士站&#xff0c;…

42. 接雨水(Java)

目录 题目描述:输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a; height [0,1,0,2,1,0,1,3,2,1,2,1]输出&#xff1…

JavaEE 初阶篇-生产者与消费者模型(线程通信)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 生产者与消费者模型概述 2.0 在生产者与消费者模型中涉及的关键概念 2.1 缓冲区 2.2 生产者 2.3 消费者 2.4 同步机制 2.5 线程间通信 3.0 实现生产者与消费者模…

【ArcGIS微课1000例】0107:ArcGIS加载在线历史影像服务WMTS

文章目录 一、WMTS历史影像介绍二、ArcGIS加载WMTS服务三、Globalmapper加载WMTS服务一、WMTS历史影像介绍 通过访问历史影响WMTS服务,可以将全球范围内历史影像加载进来,如下所示: WMTS服务: https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WM…

二叉树中所有距离为k的节点

题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 从目标节点的左孩子&#xff0c;右孩子&#xff0c;父亲节点出发去找&#xff0c;左孩子 右孩子 做法简单 &#xff0c; 主要是父亲节点 &#xff0c;因此我们需要知道每个节点的父亲节点&am…

【学习笔记】Elsevier的Latex模板文件(附网址)

注&#xff1a;这是一篇没有技术含量的水文&#xff0c;主要是看有人下载下来&#xff0c;居然当成资源需要积分才能下载。我觉得不行&#xff0c;故提供原始下载地址供查阅使用。 链接: 上述图片所示网址&#xff1a;链接直达

Redis(性能管理、主从复制、哨兵模式)概述及部署

目录 一、性能管理 1、查看Redis内存使用 2、内存碎片率 3、跟踪内存碎片率 4、内存使用率 5、内回收key 二、Redis集群有三种模式 三、Redis主从复制 1、主从复制的概念 2、主从复制的作用 3、主从复制的流程 4、搭建Redis主从复制 1.环境准备 2.安装Redis&#…

并查集学习(836. 合并集合 + 837. 连通块中点的数量)

//得先加集合个数再合并&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 核心代码&#xff1a; int find(int x){//返回父节点if(x ! p[x]) {p[x] find(p[x]);//路径压缩 } //孩子不等于爸爸&#xff0c;就…