image-20210207124003725

官方网站:https://www.jenkins.io/

官方中文网站:https://www.jenkins.io/zh/doc/book/

w3cschool中文文档:https://www.w3cschool.cn/jenkins/

什么是Jenkins

官网介绍:

1
2
3
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 can be installed through native system packages, Docker, or even run standalone by any machine with a Java Runtime Environment (JRE) installed.

翻译:

  • 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:

image-20210207125242521

CD

CD(Continuous Delivery, 中文意思持续交付)是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。下图反应的是CI/CD 的大概工作模式:

image-20210207125322928

Jenkins安装

通过上面的介绍,我们了解到Jenkins是给我们的开发测试工作带来非常便捷的工具,那么,我们就需要学习该工具,在学习之前,我们需要安装Jenkins,Jenkins安装方法如下介绍。

Jenkins支持多平台,在官网中也很清晰的介绍了,Jenkins在不同平台、多种方式的安装

image-20210207130532741

从官网介绍,我们了解到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安装

  1. 宿主机已经安装配置完成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
  1. 使用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

  2. 使用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
      15
      version: "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篇中有详细介绍)

      image-20210216094706560

    • 运行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安装

  1. 下载Tomcat,Tomcat地址:https://tomcat.apache.org/
  2. 下载Jenkins的war,Jenkins地址:https://www.jenkins.io/download/
  3. 下载完成的jenkins.war,放到$TOMCAT_HOME/webapps目录下,启动Tomcat即可

启动报错:

  • 报错信息:资源添加到Web应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间

  • 解决办法:$TOMCAT_HOME/config目录下的context.xml文件,添加如下内容】

    1
    <Resources cachingAllowed="true" cacheMaxSize="100000" />

    image-20210303215923825

  • 重新启动Tomcat

Jenkins配置

以上我们已经将Jenkins已启动,在容器已经挂载了宿主机的环境变量,但是到这一步在Jenkins还是无法使用的,接下来我们需要在Jenkins中配置这些相关的环境变量。

  1. 浏览器打开:http://ip:port

  2. 首次启动,我们需要输入认证密码,我们通过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
  3. 完成认证后,进入到下一个面,安装推荐预置的插件

    image-20210215161024174

    等待安装完毕

    image-20210215161109967

    安装完成插件,进入下一个页面,设置管理员用户

    image-20210215161813533

    之后再根据自己的需求进行配置,完成后进入到Jenkins的主页面

    image-20210215162007707

  4. 安装插件,Python、Docker相关的插件,Jenkins主页->系统管理->插件管理,安装完成后http://ip:port/restart重启Jenkins

    image-20210215225105383

    image-20210215225157982

  5. 将JDK、Maven环境配置到Jenkins的全局工具配置,Jenkins主页的Manage Jenkins(管理系统)-> 全局工具配置

    image-20210216095346287

    配置完成【保存】,接下来Git、Maven、Docker配置类似。

  6. JDK、Maven的环境变量配置,Jenkins主页的Manage Jenkins(管理系统)-> 系统配置,在本页面找到“全局属性”->“环境变量”

    image-20210216095621860

    image-20210216095647222

    配置完成,点击【保存】

  7. 创建Job,运行,进行验证

    image-20210216095753343

    image-20210216095820680

后面有其他需要配置的,按以上配置即可。

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