基于Jenkins构建生产CICD环境(上篇)

news2024/9/25 21:30:26

目录

环境概述

Jenkins简介

持续集成

持续集成的效益

持续集成的作用

持续集成的特点

持续交付

持续部署

Maven 介绍

安装配置Jenkins

Jenkins配置

1、修改jenkins初始密码

2、安装 Jenkins 必要插件


环境概述

        随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降;持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。所以,当配置完Jenkins 持续集成持续交付环境后,就可以把发布的任务交给集成服务器去打理了。使用 Maven(Ant) 等来实现 Java 项目自动化构建发布部署。这些工具可以帮助在构建过程中实现自动化发布、回滚等动作。

Jenkins简介

 

        Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。官方网站:https://jenkins.io/。

        Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、SubversionGit、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins的主要开发者是川口耕介。Jenkins是在MIT许可证下发布的自由软件。

        Jenkins 能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能, 还能用图表的形式,形象地展示项目构建的趋势和稳定性。

Jenkins 包含以下几个特点:

  • 易安装:仅仅一个 jenkins.war,从官网下载该文件后,直接运行,无需额外的安装, 更无需安装数据库;
  • 易配置:提供友好的 GUI 配置界面;
  • 变更支持:Jenkins 能从代码仓库(SVN /Git)中获取并产生代码更新列表,并输出到编译输出信息中;
  • 支持永久链接:用户是通过 Web 来访问 Jenkins 的,而这些 Web 页面的链接地址都是永久链接地址,可以在各种文档中直接使用该链接;
  • 集成 E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时收取集成结果(构建一次集成需要花费一定时间,有了这个功能,就可以在等待结果过程中,干别的事情);
  • JUnit/TestNG 测试报告:也就是用以图表等形式提供详细的测试报表功能;
  • 支持分布式构建:Jenkins 可以把集成构建等工作分发到多台计算机中完成;
  • 文件指纹信息:Jenkins 会保存构建集成所产生的 jars 文件、集成构建使用了哪个版;
  • 支持第三方插件:Jenkins 支持第三方插件,这使得 Jenkins 功能变得越来越强大。

持续集成

        持续集成(英语:Continuous integration,缩写为 CI),一种软件工程流程,将所有工程师对于软件的工作复本,每天集成数次到共用主线(mainline)上。

        这个名称最早由葛来迪·布区(Grady Booch)在他的布区方法中提出,但是他并没有提到要每天集成数次。之后成为极限编程(extreme programming,缩写为XP)的一部分。在测试驱动开发(TDD)的作法中,通常还会搭配自动单元测试。

        持续集成的提出,主要是为了解决软件进行系统集成时面临的各项问题,极限编程称这些问题为集成地狱(integration hell)。

 

        持续集成主要是强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。简单来讲就是:频繁地(一天多次)将代码集成到主干。

持续集成的效益

  • 及早发现集成错误且由于修订的内容较小所以易于追踪,这可以节省项目的时间与成本。
  • 避免发布日期的前一分钟发生混乱,当每个人都会尝试为他们所造成的那一点点不兼容的版本做检查。
  • 当单元测试失败或发生错误,若开发人员需要在不除错的情况下还原代码库到一个没有问题的状态,只需要放弃一小部分的更改 (因为集成的次数频繁)。
  • 让 "最新" 的程序可保持可用的状态供测试、展示或发布用。
  • 频繁的提交代码会促使开发人员创建模块化,低复杂性的代码。
  • 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续集成的作用

  • 保证团队开发人员提交代码的质量,减轻了软件发布时的压力;
  • 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量。

持续集成的特点

  • 是一个自动化的、周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;
  • 需要有专门的集成服务器来执行集成构建;
  • 需要有代码托管工具支持;

持续交付

        持续交付(英语:Continuous delivery,缩写为 CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。

它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

 

        持续交付是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。

持续部署

        持续部署(英语:Continuous Deployment,缩写为 CD),是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

        有时候,持续部署也与持续交付混淆。持续部署意味着所有的变更都会被自动部署到生产环境中。持续交付意味着所有的变更都可以被部署到生产环境中,但是出于业务考虑,可以选择不部署。如果要实施持续部署,必须先实施持续交付。

 

        持续部署即在持续交付的基础上,把部署到生产环境的过程自动化。

关键字: CI/CD 持续集成/持续交付/持续部署

Maven 介绍

        Maven 项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

        Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。

        由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司 项目采用 Maven 的比例在持续增长。

        Maven 这个单词来自于意第绪语(犹太语),意为知识的积累,最初在 Jakata Turbine 项目中用来简化构建过程。当时有一些项目(有各自 Ant build 文件),仅有细微的差别,而 JAR 文件都由 CVS 来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享 JARs。

安装配置Jenkins

[root@localhost ~]# hostname jenkins
[root@localhost ~]# bash
[root@jenkins ~]# systemctl stop firewalld
[root@jenkins ~]# iptables -F
[root@jenkins ~]# setenforce 0

软件要求

jenkins-2.419需要jdk-17版本

[root@jenkins ~]# sudo yum -y install java-11-openjdk-devel

[root@jenkins ~]# java -version
openjdk version "11.0.20" 2023-07-18 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.20.0.8-1.el7_9) (build 11.0.20+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.20.0.8-1.el7_9) (build 11.0.20+8-LTS, mixed mode, sharing)

Jenkins安装方式一:war包

  1. 先安装tomcat将jenkins.war直接放到webapps目录下
  2. 通过 java -jar jenkins.war --httpPort=8080命令直接运行

官方仓库:https://pkg.jenkins.io/redhat-stable/

清华大学开源软件镜像站:Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /jenkins/redhat/ | 清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/

下载相应的数据包即可,我这里使用的是jenkins-2.419-1.1.noarch.rpm

Jenkins安装方式二:rpm方式(推荐)

[root@jenkins ~]# rpm -ivh jenkins-2.419-1.1.noarch.rpm 
警告:jenkins-2.419-1.1.noarch.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID ef5975ca: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:jenkins-2.419-1.1                ################################# [100%]



[root@jenkins ~]# jenkins start            #启动jenkins,不要打断进程
Running from: /usr/share/java/jenkins.war
webroot: /root/.jenkins/war
2023-08-21 07:19:51.023+0000 [id=1]	INFO	winstone.Logger#logInternal: Beginning extraction from war file
2023-08-21 07:19:52.223+0000 [id=1]	WARNING	o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath
2023-08-21 07:19:52.297+0000 [id=1]	INFO	org.eclipse.jetty.server.Server#doStart: jetty-10.0.15; built: 2023-04-11T17:25:14.480Z; git: 68017dbd00236bb7e187330d7585a059610f661d; jvm 11.0.20+8-LTS
2023-08-21 07:19:52.620+0000 [id=1]	INFO	o.e.j.w.StandardDescriptorProcessor#visitServlet: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
2023-08-21 07:19:52.720+0000 [id=1]	INFO	o.e.j.s.s.DefaultSessionIdManager#doStart: Session workerName=node0
2023-08-21 07:19:53.388+0000 [id=1]	INFO	hudson.WebAppMain#contextInitialized: Jenkins home directory: /root/.jenkins found at: $user.home/.jenkins
2023-08-21 07:20:08.593+0000 [id=1]	INFO	o.e.j.s.handler.ContextHandler#doStart: Started w.@7ce7e83c{Jenkins v2.419,/,file:///root/.jenkins/war/,AVAILABLE}{/root/.jenkins/war}
2023-08-21 07:20:08.626+0000 [id=1]	INFO	o.e.j.server.AbstractConnector#doStart: Started ServerConnector@4b34fff9{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2023-08-21 07:20:08.690+0000 [id=1]	INFO	org.eclipse.jetty.server.Server#doStart: Started Server@5717c37{STARTING}[10.0.15,sto=0] @18261ms
2023-08-21 07:20:08.719+0000 [id=23]	INFO	winstone.Logger#logInternal: Winstone Servlet Engine running: controlPort=disabled
2023-08-21 07:20:08.985+0000 [id=30]	INFO	jenkins.InitReactorRunner$1#onAttained: Started initialization
2023-08-21 07:20:09.007+0000 [id=28]	INFO	jenkins.InitReactorRunner$1#onAttained: Listed all plugins
2023-08-21 07:20:09.909+0000 [id=29]	INFO	jenkins.InitReactorRunner$1#onAttained: Prepared all plugins
2023-08-21 07:20:09.912+0000 [id=29]	INFO	jenkins.InitReactorRunner$1#onAttained: Started all plugins
2023-08-21 07:20:09.931+0000 [id=29]	INFO	jenkins.InitReactorRunner$1#onAttained: Augmented all extensions
2023-08-21 07:20:10.164+0000 [id=29]	INFO	jenkins.InitReactorRunner$1#onAttained: System config loaded
2023-08-21 07:20:10.164+0000 [id=29]	INFO	jenkins.InitReactorRunner$1#onAttained: System config adapted
2023-08-21 07:20:10.164+0000 [id=29]	INFO	jenkins.InitReactorRunner$1#onAttained: Loaded all jobs
2023-08-21 07:20:10.165+0000 [id=29]	INFO	jenkins.InitReactorRunner$1#onAttained: Configuration for all jobs updated
2023-08-21 07:20:10.260+0000 [id=44]	INFO	hudson.util.Retrier#start: Attempt #1 to do the action check updates server
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.codehaus.groovy.vmplugin.v7.Java7$1 (file:/root/.jenkins/war/WEB-INF/lib/groovy-all-2.4.21.jar) to constructor java.lang.invoke.MethodHandles$Lookup(java.lang.Class,int)
WARNING: Please consider reporting this to the maintainers of org.codehaus.groovy.vmplugin.v7.Java7$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
2023-08-21 07:20:10.763+0000 [id=29]	INFO	jenkins.install.SetupWizard#init: 

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

0a66860a4e9a4fb9bfeae74b2fab5133

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************




[root@jenkins ~]# netstat -anptl | grep java
tcp6       0      0 :::8080                 :::*                    LISTEN      9300/java           
tcp6       0      0 192.168.108.172:44966   52.202.51.185:443       ESTABLISHED 9300/java           

浏览器访问:http://192.168.2.116:8080/

 

  稍等一会来导安装插件选择的页面。

 

 

 

 

 

 

Jenkins配置

1、修改jenkins初始密码

 

 

 

 使用新密码登录

 

2、安装 Jenkins 必要插件

在 Jenkins 首页中,点击左侧的Manage Jenkins>>Manage Plugins>>可选插件,在过滤搜索框中输入要安装的 Publish Over SSH 、 Maven Integration 插件,并勾中其左侧的复选框,点击“直接安装”即可开始插件安装操作。

 

 

3、配置jenkins并发执行数量

用于提高提高执行效率

Manage Jenkins >> Configure System >> Maven项目配置

 

 

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

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

相关文章

【vue】更改角色权限后,实现页面不刷新更改其可展示的导航菜单

登入的角色本身属于领导级别(集团权限),没有下级的不同权限: 切换不同身份(公司),以获得相应部门的不同导航菜单及权限 这里实现:更改角色权限后,实现页面 不刷新 更改…

Bigemap如何添加最新地图?

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 打开软件,要提示需要授权和添加地图,需要授权可以联系客服处理,然后点击选择地图这个按钮,列表中有个添加按钮点进去选择…

这款Linux不收费,却赢得了江湖!

Linux也好,开源也好,近些年犹如翻涌的漩涡,狂热非常,争论不断。从去年高人气开源 npm 包“colors”与“faker”被作者恶意引进错误内容,再到近期的红帽修改公共版的RHEL源代码的发布规则,都在业内引起了不小…

SpringBoot整合Mybatis Plus——条件构造器Wrapper

Mybatis Plus为我们提供了如下的一些条件构造器&#xff0c;我们可以利用它们实现查询条件、删除条件、更新条件的构造。 条件构造器 | MyBatis-Plus (baomidou.com) 一、通过maven坐标引入依赖&#xff08;注意版本&#xff01;&#xff01;&#xff09; <dependency>…

Vulnhub: ICMP: 1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.208 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.208 80端口的cms为Monitorr 1.7.6m 搜索发现该版本的cms存在远程代码执行 searchsploit monitorr 漏洞利用 nc本地监听&…

GEE-PIE遥感大数据处理与典型案例教程

详情点击链接&#xff1a;GEE-PIE遥感大数据处理与典型案例教程 一&#xff1a;GEE和PIE遥感云平台 1.GEE和PIE平台及典型应用案例 2.JavaScript基础&#xff0c;包括变量&#xff0c;运算符&#xff0c;数组&#xff0c;判断及循环语句等 3.遥感云重要概念与典型数据分析流程…

水电站数字孪生三维可视化展示开发

一、智慧污水处理厂数字孪生系统 智慧污水处理厂结合视频识别、机器人、BIM、互联网、物联网、云计算及大数据等技术&#xff0c;在前期进行精细化设计&#xff0c;实现水质达标&#xff0c;安全生产、高效节能等生产、运营和管理目标&#xff0c;从而达到提升城市生活污水处理…

深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战49-基于卷积神经网络和注意力机制的汽车品牌与型号分类识别的应用,该项目就像是一只智慧而敏锐的眼睛,专注地凝视着汽车世界。这个项目使用PyTorch作为强有力的工具,提供了一个深度学习的舞台,让我们能够设计和训练一个…

qiiuzhiji4

本篇是从慧与离职后到2023年8月21日这段时间的经历 2023/7/31至2023/8/21 本篇初次写于2023年8月21日 从慧与离职后基本上就是在专心找工作了&#xff0c;但是有在这段时间找工作经历的人都明白&#xff0c;IT行业不复以往了。尤其是对于我这样的普通二本学历的人来说&#xff…

CW4-6A-S、CW4-10A-S、CW4-20A-S、CW4-30A-S螺栓式滤波器

CW3L2-3A-S、CW3L2-6A-S、CW3L2-10A-S、CW3L2-20A-S CW3-3A-S、CW3-6A-S、CW3-10A-S、CW3-20A-S、CW3-30A-S CW4EL2-3A-S、CW4EL2-6A-S、CW4EL2-10A-SCW4EL2-20A-S、CW4EL2-30A-S CW4E-3A-S、CW4E-6A-S、CW4E-10A-S、CW4E-20A-S、CW4E-30A-S CW4E-40A-S(001)、CW4E-50A-S(0…

Lnton羚通算法算力云平台在环境配置中Windows10终端和VSCode下如何打开Anaconda-Prompt

在Windows 10的终端和VSCode中&#xff0c;可以直接打开Anaconda Prompt。下面是两种方法&#xff1a; Windows 10终端&#xff1a;在开始菜单中搜索"Anaconda Prompt"&#xff0c;然后点击打开。这将启动Anaconda Prompt终端&#xff0c;你可以在其中执行conda相关命…

得帆创始人张桐:低代码平台的定位和解答

很多朋友都有疑问&#xff1a;得帆服务了非常多的500强大型企业&#xff0c;是不是只有大型企业才能把低代码用好&#xff1f;是不是只有大型企业才能用低代码提升效率和降低成本&#xff1f;是不是大型企业才有经济实力去购买和使用低代码软件&#xff1f;低代码&#xff0c;零…

【现场问题】arthas,线上查看某一个类的,某一个方法,入参是什么【类似于断点操作】

arthas arthas下载方式方法 arthas下载 我的链接。免费的放心下 方式方法 watch 类名 方法名 -b “{params}” -x 3 这里的3 是指 第几个层级 watch org.apache.dolphinscheduler.api.service.ExecutorService startCheckByProcessDefinedId -b "{params}" -x 3…

6篇 ICML 2023 杰出论文解析,涉及无学习率、LLM水印、域泛化等方向

ICML 全称 International Conference on Machine Learning&#xff0c;由国际机器学习学会&#xff08;IMLS&#xff09;举办&#xff0c;是计算机人工智能领域的顶级会议。今年的 ICML 大会已是第 40 届&#xff0c;共收到 6538 份投稿&#xff0c;有1827 份被接收&#xff0c…

速通蓝桥杯嵌入式省一教程:(七)定时器输入捕获中断与PWM频率占空比测量

前文已经讲述过定时器的两个用法&#xff1a;基本定时中断与PWM输出。本节接着介绍第三种用法&#xff1a;定时器输入捕获中断。 在此之前&#xff0c;需要解释一下前文一直出现过的与定时器有关的概念。 定时器(TIMER)&#xff1a;所谓定时器&#xff0c;其基本功能就是定时…

strstr的学习与使用及实现/查找字符串中的字符

在字符串中查找字符或字符串 strstr函数传入两个字符串&#xff0c;并返回查找后的首地址&#xff0c;找不到返回NULL 模拟实现 char* my_strstr( char* str1, const char* str2) {int i, j;assert(str1 && str2);//断言判断一下for ( i 0; i < strlen(str1); i){f…

【G-LAB】网络工程师常用排错命令详细版

网络工程师在日常配置中难免出现各种配置错误&#xff0c;比如接口地址配错、掩码位数配错、接口忘记no shutdown。除去这些基础错误&#xff0c;在配置各种路由选择协议时也会因为网络类型、邻居类型、区域和路由器层级等各种问题使邻居无法建立、路由无法传递进而导致网络不通…

Apipost中自定义接口字段如何配置

Apipost项目设置中可以配置接口文档中的自定义接口字段&#xff0c;创建状态码字典。分享分档时会展示到文档页面 状态码字典 在状态码字典中可以自定义状态码即其含义 自定义的状态码会在分享的API文档中展示 接口属性 接口属性中可以自定义接口和接口文档展示字段&#xf…

使用Python批量将飞书文档转为MD

说明&#xff1a;飞书是在线文档平台&#xff0c;本文介绍如何使用Python程序批量将飞书文档转为MD文档&#xff0c;并下载到本地&#xff1b; 复制地址 首先&#xff0c;把文档的URL都复制下来&#xff0c;这个需要一个一个点&#xff0c;并复制拷贝&#xff0c;但却是工作量…

【HCIP】10.路由策略

&#x1f4ce;13 路由策略与路由控制.pptx 通过修改路由的属性&#xff0c;影响了路由的生成及选路&#xff0c;最终影响了转发流量的路径&#xff1b;控制平面。 ACL IP prefix Filter-Policy Router-Policy 笔记