目录
环境概述
Jenkins简介
持续集成
持续集成的效益
持续集成的作用
持续集成的特点
持续交付
持续部署
Maven 介绍
安装配置Jenkins
Jenkins配置
1、修改jenkins初始密码
2、安装 Jenkins 必要插件
随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降;持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。所以,当配置完Jenkins 持续集成持续交付环境后,就可以把发布的任务交给集成服务器去打理了。使用 Maven(Ant) 等来实现 Java 项目自动化构建发布部署。这些工具可以帮助在构建过程中实现自动化发布、回滚等动作。
Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。官方网站:https://jenkins.io/。
Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins的主要开发者是川口耕介。Jenkins是在MIT许可证下发布的自由软件。
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 项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。
由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司 项目采用 Maven 的比例在持续增长。
Maven 这个单词来自于意第绪语(犹太语),意为知识的积累,最初在 Jakata Turbine 项目中用来简化构建过程。当时有一些项目(有各自 Ant build 文件),仅有细微的差别,而 JAR 文件都由 CVS 来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享 JARs。
[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包
官方仓库: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 首页中,点击左侧的Manage Jenkins>>Manage Plugins>>可选插件,在过滤搜索框中输入要安装的 Publish Over SSH 、 Maven Integration 插件,并勾中其左侧的复选框,点击“直接安装”即可开始插件安装操作。
3、配置jenkins并发执行数量
用于提高提高执行效率
Manage Jenkins >> Configure System >> Maven项目配置