Jenkins介绍
官方中文网站:https://www.jenkins.io/zh/doc/book/
w3cschool中文文档:https://www.w3cschool.cn/jenkins/
什么是Jenkins
官网介绍:
1 | Jenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks related to building, testing, and delivering or deploying software. |
翻译:
- Jenkins是一个独立的、开放源码的自动化服务器,可以用来自动化与构建、测试、交付或部署软件相关的各种任务。
- Jenkins可以通过本地系统包、Docker安装,甚至可以在任何安装了Java运行时环境(JRE)的机器上独立运行。
w3cschool中的介绍:
Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。Jenkins可以通过本机系统包Docker安装,甚至可以通过安装Java Runtime Environment的任何机器独立运行。
特点:
- 开源免费;
- 跨平台,支持所有的平台;
- master/slave支持分布式的build;
- web形式的可视化的管理页面;
- 安装配置超级简单;
- tips及时快速的帮助;
- 丰富的插件支持(已有的200多个插件)
CI/CD是什么?
经过上面的介绍,Jenkins是Java开发的一种持续集成工作,那什么是持续集成(CI)呢,而我们又说的持续构建(CD)又是什么呢?接下来,我们认识一下什么是CI、CD。
CI
CI(Continuous integration,中文意思是持续集成)是一种软件开发时间。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。通过借鉴网上的图理解CI:
CD
CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式:
Jenkins安装
通过上面的介绍,我们了解到Jenkins是给我们的开发测试工作带来非常便捷的工具,那么,我们就需要学习该工具,在学习之前,我们需要安装Jenkins,Jenkins安装方法如下介绍。
Jenkins支持多平台,在官网中也很清晰的介绍了,Jenkins在不同平台、多种方式的安装
从官网介绍,我们了解到Jenkins的运行需要Java servlet的容器或者应用服务,因为在安装Jenkins之前,我们的环境要配置好Java相关的配置。
由于容器技术的流行,给我安装配置环境,带来极大的便利,因此安装Jenkins选择Docker安装(其他方式的安装,可具体参考官方文档),根据官网的Docker安装Jenkins的步骤,官网介绍的过于复杂,我们将简化步骤安装,具体介绍如下。
系统要求
最低推荐配置:
- 256MB可用内存
- 1GB可用磁盘空间(作为一个Docker容器运行jenkins的话推荐10GB)
为小团队推荐的硬件配置:
- 1GB+可用内存
- 50 GB+ 可用磁盘空间
软件配置:
- Java 8—无论是Java运行时环境(JRE)还是Java开发工具包(JDK)都可以。
注意: 如果将Jenkins作为Docker 容器运行,这不是必需的
Jenkins Docker安装
宿主机已经安装配置完成jdk、maven、docker等需要的配置
1
2
3
4
5
6
7
8
9
10
11
12[root@localhost ~]# java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)
[root@localhost ~]# mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_221, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
[root@localhost ~]# docker --version
Docker version 20.10.1, build 831ebea
使用Docker命令,安装并运行Jenkins
1
docker run --name jenkins -d -p 8086:8080 -p 5000:5000 -v jenkinsdata:/var/jenkins_home -v /usr/local/jdk1.8:/usr/local/jdk1.8 -v /usr/local/maven:/usr/local/maven jenkins/jenkins:lts
-v jenkinsdata
自动创建数据卷并映射容器内地址/var/jenkins_home,将Jenkins的数据持久化-v /usr/local/jdk:/usr/local/jdk
将宿主机的jdk环境映射到容器内-v /usr/local/maven:/usr/local/maven
将宿主机的maven环境映射到容器内
如果Jenkins需要的配置很多,在启动命令上加上一长串,是不便于查看和管理的,因此下面我们介绍使用docker-compose管理启动jenkins
使用docker-compose,以下是docker-compose.yml文件的内容
在宿主机新建目录及docker-compose.yml
docker-compose.yml内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15version: "3.0"
services:
jenkins:
image: jenkins/jenkins:lts
container_name: jenkins
ports:
- "8088:8080"
volumes:
- jenkinsdata:/var/jenkins_home
- /usr/local/maven:/usr/local/maven
- /usr/local/jdk1.8:/usr/local/jdk1.8
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
volumes:
jenkinsdata:查看docker-compose就非常清晰的看到jenkins所需的配置,再之后有各种的环境配置、映射的内容都可以在此配置,清晰明了,随后运行docker-compose即可。
注意:yml文件格式是靠锁紧,所以我们在编写yml文件的时候,需要借助工具,我是借助了Idea的Docker插件和配置Remote Host功能(该配置在Docker篇中有详细介绍)
运行docker-compose即可
1
2
3
4
5
6
7
8[root@localhost jenkins-config]# docker-compose up -d
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
Creating network "jenkins-config_default" with the default driver
Creating volume "jenkins-config_jenkinsdata" with default driver
Pulling jenkins (jenkins/jenkins:)...
latest: Pulling from jenkins/jenkins
3192219afd04: Pull complete
……查看已启动的jenkins容器
1
2
3[root@localhost jenkins-config]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e5ce6e3fde65 jenkins/jenkins "/sbin/tini -- /usr/…" 10 seconds ago Up 8 seconds 50000/tcp, 0.0.0.0:8088->8080/tcp jenkins
注:在Jenkins中我们要运行我们的工程,需要运行的相关的插件,根据需求安装或者挂载
Jenkins Tomcat安装
- 下载Tomcat,Tomcat地址:https://tomcat.apache.org/
- 下载Jenkins的war,Jenkins地址:https://www.jenkins.io/download/
- 下载完成的jenkins.war,放到
$TOMCAT_HOME/webapps
目录下,启动Tomcat即可
启动报错:
报错信息:资源添加到Web应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间
解决办法:
$TOMCAT_HOME/config
目录下的context.xml文件,添加如下内容】1
<Resources cachingAllowed="true" cacheMaxSize="100000" />
重新启动Tomcat
Jenkins配置
以上我们已经将Jenkins已启动,在容器已经挂载了宿主机的环境变量,但是到这一步在Jenkins还是无法使用的,接下来我们需要在Jenkins中配置这些相关的环境变量。
浏览器打开:http://ip:port
首次启动,我们需要输入认证密码,我们通过docker容器查看日志获取密码或者进入到容器中查看存储密码的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24[root@localhost ~]# docker logs -f jenkins
Running from: /usr/share/jenkins/jenkins.war
webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
2021-02-14 14:38:01.406+0000 [id=1] INFO org.eclipse.jetty.util.log.Log#initialized: Logging initialized @2009ms to org.eclipse.jetty.util.log.JavaUtilLog
2021-02-14 14:38:01.769+0000 [id=1] INFO winstone.Logger#logInternal: Beginning extraction from war file
2021-02-14 14:38:05.068+0000 [id=1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath
2021-02-14 14:38:05.230+0000 [id=1] INFO org.eclipse.jetty.server.Server#doStart: jetty-9.4.35.v20201120; built: 2020-11-20T21:17:03.964Z; git: bdc54f03a5e0a7e280fab27f55c3c75ee8da89fb; jvm 1.8.0_242-b08
……
2021-02-14 14:38:22.429+0000 [id=26] 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:
39df551ab75c4960bf3180b7944391a7
This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
*************************************************************
*************************************************************
*************************************************************1
2
3[root@localhost ~]# docker exec -it jenkins bash
jenkins@e5ce6e3fde65:/$ cat /var/jenkins_home/secrets/initialAdminPassword
39df551ab75c4960bf3180b7944391a7完成认证后,进入到下一个面,安装推荐预置的插件
等待安装完毕
安装完成插件,进入下一个页面,设置管理员用户
之后再根据自己的需求进行配置,完成后进入到Jenkins的主页面
安装插件,Python、Docker相关的插件,Jenkins主页->系统管理->插件管理,安装完成后http://ip:port/restart重启Jenkins
将JDK、Maven环境配置到Jenkins的全局工具配置,Jenkins主页的Manage Jenkins(管理系统)-> 全局工具配置
配置完成【保存】,接下来Git、Maven、Docker配置类似。
JDK、Maven的环境变量配置,Jenkins主页的Manage Jenkins(管理系统)-> 系统配置,在本页面找到“全局属性”->“环境变量”
配置完成,点击【保存】
创建Job,运行,进行验证
后面有其他需要配置的,按以上配置即可。
Jenkins Warnings Next Generation Plugin 代码检测插件
Warnings Next Generation Plugin是一款jenkins的插件,它的出现是为了简化检测工具的安装,说白了就是一个静态代码分析工具的集合.它内置了很多的静态代码检测工具,有了这个我们可以很方便的实现代码检测。
Github地址:https://github.com/jenkinsci/warnings-ng-plugin
展示以下是支持常用的插件
具体支持插件的列表:https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md