Jenkins 持续集成环境构建一(Gitlab、Jenkins)

116 篇文章 17 订阅
94 篇文章 9 订阅

一、Jenkins 介绍

  Jenkins 是一款流行的开源持续集成(Continuous Integration)工具,广泛用于项目开发,具有自动化构建、测试和部署等功能。
在这里插入图片描述
官网地址: http://jenkins-ci.org/

二、Jenkins 特点

  • 开源的 Java 语言开发持续集成工具,支持持续集成,持续部署。
  • 易于安装部署配置。可通过 yum 安装或下载 war 包以及通过 docker 容器等方式快速实现安装部署,方便 web 界面配置管理。
  • 消息通知及测试报告。集成 RSS/E-mail 通过 RSS 发布构建结果或当构建完成时通过 e-mail 通知,生成 JUnit/TestNG 测试报告。
  • 分布式构建。支持 Jenkins 能够让多台计算机一起构建/测试。
  • 文件识别。Jenkins 能够跟踪哪次构建生成哪些 jar,哪次构建使用哪个版本的 jar 等。
  • 丰富的插件支持。支持扩展插件,你可以开发适合自己团队使用的工具,如 git、svn、maven、docker 等。

三、Jenkins 安装和持续集成环境配置

1. 持续集成流程说明

在这里插入图片描述

  • 首先,开发人员每天进行代码提交,提交到 Git 仓库。
  • 然后,Jenkins 作为持续集成工具,使用 Git 工具到 Git 仓库拉取代码到集成服务器,再配合 JDK,Maven 等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程。
  • 最后,Jenkins 把生成的 jar 或 war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用。

2. 测试服务器列表

名称IP地址安装的软件
代码托管服务器192.168.10.20Gitlab-12.4.2
持续集成服务器192.168.10.30Jenkins-2.190.3,JDK1.8,Maven3.6.2,Git,SonarQube
应用测试服务器192.168.10.40JDK1.8,Tomcat8.5

3. 各组件介绍

(1) Gitlab 代码托管服务器

在这里插入图片描述
官网: https://about.gitlab.com/

  GitLab 是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 web 服务。

  GitLab 和 GitHub 一样属于第三方基于 Git 开发的作品,免费且开源(基于 MIT 协议),与 Github 类似,可以注册用户,任意提交你的代码,添加 SSHKey 等等。不同的是,GitLab 是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把 GitLab 看作个人版的 GitHub。

(2) 持续集成环境 Jenkins

在这里插入图片描述

  Jenkins 是一个开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成 。
  Jenkins 用 Java 语言编写,可在 Tomcat 等流行的 servlet 容器中运行,也可独立运行。通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有 SVN、GIT,构建工具有 Maven、Ant、Gradle。

Jenkins 详细教程

(3) JDK 环境

  JDK 是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的 JAVA 应用程序。JDK 是整个 JAVA 开发的核心,它包含了 JAVA 的运行环境(JVM+Java系统类库)和 JAVA 工具。

https://baike.baidu.com/item/jdk/1011?fr=aladdin

(4) Maven

  maven 是一个项目构建和管理的工具,提供了帮助管理、构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
  maven 的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性。利用 maven 自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。
https://baike.baidu.com/item/Maven/6094909?fr=aladdin

(5) Tomcat

  tomcat 是一款免费、开放源代码的 Web 应用服务器,是 Apache 软件基金会的一个核心开源项目,属于轻量级应用服务器。Apache 软件基金会是专门为支持开源软件项目而办的一个非盈利性组织。

tomcat 由一系列的组件构成,其中核心的组件有三个:

  • Web 容器:完成 Web 服务器的功能 HTTP HTTPS 请求的接受和响应。
  • Servlet 容器:由名称为 catalina.sh 的脚本来处理 Servlet 代码(具体的一个任务,从数据库中拿取数据给与前端)。
  • JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码 index.html index.php index.jsp。

官网为:https://tomcat.apache.org/

4. 持续集成环境配置

4.1 Gitlab 安装配置

安装服务器 192.168.10.20

(1) 命令行配置

安装相关依赖

yum -y install policycoreutils openssh-server openssh-clients postfix

启动 ssh 服务并设置为开机启动

systemctl enable sshd && sudo systemctl start sshd

启动 postfix 并设置开机自启,postfix 支持 gitlab 发信功能

systemctl enable postfix && systemctl start postfix

开放 ssh 以及 http 服务,然后重新加载防火墙列表(如果关闭防火墙就不需要做此项配置)

firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

下载 gitlab 包,并且安装

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm --no-check-certificate
rpm -ivh gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm

修改 gitlab 配置

vim /etc/gitlab/gitlab.rb
# 修改 gitlab 访问地址和端口,默认为 80,我们改为 82
external_url 'http://192.168.10.20:82'
nginx['listen_port'] = 82

重载配置及启动 gitlab

gitlab-ctl reconfigure
gitlab-ctl restart

把端口添加到防火墙

firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
(2) 用户与组的创建和配置

启动成功后,看到以下修改管理员 root 密码的页面,修改密码后,然后登录即可
在这里插入图片描述
在这里插入图片描述

① 创建组
使用管理员 root 创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限;
不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同的开发即可实现对开发设置权限的管理。

在这里插入图片描述
在这里插入图片描述

② 创建用户
创建用户的时候,可以选择 Regular 或 Admin 类型

在这里插入图片描述

创建完用户后立即修改密码
在这里插入图片描述

③ 将用户添加到组中
选择某个用户组,使用 Members 管理组的成员

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

# Gitlab 用户在组里面有 5 种不同权限:
Guest:可以创建 issue、发表评论,不能读写版本库。
Reporter:可以克隆代码,不能提交,QA、PM 可以赋予这个权限。
Developer:可以克隆代码、开发、提交、push,普通开发可以赋予这个权限。
Maintainer:可以创建项目、添加 tag、保护分支、添加项目成员、编辑项目,核心开发可以赋予这个权限。
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组组长可以赋予这个权限。

实验我们可以赋予 zhangsan 用户最高权限 Owner。

④ 在用户组中创建项目

以刚才创建的新用户身份登录到 Gitlab,然后在用户组中创建新的项目,当然也可以先创建项目,再将用户分配到组里。
注意:新创建的用户登录时需要重设密码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2 推送源码到 Gitlab 仓库

准备一个简单的 WEB 项目,在 IDLE 里面推送到 Gitlab 服务器。

(1) 使用 IntelliJ IDEA 创建一个 maven 项目

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
定位不到首页 404
在这里插入图片描述
在这里插入图片描述
选择当前的 web 项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Apply 后点击 OK

这时候还没有能够运行,没有 web 服务器,需要安装 tomcat
在这里插入图片描述

(2) 安装 Tomcat

在这里插入图片描述
中间的安装过程都默认就行,需要注意的是最后一步。
在这里插入图片描述
回到 IDLE
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这时候会报错,需要在资源管理器中直接点击路径授予权限。打开 Tomcat 目录。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行 Tomcat,但是会失败
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
去 tomcat 的 server.xml 看一下(文件路径:C:\Program Files\Apache Software Foundation\Tomcat 8.5\conf),一般安装默认有个端口是 -1,端口不能是 -1,(数值在 1-65535 之间的任意一个整数,一般会选大于 1024 的,小于 1024 的一般被本地计算机程序占),改成 8000 就行。
在这里插入图片描述
在这里插入图片描述

(3) 开启版本控制

在这里插入图片描述

(4) 安装 Git

在这里插入图片描述
中间设置都默认
在这里插入图片描述
回到 IDLE,版本控制工具选择 git。
在这里插入图片描述
在这里插入图片描述

(5) 提交代码到 git 本地仓库

先 Add 到缓存区
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6) 提交代码到 gitlab 仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
输入项目管理用户和密码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

刷新 gitlab 项目
在这里插入图片描述

4.3 Jenkins 安装与配置

(1) 安装

安装 JDK
Jenkins 需要依赖 JDK,所以先安装 JDK1.8

yum install java-1.8.0-openjdk* -y

安装目录为:/usr/lib/jvm

获取 jenkins 安装包

上传 rpm 包到服务器并安装
按照规划,我们上传到 192.168.10.30 服务器

rpm -ivh jenkins-2.277.4-1.1.noarch.rpm

修改 Jenkins 配置

vim /etc/sysconfig/jenkins
# 修改内容如下
# 注意:如果用户使用默认,则需要在系统上创建 jenkins 用户
JENKINS_USER="root" 
JENKINS_PORT="8888"

启动 Jenkins

systemctl start jenkins
(2) 登录配置

浏览器访问
http://192.168.10.30:8888

在这里插入图片描述
可能需要一段时间
在这里插入图片描述

跳过插件安装
默认插件地址是国外的,下载非常慢
在这里插入图片描述

在这里插入图片描述

添加一个管理员账户,并进入 Jenkins 后台
在这里插入图片描述

**Jenkins 密码遗忘处理**

// 修改配置文件安全功能禁用
vim /var/lib/jenkins/config.xml
<useSecurity>false</useSecurity>   

// 重启jenkins服务
systemctl restart jenkins

# 可以直接登录修改账号密码

//修改 jenkins 中已有的用户名和 ID
vim /var/lib/jenkins/users/users.xml

登录后有需要的可以升级一下 jenkins 版本,这样能支持更多的插件,升级后需要重启 http://IP:PORT/restart
在这里插入图片描述

(3) Jenkins 插件管理

  Jenkins 本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从 Gitlab 拉取代码,使用 Maven 构建项目等功能需要依靠插件完成。接下来演示如何下载插件。

① 修改 Jenkins 插件下载地址

Jenkins 国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址。
Jenkins -> Manage Jenkins -> Manage Plugins,点击 Available

在这里插入图片描述
在这里插入图片描述
这样做是为了把 Jenkins 官方的插件列表下载到本地,接着修改地址文件,替换为国内插件地址。

cd /var/lib/jenkins/updates
sed -i 's/http:\/\/updates.jenkins- ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

在这里插入图片描述
最后,Manage Plugins 点击 Advanced,把 Update Site 改为国内插件下载地址。
在这里插入图片描述

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

在这里插入图片描述
Sumbit 后,在浏览器输入:http://192.168.10.30:8888/restart,重启 Jenkins。
在这里插入图片描述
在这里插入图片描述

② 下载中文汉化插件

Jenkins -> Manage Jenkins -> Manage Plugins,点击 Available,搜索 Chinese。

在这里插入图片描述
在这里插入图片描述
重启 Jenkins 后,就看到 Jenkins 汉化了!(PS:但可能部分菜单汉化会失败)
在这里插入图片描述

(4) Jenkins 用户权限管理

我们可以利用 Role-based Authorization Strategy 插件来管理 Jenkins 用户权限。

① 安装 Role-based Authorization Strategy 插件

在这里插入图片描述

开启权限全局安全配置
在这里插入图片描述

授权策略切换为 Role-Based Strategy,保存。
在这里插入图片描述

② 创建角色

在系统管理页面进入 Manage and Assign Roles
在这里插入图片描述
点击 Manage Roles
在这里插入图片描述
在这里插入图片描述

Global roles(全局角色):管理员等高级用户可以创建基于全局的角色。
Item roles(项目角色): 针对某个或者某些项目的角色。
Node roles(节点角色):节点相关的权限。

我们添加以下三个角色:

  • baseRole:该角色为全局角色。这个角色需要绑定 Administer(老版本为 Overall) 下面的 Read 权限,是为了给所有用户绑定最基本的 Jenkins 访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is missing the Overall/Read permission。
  • role1:该角色为项目角色。使用正则表达式绑定 apple.*,意思是只能操作 apple 开头的项目。
  • role2:该角色也为项目角色。绑定 orange.*,意思是只能操作 orange 开头的项目。

在这里插入图片描述
保存。

③ 创建用户

在系统管理页面进入 Manage Users
在这里插入图片描述
在这里插入图片描述
分别创建两个用户:jack 和 kali
在这里插入图片描述

④ 给用户分配角色

系统管理页面进入 Manage and Assign Roles,点击 Assign Roles

绑定规则如下:

  • kali 用户分别绑定 baseRole 和 role1 角色。
  • jack 用户分别绑定 baseRole 和 role2 角色。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存。那个报错是版本的原因,不要管。

⑤ 创建项目测试权限

以 syhj 管理员账户创建两个项目,分别为 apple01 和 orange01。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试结果为:

  • kali 用户登录,只能看到 apple01 项目。
  • jack 用户登录,只能看到 orange01 项目。
(5) Jenkins 凭证管理

凭据可以用来存储需要密文保护的 数据库密码、Gitlab 密码信息、Docker 私有仓库密码 等,以便 Jenkins 可以和这些第三方的应用进行交互。

① 安装 Credentials Binding 插件

要在 Jenkins 使用凭证管理功能,需要安装 Credentials Binding 插件。
在这里插入图片描述
安装插件后,多了 凭证 菜单,在这里管理所有凭证。

在这里插入图片描述
可以添加的凭证有 5 种:

  • Username with password:用户名和密码。
  • SSH Username with private key:使用 SSH 用户和密钥。
  • Secret file:需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的 Secret file 就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或 Github 的 api token。
  • Certificate:通过上传证书文件的方式。

在这里插入图片描述
在这里插入图片描述
常用的凭证类型有:Username with password(用户密码)SSH Username with private key(SSH 密钥)
接下来以使用 Git 工具到 Gitlab 拉取项目源码为例,演示 Jenkins 如何管理 Gitlab 的凭证。

② 装 Git 插件和 Git 工具

为了让 Jenkins 支持从 Gitlab 拉取源码,需要安装 Git 插件以及在 CentOS7 上安装 Git 工具。

在这里插入图片描述
CentOS7 上安装 Git 工具:

yum install git -y
git --version
③ 创建凭证

Jenkins -> 凭证 -> 系统 -> 全局凭证 -> 添加凭证

选择 Username with password,输入 Gitlab 的用户名 zhangsan 和密码,点击 确定
在这里插入图片描述
在这里插入图片描述

④ 测试凭证是否可用(使用用户密码类型)

创建一个 FreeStyle 项目:新建 Item -> FreeStyle Project -> 确定
在这里插入图片描述
找到 "源码管理" -> "Git",在 Repository URL 复制 Gitlab 中的项目 URL
在这里插入图片描述
在这里插入图片描述
保存配置后,点击构建 Build Now 开始构建项目
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看 /var/lib/jenkins/workspace/ 目录,发现已经从 Gitlab 成功拉取了代码到 Jenkins 中。

[root@c7-2 ~]#cd /var/lib/jenkins/workspace/
[root@c7-2 /var/lib/jenkins/workspace]#ls
test01  test01@tmp
[root@c7-2 /var/lib/jenkins/workspace]#cd test01
[root@c7-2 /var/lib/jenkins/workspace/test01]#ls
out  pom.xml  src  web  web_test.iml
[root@c7-2 /var/lib/jenkins/workspace/test01]#cd src/main/webapp/
[root@c7-2 /var/lib/jenkins/workspace/test01/src/main/webapp]#ls
index.jsp
[root@c7-2 /var/lib/jenkins/workspace/test01/src/main/webapp]#cat index.jsp 
<html>
<body>
<h2>hello world!</h2>
</body>
</html>
⑤ SSH 密钥类型

SSH 免密登录示意图
在这里插入图片描述
使用 root 用户生成公钥和私钥

# 在 jenkins 服务器执行生成私钥公钥,jenkins 服务器保留私钥
[root@c7-2 ~]#ssh-keygen -t rsa
......

# 在 /root/.ssh/ 目录保存了公钥和私钥
[root@c7-2 ~]#ll /root/.ssh/
total 8
-rw------- 1 root root 1675 Feb 10 15:57 id_rsa			# 私钥文件
-rw-r--r-- 1 root root  391 Feb 10 15:57 id_rsa.pub		# 公钥文件
[root@c7-2 ~]#cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcItOA6SBkeQ/QL3Aotbafw4+gCIIEBP3zge9uJDfjIsMh5MZuDgSAhtIc8y300Mmp5I1wSJ9mEfqpAbTby9ulZezUPSrKlEmmRSfU105AiFksX9WnSLnrzodxR71lkaSF9Ly7/kK3C0o1jHlb2qkI4M36ISq/J2HvIQIvQs6QcL/CM3f2oGypvTEf4VjJlet2ABMkJvkKS28nl7XYGFzPmV+021CO6yeQ3ue3/siIjhL2K2fokgcYztm3NQpxBwVK9uvVPuHfa9sEr/zGVObtNX+xxBWlOlyoHQHOaAQ70C1pjlgIsTFeUCz4gw8Fkg3h7X+XnBYl3PNI5C74g3aD root@c7-2

把生成的公钥放在 Gitlab 中

  • 以 root 账户登录 gitlab -> 点击头像 -> Settings -> SSH Keys
  • 复制刚才 id_rsa.pub 文件的内容到这里,点击 Add Key

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在 Jenkins 中添加凭证,配置私钥
在 Jenkins 添加一个新的凭证,类型为 SSH Username with private key,把刚才生成私有文件内容复制过来。

在这里插入图片描述
在这里插入图片描述

测试凭证是否可用

新建 test02 项目 -> 源码管理 -> Git,这次要使用 Gitlab 的 SSH 连接,并且选择 SSH 凭证。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@c7-2 ~]#cd /var/lib/jenkins/workspace/test02
[root@c7-2 /var/lib/jenkins/workspace/test02]#ls
out  pom.xml  src  web  web_test.iml
[root@c7-2 /var/lib/jenkins/workspace/test02]#cat src/main/webapp/index.jsp 
<html>
<body>
<h2>hello world!</h2>
</body>
</html>
  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值