DevOps体系之Jenkins
官网
中文官网:https://www.jenkins.io/zh/
认识Jenkins
持续集成与持续交付
-
持续集成 Continuous integration (CI)
-
概念作用:各小组分别负责各个模块开发,模块独立测试虽然能够通过,上线前所有模块整合到一起测试会发现很多问题,解决方法把代码返工修改,而且可能还有问题。
经常的把所有模块集成在一起进行测试,有问题尽早发现,这就是持续集成。目的是尽早发现项目整体运行问题,尽早解决。
-
Jenkins持续集成:Jenkins可以集成git,maven,sonar,部署插件等,类似maven生命周期,集成各种插件。
-
-
持续交付 Continuous delivery (CD)
-
概念作用:互联网项目的版本间升级时间太长,对用户反馈修改不及时,无法改善用户体验,用户流失严重。
用小版本快速迭代,不断收集用户反馈信息,最快的改进优化,新版本能够尽快交付给用户。
-
特点:功能迭代迅速,持续发布,不需要等待一个大版本再交付给用户。
-
-
持续部署 Continuous deployment (CD)
- 概念作用:通过自动化部署的手段将软件功能频繁的进行交付加快代码提交到功能上线的速度,保证新的功能能够第一时间部署到生产环境并被使用。

jenkins简介
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins具有非常优秀显著的特性
• 持续集成和持续交付
• 简易安装
• 配置简单
• 插件
• 扩展
• 分布式
为什么需要Jenkins
- 从开发到交付流程,很多重复动作都需要手工进行

- Jenkins将流程自动化串联操作

Jenkins目标
-
降低风险
一天中进行多次的集成,并做了相应的测试,这样有利于检查缺陷。
-
l减少重复过程
编译、测试、打包、部署等等固定操作都必须要做,无法省略任何一个环节;而使用Jenkins 等持续集成工具既可以把构建环节从手动完成转换为自动化完成
-
随时生成可部署的软件
持续集成可以在随时发布可以部署的软件。利用持续集成,可以经常对源代码进行一些小改动,并将这些改动和其他的代码进行集成,出现问题,项目团队马上就能知道,问题会第一时间被修复。
不采用持续集成,可能到交付前的集成测试的时候才发现问题,导致延迟发布产品。
安装
下载
注意:
需要安装jenkins的最新版本,否则插件无法正常安装,并且启动还可能报错
第一种
直接从hub.docker.com上搜索jenkins进行下载
注意
:官方的已经停止维护,过期了,请下载开源社区版的,如下图:

第二种
从jenkins.io官网,进入下载Jenkins




以下有docker、ubuntu/debian、CentOs、windows等

windows方式下载war包
注:下载war包的方式,使用的jdk8,安装启动报错SSL的错误,可以正常访问,安装插件好多失败问题

windows方式下载msi文件安装

docker启动
-
第一步:在Docker中创建桥接网络
shelldocker network create jenkins
-
第二步:启动
shelldocker run \ --name jenkins-blueocean \ --restart=always \ -u root \ --detach \ --network jenkins \ --env DOCKER_HOST=tcp://docker:2376 \ --env DOCKER_CERT_PATH=/certs/client \ --env DOCKER_TLS_VERIFY=1 \ --publish 9080:8080 \ --publish 50000:50000 \ --volume /home/jenkins-data:/var/jenkins_home \ --volume /home/jenkins-docker-certs:/certs/client \ jenkins/jenkins:2.309-jdk8
shell
docker run \
--name jenkins-blueocean \
--restart=always \
-u root \
--detach \
--network jenkins \
--env DOCKER_HOST=tcp://docker:2376 \
--env DOCKER_CERT_PATH=/certs/client \
--env DOCKER_TLS_VERIFY=1 \
--publish 9080:8080 \
--publish 50000:50000 \
--volume /home/jenkins-data:/var/jenkins_home \
--volume /home/jenkins-docker-certs:/certs/client \
jenkins/jenkins
说明:


windows启动
shell
# -Duser.language=C.UTF-8 指定语言 否则设置为中文后,汉化不完全
#--httpPort=4000 指定端口
java -Duser.language=C.UTF-8 -jar jenkins.war --httpPort=4000
更改jenkins主目录启动
shell
#默认启动后,主目录在:C:\Users\Admin\.jenkins
#将此目录复制到D:\Program Files\Jenkins中,通过-D指定系统参数的方式启动,切换主目录
java -Duser.language=C.UTF-8 -DJENKINS_HOME="D:\Program Files\Jenkins" -jar jenkins.war --httpPort=4000
访问
Jenkins 一直处于等待界面
原因:jenkins文件夹目录里面的文件 hudson.model.UpdateCenter.xml 指向国外的官网,因为防火墙的原因连不上
解决方法:将配置文件里面的url换成国内的即可
清华镜像
properties
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
访问
shell
http://ip:port
解锁Jenkins
第一次访问Jenkins需要解锁,查看/var/jenkins_home/secrets/initialAdminPassword文件,我本地安装密码写入的日志文件为:C:\Users\Admin.jenkins\secrets\initialAdminPassword

继续
选择"选择插件来安装"
创建管理员用户
admin/admin

实例配置

完成

首页

Manage Jenkins
Plugin Manager

高级

升级站点
默认地址:https://updates.jenkins.io/update-center.json
国内源地址:
来源 | 源地址 | 是否可用 |
---|---|---|
清华大学开源镜像站 | https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json | 可用 |
http://mirror.esuni.jp/jenkins/updates/update-center.json |

推荐插件
Folders Plugin
作用:该插件允许用户创建"文件夹"来组织任务。用户可以定义自定义分类法(例如,按项目类型、组织类型)。文件夹是可嵌套的,您可以在文件夹中定义视图。
安装了该插件之后,我们在新建任务(新建 Item)时,可以新建任务类型中会多一个文件夹类型的选项。
Credentials Binding Plugin
作用:该插件允许将凭据绑定到环境变量,以便在其他构建步骤中使用。该插件提供了一种简单的方法,可以打包所有作业的秘密文件和密码,并在构建过程中使用单个环境变量访问它们。
我们在系统管理中添加的凭证控制等等,都是可以说基于该插件配置的。这个插件算是一个底层插件了。
Timestamper
作用:该插件允许设置任务log时间戳,将时间戳添加到Jenkins作业的控制台输出中。
在构建环境中勾选:Add timestamps to the Console Output 就可以让我们的控制台输出log中每条记录配置上时间戳了。如果时间戳显示的日期格式不符合需求,我们可以在系统管理中的Configure System(系统配置)中找到Timestamper 然后定义我们自己的时间戳显示效果,也可以定义Pipeline中的显示效果。
Workspace Cleanup Plugin
作用:该插件用来清理工作空间。
我们在构建过程中jenkins会给我们生成一个workspace的工作空间,里面会存储我们在构造过程中产生的各种文档(特别是Git拉取到的代码)。该插件就允许我们在每次构造前,将该工作空间清理干净。(PS:我们每次构造之后的构建结果,不会存储在该工作空间中,清理不会造成以前构造的结果被删除)。
在构建环境中勾选:Delete workspace before build starts 就可以在每次构建时清理了。
Ant Plugin
作用:该插件用来给Jenkins添加Apache Ant的支持。
我们项目编译构造过程中如果要使用到Ant的支持,那么这个插件就是一个核心插件了。有了它Jenkins 才能支持Ant。下面的Gradle和它类似。
Gradle Plugin
作用:该插件用来给Jenkins添加Gradle的支持。
我们在编译Android项目的时候,就是通过Gradle进行自动编译构建的。它和Ant 和Maven是一样的。如果要编译Android项目。那么该插件就是必须的。
Pipeline
作用:该插件给Jenkins提供Pipeline功能。这个插件和它依赖的其他插件,整体组成了Jenkins 2.0的Pipeline功能。
例如:
Pipeline Graph Analysis Plugin : 提供 REST API的pipeline访问和管理功能。
Pipeline: API:定义管道API的插件。
Pipeline: Basic Steps:添加管道步骤"build"以触发其他作业的生成。
Pipeline: Declarative:一个顽固的声明性的管道。
等等,配套的插件。这里就不扩展了。
GitHub Branch Source Plugin
作用:该插件允许从一个或多个GitHub用户或组织创建基于存储库结构的新项目。
要使用该插件,我们在创建item的时候,类型选择构建一个多配置项目(Multi-configuration project)或者多管道项目(Multibranch Pipeline)等。
Git
作用:该插件为Jenkins项目提供了基本的git操作。它可以轮询、提取、签出、分支、列表、合并、标记和推送存储库。
我们其实安装该插件,就可以实现Git项目的代码拉取了。
这个是最基本核心的插件。后面Git client,Git server Plugin, GitHub plugin ,GitLab Plugin都是针对具体功能需求,减少操作步骤而封装的各种专用场景下的插件。
SSH Build Agents plugin
作用:该插件为Jenkins项目提供通过SSH启动代理的方法。
Matrix Authorization Strategy Plugin
作用:该插件在Jenkins中实现细粒度访问控制。
我们可以用这个插件实现各种安全选项控制,给与不同用户访问权限,已经编辑和禁用相关安全工配置选项。
这个插件是给管理员用的。普通使用者使用不到。
Localization: Chinese (Simplified)
作用:该插件为Jenkins 提供了简体中文语言包。
我们Jenkins中的各种配置项,有些是中文有些是英文,那就是这个插件包在生效。它对部分功能实现了翻译,部分功能没有翻译造成的。我们如果想使用纯英文版本可以关闭该插件。
locale
作用:汉化插件
GitLab Plugin
作用:该插件允许GitLab在提交代码或打开/更新合并请求时触发Jenkins中的构建。它还可以将构建状态发送回GitLab。
我们如果项目是通过GitLab进行控制的。那么可以用这个插件来实现,git提交后自动构建。
同时也可以配置GitLab的相关认证。
NodeJs Plugin
作用:该插件为NodeJs & npm 项目提供Jenkins集成。前端页面编译构造过程中会需要NodeJs。
这个插件就必不可少。
Display Console Output
作用:该插件可以直接在项目页面展现上一个构建的控制台输出界面。这样我们点击构建后,可以很方便的看到构建输出日志了。建议安装
Gitee
作用:该插件允许Gitee在提交代码或打开/更新合并请求时触发Jenkins中的构建。它还可以将构建状态发送回Gitee。和上面的GitLab Plugin插件是一样的。只是针对的平台不一样了而已。
问题
问题一
问题描述
下载插件无法查询到插件列表信息,并且报错,报错信息如下:
There were errors checking the update sites: SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

解决
解决方式一
将地址"https://updates.jenkins.io/update-center.json"更换为"http://updates.jenkins.io/update-center.json",,保存,回复正常如下图所示:


注
:方式一虽然解决了能够加载出可用的插件列表了,但是下载插件还是报错,如下所示
java
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
Caused: sun.security.validator.ValidatorException: PKIX path building failed
at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at sun.security.validator.Validator.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
Caused: javax.net.ssl.SSLHandshakeException
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
//省略其他日志信息
,,,,,,
解决方式二
采用解决方式二解决问题
-
更换新的站点:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
-
下载插件Skip Certificate Check的安装文件
下载路径:https://plugins.jenkins.io/skip-certificate-check/,如下图在浏览器中下载.hpi文件
-
将下载好的skip-certificate-check.hpi文件上传到jenkins中
-
重启jenkins
问题二
Please wait while Jenkins is getting ready to work ...
**原因:**因为访问官网太慢。我们只需要换一个源,不使用官网的源或者等待一会儿就可以了
汉化问题
问题描述
在windows环境下,安装了locale、Localization: Chinese后,设置语言环境后,还是汉化不完全,但是在linux环境下,就可以汉化完全
解决
Linux里面打印一下环境变量,LANG(语言)竟然是C.UTF-8
,百度了一下,C.UTF-8
是POSIX标准兼容的默认语言环境,而有的机器是en_US.UTF-8
;
因此,在JAVA启动参数里增加-Duser.language=C.UTF-8
参数来指定语言,然后保存,并重启Jenkins服务;
shell
# -Duser.language=C.UTF-8 指定语言 否则设置为中文后,汉化不完全
#--httpPort=4000 指定端口
java -Duser.language=C.UTF-8 -jar jenkins.war --httpPort=4000
DevOps的概念
基于development 以及operation两个词的混合,其目的在于缩短系统开发的生命周期,在这过程中发布特性、修复bug以及更新均被紧密的结合。
DevOps与持续交付的概念有些类似,DevOps促使开发与运维之间相互协作的文化,偏向于一种对于文化氛围的构建。
