1 持续集成说明

● 首先,开发者每天向Git仓库提交代码。

● Jenkins作为持续集成工具,使用Git工具将代码从Git仓库拉取到持续集成服务器,再配合JDK、Maven等软件完成代码的编译、测试、审核、打包。如果这个过程的每一步都有错误,整个过程会重新执行。

● 最后,Jenkins 将生成的jar 包分发到测试服务器或生产服务器,测试人员或用户可以访问应用程序。

2服务器列表

● CentOS7 在虚拟机中统一使用。

姓名

IP地址

安装的软件

代码托管服务器

192.168.18.100

Gitlab-12.4.2

持续集成服务器

192.168.18.101

Jenkins-2.263,JDK11,Maven3.6.3,Git,SonarQube

应用测试服务器

192.168.18.102

JDK11

3 JDK安装

3.1 前提说明

● 服务器的IP 地址为192.168.18.101 和192.168.18.102,需要安装JDK。

3.2 卸载默认JDK

● 查询系统安装的JDK:

yum 列表安装 | grep -i java

卸载默认 JDK:

# xxx 表示安装的yum 列表返回的内容 | grep -i java 命令。只需要卸载其他版本的JDK

百胜删除 xxx

3.3安装JDK11

安装JDK11:

yum -y 安装 java-11-openjdk-devel

4 安装gitlab代码托管服务器

4.1 gitlab介绍

官方网站。

Gitlab 是一个仓库管理系统的开源项目。它使用 Git 作为代码管理工具,并在此基础上构建 Web 服务。

Gitlab 和 GitHub 一样,是基于 Git 开发的第三方产品。它是免费和开源的(基于 MIT 协议)。与GitHub类似,gitlab可以注册用户、任意提交自己的代码、添加SSH密钥等,不同的是gitlab可以部署到自己的服务器上。数据库等所有信息都掌握在自己手中,适合团队内部协同开发。也就是说,gitlab 可以算是个人版的 GitHub。

4.2 前提说明

服务器的 IP 地址是 192.168.18.100。

4.3 安装gitlab

安装相关依赖:

yum -y 安装 policycoreutils openssh-server openssh-clients postfix

● 启动 ssh 服务并将其设置为自动启动:

systemctl 启用 sshd && systemctl 启动 sshd

● 设置后“X”自动启动并启动。 post"x 支持gitlab发送功能:

systemctl enable postfix && systemctl start postfix

● 关闭防火墙(测试时可以这样做,生产环境不推荐):

systemctl 停止防火墙

systemctl 禁用防火墙

● 下载Gitlab包

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

rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm

● 修改Gitlab配置:

vim /etc/gitlab/gitlab.rb

# 修改Gitlab访问地址和端口。默认是80,我们改成82

外部_url 'http://192.168.18.100:82'

nginx['listen_port'] u003d 82

● 重新加载配置并重启Gitlab(耐心等待一段时间):

sudo gitlab-ctl 重新配置

sudo gitlab-ctl 重启

● 启动和自启动:

systemctl 启用 gitlab-runsvdir.service

● 启动成功后访问http://192.168.18.100:82,管理员root密码见下页。修改密码后,再次登录。

4.4 Gitlab创建组、用户和项目

4.4.1 创建组

● 使用管理员root 创建组。一个组中可以有多个项目。您可以将开发添加到组以设置权限。不同的群体是公司不同的开发项目或服务模块。将不同的开发添加到不同的组,可以实现对开发设置权限的管理。

! zoz100078](https://programming.vip/images/doc/7a8f811618ebdd668c6a5113a6744b00.jpg)

4.4.2 创建用户

● 创建用户时,可以选择Regular(普通用户:只能访问自己的组和项目)或Admin(可以访问所有的组和项目)。

● 创建用户后,立即修改密码:

这里的用户名和密码需要记住,用于以后的jenkins登录和拉码。

4.4.3 添加用户到组

! swz 100102 swz 100103 swz 100101

Gitlab 用户在组中有五种不同的权限。

● Guest:可以创建问题和评论,但不能读写版本库。

● Reporter:克隆代码可以使用,不能提交。例如,QA 和 PM 可以授予此权限。

● 开发者:可以克隆代码、开发、提交和推送。例如,可以将此权限授予普通开发。

● 维护者:可以创建项目、添加标签、保护分支、添加项目成员和编辑项目。例如,核心开发可以被授予此权限。

● Owner:可以设置项目访问权限、删除项目、迁移项目、管理团队成员。例如,开发团队负责人可以授予此权限。

! swz 100105 swz 100106 swz 100104

! swz 100108 swz 100109 swz 100107

4.4.4 向用户组添加项目

● 可以使用root管理员在用户组中添加项目,也可以使用刚刚创建的账号登录Gitlab添加项目(需要重设密码,省略)。

5 上传源码到Gitlab仓库

5.1 前提说明

我使用的IDEA是2020.3版本,用于Windows系统的代码开发。

5.2工程代码

以 Spring Boot 项目为例。

pom.xml

<?xml 版本u003d"1.0" 编码u003d"UTF-8"?>

<project xmlnsu003d"http://maven.apache.org/POM/4.0.0" xmlns:xsiu003d"http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocationu003d"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<父>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.3.7.RELEASE</version>

<relativePath/> <!-- 从存储库中查找父级 -->

</父>

<groupId>com.example</groupId>

<artifactId>springboot2</artifactId>

<版本>1.0</版本>

<名称>springboot2</名称>

<description>Spring Boot 演示项目</description>

<属性>

<java.version>11</java.version>

</属性>

<依赖项>

<依赖>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</依赖>

<依赖>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<范围>测试</范围>

<排除>

<排除>

<groupId>org.junit.vintage</groupId>

<artifactId>junit-vintage-engine</artifactId>

</排除>

</排除>

</依赖>

</依赖>

<构建>

<插件>

<插件>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

</插件>

</插件>

</构建>

</项目>

启动类:

包 com.example.springboot2;

导入 org.springframework.boot.SpringApplication;

导入 org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

公共类 SpringbootApplication {

公共静态无效主(字符串[] args){

SpringApplication.run(Springboot2Application.class, args);

}

}

商务课程:

包 com.example.springboot2.web;

导入 org.springframework.web.bind.annotation.RequestMapping;

导入 org.springframework.web.bind.annotation.RestController;

/**

* @author X UD A线

* @版本 1.0

* @since 2021-01-12 09:18

*/

@RestController

公共类 HelloController {

@RequestMapping(值 u003d "/hello")

公共字符串你好(){

返回“你好”;

}

}

5.3 项目结构如下:

5.4 提交代码到Gitlab仓库

首先添加,提交,然后推送。

! swz 100129 swz 100130 swz 100128

! zwz 100132 zwz 100133 zwz 100131

6 Jenkins安装

6.1 前提说明

● 服务器的IP 地址为192.168.18.101。

● 防火墙已关闭。

systemctl 停止防火墙

systemctl 禁用防火墙

6.2 安装JDK

● 略(上面已经安装了)。

6.3 下载詹金斯

wget http://mirrors.jenkins-ci.org/redhat/jenkins-2.263-1.1.noarch.rpm

6.4 安装Jenkins

安装詹金斯:

rpm -ivh jenkins-2.263-1.1.noarch.rpm

6.5 修改Jenkins配置

● 修改Jenkins配置:

vim /etc/sysconfig/jenkins

詹金斯_USERu003d"根"

詹金斯_PORTu003d"8888"

6.6 启动詹金斯

● 启动詹金斯:

systemctl 启动詹金斯

● 启动和自启动:

systemctl 启用詹金斯

6.7 打开浏览器访问

● http://192.168.18.101:8888。

! zwz 100135 zwz 100136 zwz 100134

6.8 获取和输入密码

● 获取并输入密码:

猫 /var/lib/jenkins/secrets/initialAdminPassword

! zwz 100138 zwz 100139 zwz 100137

! swz 100141 swz 100142 swz 100140

6.9跳过插件安装

● 因为Jenkins插件默认需要从官网下载,速度很慢,经常会失败,所以可以暂时跳过插件安装。

! swz 100144 swz 100145 swz 100143

! swz 100147 swz 100148 swz 100146

6.10 添加管理员账号并进入Jenkins后台

! zwz 100150 zwz 100151 zwz 100149

! swz 100153 swz 100154 swz 100152

! swz 100156 swz 100157 swz 100155

! swz 100159 swz 100160 swz 100158

7 Jenkins插件管理

7.1 通用

● Jenkins 本身并没有提供很多功能。我们可以通过使用插件来满足我们的需求。比如从Gitlab拉代码、使用Maven建项目等功能都需要通过插件来完成。

7.2 修改Jenkins插件下载地址

● Jenkins国外官方插件地址下载速度很慢,需要手动修改为国内插件地址。

● Jenkins –> 管理Jenkins –> 管理插件,点击可用。

! zwz 100162 zwz 100163 zwz 100161

这样做的目的是在本地下载Jenkins的官方插件列表。

● 修改地址文件,替换为国产插件地址:

cd /var/lib/jenkins/更新

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

● 点击管理插件中的高级,将更新站点更改为国产插件的下载地址:

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

! swz 100171 swz 100172 swz 100170

● 点击提交,在浏览器中输入 http://192.168.18.101:8888/restart ,重启Jenkins。

7.3 下载中文插件

● Jenkins -> 管理Jenkins -> 管理插件,点击可用,搜索“中文”。

! swz 100174 swz 100175 swz 100173

! swz 100177 swz 100178 swz 100176

● 重启 Jenkins 后,您会看到 Jenkins 已经汉化(但是,某些菜单汉化可能会失败)。

! swz 100180 swz 100181 swz 100179

8 Jenkins用户权限管理

8.1 通用

● Jenkins 的授权管理非常粗糙。我们可以使用“基于角色的授权策略”插件来管理Jenkins的用户权限。

8.2 安装基于角色的授权策略插件

8.3 启用全局安全策略

● 启用全局安全策略:

! swz 100186 swz 100187 swz 100185

● 将授权策略切换为“基于角色的策略”并保存。

8.4 创建角色

● 管理 Jenkins–>管理和分配角色:

点击“管理角色”:

● 全局角色:全局角色。管理员和其他高级用户可以创建基于全局的角色。

● 项目角色:项目角色,一个或一些项目的角色。

● 节点角色:节点角色,节点相关权限的角色。

● 添加以下三个角色:

baseRole:这个角色是一个全局角色。该角色需要绑定Overall 下的Read 权限,才能将最基本的Jenkins 访问权限绑定到所有用户。注意:如果该角色不绑定后续用户,会报错:用户名

缺少整体/读取权限。

  • ○角色1:这个角色是一个项目角色。用正则表达式绑定“spring.*”意味着你只能操作以spring开头的项目。

  • ○role2:这个角色是一个项目角色。用正则表达式绑定“springboot.*”,即只能对以springboot开头的项目进行操作。

8.5 创建用户

● 管理 Jenkins -> 管理用户 -> 新用户:

创建两个用户:jack 和 eric:

8.6 给用户分配权限

● 管理Jenkins–>管理和分配角色–>分配角色:

● 绑定规则如下:

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

  • ○ eric用户分别绑定baseRole和role1角色。

9. Jenkins 凭证管理

9.1 通用

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

9.2 安装Credentials Binding插件

● 要使用Jenkins 中的凭证管理功能,需要安装Credentials Binding 插件。

● 安装插件后,新增“管理凭证”菜单,可在此处管理所有凭证信息:

可以添加的优惠券有五种:

● 用户名和密码:用户名和密码。

● SSH Username with private key:使用 SSH 用户和密钥。

● 机密文件:需要保密的文本文件。使用时,Jenkins 会将文件复制到一个临时目录,然后将文件路径设置为一个变量。构建完成后,复制的Secret文件将被删除。

● 密文:需要保密的密文字符串,如钉钉或GitHub 的api token。

● 证书:通过上传证书文件。

常见的凭证类型是带密码的用户名和带私钥的 SSH 用户名。

9.3 安装Git插件和Git工具

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

● 安装Git插件:

● 在 CentOS7 上安装 Git:

百胜安装-y git

混帐--版本

9.4 用户密码类型

9.4.1 创建凭证

● Jenkins –> 凭证 –> 系统 –> 全局凭证 –> 添加凭证:

这里的用户名和密码不是随便填的,而是在gitlab上创建的用户zhangsan。

9.4.2 是可用的测试凭证

● 创建免费项目:

● 找到“源代码管理”->“Git”,将Gitlab中的项目URL复制到Repository URL中:

● 此时会报错,因为没有选中刚刚添加的凭证,所以无法连接仓库。

● 点击“Build Now”开始构建项目:

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

9.5 SSH密钥类型

9.5.1 SSH登录免图

9.5.2 使用root用户生成公私钥

● 使用root用户生成公钥和私钥(在gitlabel服务器上执行):

ssh-keygen -t rsa

默认生成的公私钥在/root/.ssh目录下,其中id_rsa为私钥文件,id_rsa.pub为公钥文件:

ll /root/.ssh

9.5.3 将生成的公钥放入Gitlab

● 以root 帐号登录-> 点击头像-> 设置-> SSH 密钥。

● 复制刚才生成的id_对于rsa.pub文件的内容,点击“Add Key”:

9.5.4 在Jenkins中添加凭证和配置私钥

● 在Jenkins 中添加类型为“SSH 用户名和私钥”的证书,并复制刚刚生成的私钥文件的内容。

9.5.5是可用的测试券

●新建“test02”项目->源代码管理->GIT。在这里,使用 Gitlab 的 SSH 连接并选择 SSH 凭据:

● 也尝试构建项目。如果能正常拉码,说明凭证配置成功。

10 Maven安装配置

10.1 前提说明

服务器的 IP 地址是 192.168.18.101。

防火墙已关闭。

10.2 Maven下载安装配置

下载 Maven:

wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip

解压 Maven:

解压 -d /usr/local apache-maven-3.6.3-bin.zip

配置环境变量:

vim /etc/配置文件

# 添加到文件末尾

导出 JAVA_HOMEu003d/usr/lib/jvm/java-11-openjdk-11.0.9.11-2.el7_9.x86_64

导出 MAVEN_HOMEu003d/usr/local/apache-maven-3.6.3

导出 PATHu003d$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

源 /etc/profile

查看安装是否成功:

mvn -v

修改Maven本地仓库,配置阿里云镜像:

cd /usr/local/apache-maven-3.6.3

mkdir 存储库

vim 配置/settings.xml

<!-- 修改内容-->

<localRepository>/usr/local/apache-maven-3.6.3/repository</localRepository>

<镜子>

<!-- 修改内容-->

<镜像>

<id>阿里云maven</id>

<mirrorOf>*</mirrorOf>

<name>阿里巴巴云公共仓库</name>

<url>https://maven.aliyun.com/repository/public</url>

</镜像>

</镜子>

10.3 全局工具关联JDK和Maven

● Jenkins -> 管理Jenkins -> 全局工具配置 -> JDK -> 添加JDK:

! zwz 100300 zwz 100301 zwz 100299

JDK11

/usr/lib/jvm/java-11-openjdk-11.0.9.11-2.el7_9.x86_64

● Jenkins -> 管理 Jenkins -> 全局工具配置 -> Maven -> 添加 Maven:

! zwz 100309 zwz 100310 zwz 100308

apache-maven-3.6.3

/usr/local/apache-maven-3.6.3

10.4 添加Jenkins全局变量

● Jenkins –> 管理Jenkins –> 配置系统–> 全局属性,添加三个全局变量:JAVA_HOME,M2_HOME 和PATH+EXTRA。

JAVA_HOME

/usr/lib/jvm/java-11-openjdk-11.0.9.11-2.el7_9.x86_64

M2_HOME

/usr/local/apache-maven-3.6.3

路径+额外

$M2_HOME/bin

10.5 测试Maven是否配置成功

● 使用之前的gitlab密码测试项修改配置:

● build -> 添加构建步骤 -> 执行shell。

输入以下构建命令:

mvn 全新安装

● 重新构建。如果将项目做成jar包,则说明Maven环境配置成功。

Logo

CI/CD社区为您提供最前沿的新闻资讯和知识内容

更多推荐