Jenkins持续集成系统
目录
- 什么是Jenkins
- 1:为什么要用Jenkins
- 2:Jenkins的特点
- 3:什么是CI/CD
- 4:持续集成特点
- 5:持续集成的工作原理
- Jenkins的部署
- 1:操作系统设置
- 2:安装git
- 3:安装java环境
- 4:安装maven
- 5:安装nodejs
- 6:安装tomcat
- Jenkins的安装与初始化设置
- 1:安装Jenkins
- 2:设置Jenkins插件更新源
- 3:Jenkins初始化
- Jenkins插件管理
- 1:设置国内插件源
- 2:安装插件
- 为Jenkins设置项目环境
- Jenkins角色与权限管理
- 1:开启权限全局安全配置
- 2:创建角色
- 3:创建用户
- 4:分配角色
- 5:创建项目测试权限
- Jenkinss凭证管理
- 1:凭据的种类
- 2:凭据的作用范围
- 3:添加用户密码类型的凭据
- 4:添加SSH类型的凭据
什么是Jenkins
Jenkins 是一个功能强大的应用程序,允许持续集成和持续交付项目(持续部署),无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成 Jenkins 可以用于一些测试和部署技术。
Jenkins 原名 Hudson,2011 年改为现在的名字,它是一个开源的实现持续集成的软件工具。官方网站网址:https://jenkins.io/。Jenkins 能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能,还能通过图表的形式,形象地展示项目构建的趋势和稳定性。
Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
jenkins 提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
Jenkins 可以构建一个自动化的持续集成环境可以使用它来“自动化”编译、打包、分发部署应用,它兼容 ant、maven、gradle 等多种第三方构建工具,同时与 svn、git 能无缝集成,也支持直接与知名源代码托管网站,如 github、bitbucket 直接集成。
1:为什么要用Jenkins
目前持续集成(CI)已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。它是一种实践,旨在缓和和稳固软件的构建过程。并且能够帮助您的开发团队应对如下挑战:
(1)软件构建自动化
配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,对目标软件进行构建
(2)构建可持续的自动化检查
CI 系统能持续地获取新增或修改后签入的源代码,也就是说,当软件开发团队需要周期性的检査新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力(说直接一点也是钱啊,呵呵)。
(3)构建可持续的自动化测试
构建检查的扩展部分,构建后执行预先制定的一套测试规则,完成后触发通知(Email,Rss 等等)给相关的当事人。
(4)生成后后续过程的自动化
当自动化检查和测试成功完成,软件构建的周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。
2:Jenkins的特点
Jenkins 包含以下几个特点:
易安装:从官网仅需要下载一个 jenkins.war 文件后,直接运行,无需额外的安装,更无需安装数据库;
易配置:提供友好的 GUI 配置界面;
变更支持:Jenkins能从代码仓库(SVN /Git)中获取并产生代码更新列表,并显示到编译输出信息中;
支持永久链接:用户是通过 web 来访问 Jenkins 的,而这些 web 页面的链接地址都是永久链接地址,可以在各种文档中直接使用该链接;
集成 E-Mail/RSS/IM:当完成一次集成后,可通过这些工具实时收取集成结果(构建一次集成需要花费一定时间,有了这个功能,就可以在等待结果过程中,干别的事情);
JUnit/TestNG 测试报告:是以图表等形式提供详细的测试报表功能;
支持分布式构建:Jenkins 可以把集成构建等工作分发到多台计算机中完成;
文件指纹信息:Jenkins 会保存构建集成所产生的jars 文件、集成构建使用了哪个版本的jars 文件等构建记录;
支持第三方插件:Jenkins支持第三方插件,这使得Jenkins 功能变得越来越强大。
3:什么是CI/CD
持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包
括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
持续部署(continuous deployment)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率,让engineering productivity(工程生产力) 最大化。
持续交付(Continuous delivery),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。
持续部署和持续交付的区别:
持续部署是持续交付的一种实现方式,它将持续交付的实践方法进一步扩展到软件部署过程中。持续部署强调的是将通过测试的更新自动部署到生产环境,而持续交付则更侧重于确保软件可以随时通过自动化测试并准备部署到生产环境。简而言之,持续部署关注于"部署”,而持续交付关注于“交付准备”。
4:持续集成特点
持续集成是一个自动化的、周期性的集成测试过程,检出代码、编译构建、运行测试、结果记录、测试统计等过程都是自动完成的,无需人工干预。持续集成需要有专门的集成服务器来执行集成构建操作,同时需要有代码托管工具的支持。
5:持续集成的工作原理
Jenkins的部署
一台gitlab,一台Jenkins(docker环境)
1:操作系统设置
2:安装git
3:安装java环境
4:安装maven
备注:
阿里提供了 maven 更新源,可访问阿里官方网站査看详细信息。https://maven.aliyun.com
5:安装nodejs
6:安装tomcat
Jenkins的安装与初始化设置
1:安装Jenkins
将 jenkins.war 文件保存到Tomcat 服务的 /usr/local/tomcat/webapps 目录下。启动 Tomcat就会自动部署 Jenkins。
2:设置Jenkins插件更新源
3:Jenkins初始化
登录
查看初始密码:
cat /root/.jenkins/secrets/initialAdminPassword
选择插件安装,然后插件选择无,安装
Jenkins插件管理
1:设置国内插件源
进入 Manage Jenkins->Plugins->Advanced settings 最下面有 Update site(升级站点),设置为如下链接,并点“提交”按钮。
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
重启tomcat就是重启Jenkins服务
重启服务
2:安装插件
点击“Manage jenkins”–>“Plugins”–>“Avalable plugins”,输入要安装的插件,并勾
选列出来的插件,然后点安装。
在本课程内,可能会用的插件如下所示:
Git Parameter
Git Pipeline for Blue Ocean
GitLab
Blue Ocean
Blue Ocean pipeline EditorBlue Ocean Core Js
Pipeline SCM API for Blue OceanDashboard for Blue Ocean
Build With Parameters
extended Choice ParameterKubernetes
Kubernetes CLI
Kubernetes credentials
Image Tag Parameter
Active choices
SSH
ansible
Maven Integration
Publish over SSH
Role-based Authorization Strategy
Node]s
在初始化过程中已经安装上去的,此处可以不用再安装,如果在初始过程中没有安装,或安装不完全,此处可以都安装上去,为其他项目的实施提供可用功能。
Git
Credentials
Credentials Binding
Dynamic Extended Choice Parameter plug-In
Dynamic Parameter Plug-In
Pipeline
Pipeline:Declarative
Localization:Chinese(simplified)
如果已经有包则可以这样做:
为Jenkins设置项目环境
在 Jenkins 首页中,单击“Manage Jenkins”→“system configuration”→“Tools”→“JDK安装”,点击“新增 JDK"
Jenkins角色与权限管理
1:开启权限全局安全配置
“Dashboard”–>“Manage Jenkins”–>“Security”–>“Authentication”
2:创建角色
为了更方便的为用户授权,jenkins 中使用角色作为一类权限的容器。角色是一组相关权限的集合可以为用户指定角色,而不是直接指定权限。
Global roles:Global roles(全局角色):管理员等高级用户可以创建基于全局的角色
Item roles:针对某个或者某些项目的角色
Agent roles:节点相关的权限
设置角色
“Dashboard”–>“Manage Jenkins”–>“Manage and Assing Roles”。点击“Manage Roles”
本案例中我们添加三个角色:
baseRole:该角色为全局角色。这个角色需要绑定 0verall 下面的 Read 权限,是为了给所有用户绑定最基本的 Jenkins 访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名ismissing the verall/Read permission
role1:该角色为项目角色。使用正则表达式绑定"my-item01.*",意思是只能操作名称为“my-item01”开头的项目。
role2:该角色也为项目角色。绑定"my-item02.*",意思是只能操作“my-item02”开头的项目。
添加baseRole到Global roles
添加role1和role2 角色到 Item roles在“Role to add”中填写角色名称“role1”;“Pattern”中填写“my-item01.*”,表示 role1 的角色只能管理“my-item01.*”开头的项目添加好后点 Save 保存。
3:创建用户
“Dashboard”–>“Manage Jenkins”–>“Users”,在右上角点击“create User”,创建用户。
4:分配角色
“Dashboard”–>“Manage Jenkins”–>“Manage and Assign Roles”,然后点击“Assign Roles”。
进入到分配角色的界面。
在“Global roles”中点击“Add User”按钮,在弹框中输入用户 zhangsan,确定后勾选角色 baseRole;
在“Item roles”中点击“Add User”按钮,在弹框中输入用户 zhangsan,确定后勾选角色 role1。
5:创建项目测试权限
登录zhangsan用户
Jenkinss凭证管理
有许多第三方网站和应用程序可以与 Jenkins 进行交互,例如程序代码仓库,云存储系统和服务等。此类应用程序的系统管理员可以在应用程序中配置凭据以专供Jenkins 使用。通常通过将访问控制应用于这些凭据来完成这项工作,以“锁定”Jenkins 可用的应用程序功能区域。一旦 Jenkins 管理员(即管理 Jenkins 站点的 Jenkins 用户)在 Jenkins 中添加/配置这些凭据,Pipeline 项目就可以
使用凭据与这些第三方应用程序进行交互。
郑州
用管理员登录到 jenkins。
要在 Jenkins 使用凭证管理功能,需要安装 credentials Binding插件,前面已经安装过此插件,这里不再安装。
凭据可以用来存储需要密文保护的数据库密码、Gitlab 密码信息、Docker 私有仓库密码等,以便Jenkins 可以和这些第三方的应用进行交互。
1:凭据的种类
jenkins 提供了多种类型的凭据,适应与不同的业务需求,具体类型如下:
Username with password:用户名和密码
GitHub App: GitHub 应用进行身份验证
GitLab API token:存储 Gitlab 的用户 API token
OpenShift Username and password:存储 OpenShift 的用户名和密码
SSH Username with private key: 使用 SSH 用户和密钥
Secret file:需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file 就会被删除。
Secret text:需要保存的一个加密的文本串,如钉钉机器人或 Github 的 api token
Certificate:通过上传证书文件的方式
其中,常用的凭证类型有:Username with password(用户密码)和 SSH Username with privatekey(SSH 密钥)。接下来以使用 Git 工具到 Gitlab 拉取项目源码为例,演示 Jenkins 的如何管理 Gitlab的凭证。
注意: 为了让 Jenkins 支持从 Gitlab 拉取源码,需要安装 Git 插件以及在 Centos7 系统上安装 Git工具。
2:凭据的作用范围
凭证具有与它们相关联的范围。这是一种表示它们如何才能被暴露的方式。Jenkins 使用的主要范围有如下 2种。
system(系统)
顾名思义,这个范围与根上下文,也就是 Jenkins 系统相关联。此范围中的凭证只被暴露给系统和后台任务,并且一般被用于连接到构建节点或代理节点等。
全局
全局范围是默认选项,通常用来确保Jenkins 中的任务可以使用凭证。
3:添加用户密码类型的凭据
“Manage jenkins”–>“Credentials”,打开如下页面,并点击“system”,进入全局凭据管理界面,如下图所示。
这里是gitlab用户、密码
测试凭据
登录到 gitlab,导入项目(本案例使用root用户登录)。导入gitee 上的项目,访问级别使用私有类型,链接如下:
https://gitee.com/kgc-wjq/league.git
创建测试项目
创建一个 Freestyle 项目:新建 Item->Freestyle Project->确定
在源码管理中点“Git”
点击build now立即构建项目,可以在控制台中查看日志
在 jenkins 主机的工作空间目录下,已经能够看到代码拉取到了 jenkins 主机本地。
4:添加SSH类型的凭据
SSH 类型的凭据可以使 Jenkins 在拉取 gitlab 中的代码时使用秘钥对的方式,不仅实现了免密连接,同时也会对数据进行加密,是一种安全可靠的凭据方式。
在 jenkins 主机上以 root 身份生成密钥对
其中 id_rsa 为私钥文件,id_rsa.pub 为公钥文件
将公钥存放到gitlab
用 root 用户登录 gitlab,点击左上角的头像,在下拉菜单中点“preferences”,然后在左侧列表点击“SSH Keys”。并点击“Add new key”按钮。
在jenkins 中添加 SSH 凭据
“Manage jenkins”–>“Credentials”,打开如下页面,并点击“system”,进入全局凭据管理
到 gitlab 中查看 SSH 的仓库链接,并复制下来
以 root 的身份登录到 gitlab,并复制出 SSH 的仓库 URL。
注意:
在使用秘钥对时,要提前在 jenkins 主机上生成 gitlab 主机的 fingerprint,否则,此处会提示错误。可以用 jenkins 主机的 ssh 命令连接一次 gitlab 主机,第一次连接的话可以看到提示:“Are yousure you want to continue connecting(yes/no)? yes”,输入yes 并回车即可生成gitlab 主机的 fingerprint。另外,如果使用秘钥对的凭据,在选择凭据的地方选择“无”也可以。