Jenkins是一款开源 CI/CD 软件,用于自动化各种任务,包括构建、测试和部署软件。其中CI/CD是指一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法,其核心概念是持续集成、持续交付和持续部署。
Jenkins有两种版本,一种安装版,一种war包,都可从其官网 https://jenkins.io/zh 中获取,其中LTS 长期支持的版本,一般3个月发布一次版本。
这里我们采用了war包部署的方式,所以我们首先需要安装一台Tomcat服务器(这里我们将其端口改为了8000端口),然后我们直接将其 jenkins.war 部署在Tomcat上即可,可参考Tomcat的三种部署方式
然后我们直接启动Tomcat服务器,访问Jenkins服务,不过当我们第一次访问新的Jenkins实例时,系统会要求您使用自动生成的密码对其进行解锁,如下:
将上述密码输入解锁,完成后会让我们选择安装推荐插件还是自定义插件,这里我们就直接选择推荐插件安装,然后进行等待插件安装,如下:
等待安装完成后(可能有部分插件安装失败,可进行重试),然后就会需要创建第一个管理用户及密码,设置完成后就可以进行Jenkins的管理界面了
然后我们进行一些Jenkins的基本配置,主要在其系统管理——全局工具管理,主要配置如下:
配置JDK之前,我们肯定需要在服务器上事先安装好JDK,这里可见——JDK及Tomcat的安装,安装完并配置好环境变量后,Jenkins配置如下:
同样这里我们也是需要安装git的,这里我们直接采用yum的方式安装,执行 yum -y install git
即可
这里可以去Maven官网 http://maven.apache.org/download.cgi 下载,然后将其解压,放置相应的位置,最后还需配置下Maven的环境变量,如下:
然后我们进入系统管理——插件管理中,再来安装需要用到的插件,如下:
完成上述的准备工作后,我们就来新建一个任务了,上述安装了Maven Integration插件即可构建Maven项目,如下:
然后我们在其源码管理中,就需要添加相应的git地址及账户信息(若项目设置了相关的权限则需要),如下:
然后我们还可以看到其Build模块,通过Maven打包进行构建的,如下:
完成上述配置,我们其实已经可以进行构建了,然后我们可以查看其构建的控制台输出,在其输出日志中我们可以找到相关的路径,该路径就是Jenkins的工作空间(即一开始我们介绍Jenkins的图中所示),我们从Git服务器上pull下来的代码就会进行其路径下,有兴趣的话可以查看下
上述是我们手动进行构建的,在介绍Jenkins示意图中,我们还看到有定时和轮询另外两种方式,首先我们来看看定时构建,还是在我们之前的配置之中,我们可以选中定时构建,然后右侧的问号会提示我们如何进行配置,如下:
常见定时构建语法如下:
H/5 * * * *
H H/2 * * *
0 12 * * *
0 18 * * *
然后下面还有一个轮询的选项,也是需要配置上述的构建语法,其区别是定时构建只要配置的时间满足就进行构建。但是轮询的话不仅仅要求时间满足,还回去检查Git是否存在代码更新,两者都满足后才会进行构建
上述我们主要安装了Jenkins的构建项目,其帮助我们将项目从Git服务器上拉取下来,并且达成了jar包,然后我们还有最后一个步骤,就是将该项目部署到Tomcat中,根据其示意图我们现在会在安装一台Tomcat(端口号为8080,至于该演示项目结构及内容会在文末介绍)。
这里我们先不使用shell脚本,我们先来玩一玩热部署的方式,上述我们已经安装好了动态部署的插件Deploy to container,该插件安装完成后其实在上述配置的最下面我们会发现一个构建后的配置,如下:
这里再配置之前,热部署还需要对Tomcat进行相关的配置,首先我们需要在Tomat的 webapps/manager/META-INF
路径下的 context.xml
文件
然后我们还需要在Tomcat的 conf
目录下的 tomcat-users.xml
文件中添加一个用户信息,如下:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user rolename="admin-gui"/>
<user rolename="admin-script"/>
<user rolename="tomcat-gui"/>
<user username="tomcat" password="123456" roles="manager-script,admin-script,manager-gui,admin-gui,tomcat-gui"/>
上述Tomcat的配置完成后,我们就可以来启动该Tomcat了,启动后访问 /manager
,然后就会要求我们输入登录账号密码,及上述在tomcat-users.xml中配置的
然后Tomcat的完全OK了,这里我们就需要来配置上述提到了安装了动态部署的插件Deploy to container,出现的构建后操作的配置,如下:
其中首先我们需要配置下 .war 包的路径,就是上述我们提到的Jenkins的工作空间路径(我们在界面上找到该配置,其中也有工作空间的选项可以查看其路径及其下面的文件),然后还可以配置下其访问路径
然后我们选择添加容器——Add Container,选中一个版本和我们对应的配置,其中需要添加一个账号,和上述一致,就是tomcat-users.xml中添加的,然后配置下路径即可(也可以配置成127.0.0.1:port)
上述我们的Jenkins自动构建部署——热部署的方式就全部完成了,接下来就可以直接点击构建即可,构建完成后直接访问项目接口,如下:
最后我们来介绍下我们上述所使用到的项目,该测试的demo项目比较的简单,就是新建了一个SpringBoot的项目,其目录结构如下:
然后引入了相关的依赖,并在pom.xml进行相关的设置,比如打成war、支持热部署之类的,可参考SpringBoot(七)—— 热加载及打包部署
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-tomcatartifactId>
<scope>providedscope>
dependency>
之前上述提到的博客中也提到过,达成war包,项目启动时还需要进行相关设置,另外我们在其中添加了一个 /hello 的请求路径,用于测试,如下:
@SpringBootApplication
@RestController
public class DemoApplication extends SpringBootServletInitializer{
public static void main(String[] args) throws IOException {
SpringApplication.run(DemoApplication.class, args);
//System.in.read(); 本地测试使用
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoApplication.class);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s", name);
}
}