:-: 服务器列表(虚拟机统一采用CentOS7)
|名称 |主机名 |安装的软件|
|----|----|----|
|代码托管服务器| gitlab-master |gitlab-ce-14.6.0-ce.0.el7.x86_64.rpm|
|<mark>持续集成服务器</mark>| jenkins-master |Jenkins-2.190.3、JDK1.8、Maven3.6.2、Git、SonarQube|
|应用测试服务器| tomcat-master |JDK1.8、Tomcat8.5|
<br/>
[TOC]
# 1. 安装JDK8
Jenkins需要依赖JDK,所以先安装JDK1.8。
```shell
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /opt/install/
# /opt/install/jdk1.8.0_171/bin/java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
```
<br/>
# 2. 安装Jenkins
**1. 下载并安装jenkins**
Jenkins下载地址1(官网):https://jenkins.io/zh/download/
Jenkins下载地址2:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
```shell
yum -y install epel-release
yum -y install daemonize
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.319.1-1.1.noarch.rpm
rpm -ivh jenkins-2.319.1-1.1.noarch.rpm
```
**2. 修改Jenkins配置**
```shell
vim /etc/sysconfig/jenkins
# jdk目录
JENKINS_JAVA_CMD=/opt/install/jdk1.8.0_171/bin/java
#jenkins用户
JENKINS_USER="root"
#jenkins端口
JENKINS_PORT="8888"
```
**3. 启动Jenkins**
```shell
# systemctl start jenkins
# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: active (running) since Thu 2022-01-06 16:33:56 CST; 31s ago
```
**4. 开放8888端口**
```shell
firewall-cmd --zone=public --add-port=8888/tcp --permanent
firewall-cmd --reload
```
**5. 访问Jenkins:http://192.168.1.25:8888/**
**6. 获取并输入admin账户密码**
```shell
# cat /var/lib/jenkins/secrets/initialAdminPassword
d59cfa55bd8f4e39ac91ef1aa26effa3
```
**7. 跳过插件安装**
因为Jenkins插件需要连接默认官网下载,速度非常慢,而且经常会失败,所以我们暂时先跳过插件安装。
:-: 

**8. 添加第一个管理员账号**

**9. Jenkins准备就绪了**

<br/>
# 3. Jenkins插件管理
Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用。例如从Gitlab拉取代码,使用Maven构建项目等功能需要依靠插件完成。接下来演示如何下载插件。
****
jenkins插件默认下载地址:https://updates.jenkins-ci.org/download/plugins
jenkins插件默认存储目录:`/var/lib/jenkins/plugins`
<br/>
**1. 修改插件下载地址为国内**
Jenkins国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址。
(1)Jenkins -> Manage Jenkins -> Manage Plugins -> Available。
(2)修改地址文件,替换为国内插件地址。
```shell
cd /var/lib/jenkins/updates
sed -i 's/http:\/\/updates.jenkinsci.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
```
(3)点击Advanced,把Update Site改为国内插件下载地址。

```
默认地址:https://updates.jenkins.io/update-center.json
国内插件下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
```
(4)Sumbit后,浏览器访问 http://192.168.1.25:8888/restart 重启Jenkins。
**2. 下载中文汉化插件**
(1)Jenkins -> Manage Jenkins -> Manage Plugins -> Available,搜索`Chinese`。


(2)重启后就看到Jenkins汉化了!(PS:但可能部分菜单汉化会失败)。

<br/>
# 4. Jenkins用户权限管理
我们可以利用 Role-based Authorization Strategy 插件来管理Jenkins用户权限。
<br/>
**1. 安装 Role-based Authorization Strategy 插件**
**2. 开启权限全局安全配置**
系统管理(Manage Jenkins) -> 全局安全配置(Configure Global Security)-> 授权策略 -> 选【Role-Based Strategy】-> 应用。
**3. 创建角色**
(1)系统管理(Manage Jenkins) -> Manage and Assign Roles -> Manage Roles。
(2)添加角色。

* Global roles:管理员等高级用户可以创建基于全局的角色。
* Item roles:针对某个或者某些项目的角色。
在这里添加如下三个角色:
```
baseRole:该角色为全局角色。这个角色需要绑定Overall(全部)下面的Read权限,是为了给所有用户绑
定最基本的Jenkins访问权限。注意:如果不给后续用户绑定这个角色,会报错误:用户名 is
missing the Overall/Read permission。
role1:该角色为项目角色。使用正则表达式绑定 itcast.*,意思是只能操作itcast开头的项目。
role2:该角色也为项目角色。绑定 itheima.*,意思是只能操作itheima开头的项目。
```
**4. 创建用户**
(1)系统管理(Manage Jenkins) -> 管理用户(Manage Users) -> 新建用户。
(2)分别创建两个用户:lisi、wangwu。


**5. 给用户分配角色**
(1)系统管理(Manage Jenkins) -> Manage and Assign Roles -> Assign Roles。
(2)绑定规则如下。
```
lisi 用户分别绑定baseRole和role1角色。
wangwu 用户分别绑定baseRole和role2角色。
```

**6. 创建项目测试权限**
(1)以`zhangsan`管理员账户创建两个项目,分别为`itcast01`和`itheima01`。`zhangsan`管理员可以看到所有的项目。

(2)`lisi`账号只能看到项目`itcast01`。

(3)`wangwu`账号只能看到项目`itheima01`。

<br/>
# 7. Jenkins凭证管理
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
<br/>
**1. 安装Credentials Binding插件**
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件。
<br/>
## 7.1 安装Git插件和Git工具
接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins如何管理Gitlab的凭证。
<br/>
**1. Jenkins上安装 Git 插件**

**2. 在Jenkins机器上安装 Git 工具**
```shell
# yum install git -y
# git --version
git version 1.8.3.1
```
**3. 创建凭证**
系统管理 -> Manage Credentials。



**4. 测试凭证是否可用**
(1)新建任务 -> 输入一个任务名称 -> 源码管理。

(2)立即构建。

(3)构建完成后查看 控制台输出。


(4)到 Jenkins 机器上查看,发现已经从Gitlab成功拉取了代码到Jenkins中。
```shell
# cd /var/lib/jenkins/workspace/test01
# ll
total 20
-rw-r--r--. 1 root root 2636 Dec 14 22:05 email.html
-rw-r--r--. 1 root root 1374 Dec 14 22:05 Jenkinsfile
-rw-r--r--. 1 root root 625 Dec 14 22:05 pom.xml
-rw-r--r--. 1 root root 579 Dec 14 22:05 sonar-project.properties
drwxr-xr-x. 3 root root 17 Dec 14 22:05 src
-rw-r--r--. 1 root root 1499 Dec 14 22:05 web_demo.iml
```
<br/>
## 7.2 设置SSH免密登录
:-: 
SSH免密登录示意图
**1. 在 Jenkins 机器以`root`用户生成公钥和私钥**
```shell
# ssh-keygen -t rsa
# cd /root/.ssh/
# ll
-rw-------. 1 root root 1675 Dec 15 10:52 id_rsa 私钥
-rw-r--r--. 1 root root 394 Dec 15 10:52 id_rsa.pub 公钥
```
**2. 把公钥放在Gitlab中**
以`root`账户登录 Gitlab -> 点击头像 -> Settings -> SSH Keys。把文件`id_rsa.pub`的内容粘贴进去。

**3. 在Jenkins中添加私钥为凭证**
系统管理 -> Manage Credentials。


**4. 测试凭证是否可用**
(1)新建任务 -> 输入一个任务名称 -> 源码管理。

(2)立即构建。

(3)构建完成后查看 控制台输出。


(4)到 Jenkins 机器上查看,发现已经从Gitlab成功拉取了代码到Jenkins中。
```shell
# cd /var/lib/jenkins/workspace/test02
# ll
total 20
-rw-r--r--. 1 root root 2636 Dec 15 10:57 email.html
-rw-r--r--. 1 root root 1374 Dec 15 10:57 Jenkinsfile
-rw-r--r--. 1 root root 625 Dec 15 10:57 pom.xml
-rw-r--r--. 1 root root 579 Dec 15 10:57 sonar-project.properties
drwxr-xr-x. 3 root root 17 Dec 15 10:57 src
-rw-r--r--. 1 root root 1499 Dec 15 10:57 web_demo.iml
```
<br/>
# 8. Maven安装和配置
在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。
<br/>
**1. 安装Maven与配置环境变量**
maven下载地址:https://maven.apache.org/download.cgi
```shell
wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz
tar -xzf apache-maven-3.8.4-bin.tar.gz -C /opt/install
cd /opt/install/apache-maven-3.8.4/
# pwd
/opt/install/apache-maven-3.8.4
--配置环境变量
# vim /etc/profile
export JAVA_HOME=/opt/install/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/bin
export MAVEN_HOME=/opt/install/apache-maven-3.8.4
export PATH=$PATH:$MAVEN_HOME/bin
# source /etc/profile
# mvn -v
Apache Maven 3.8.4 (9b656c72d54e5bacbed989b64718c159fe39b537)
Maven home: /opt/install/apache-maven-3.8.4
Java version: 1.8.0_171, vendor: Oracle Corporation, runtime: /opt/install/jdk1.8.0_171/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.49.1.el7.x86_64", arch: "amd64", family: "unix"
--修改本地仓库目录为/opt/install/apache-maven-3.8.4/repo
# vim /opt/install/apache-maven-3.8.4/conf/settings.xml
<localRepository>/opt/install/apache-maven-3.8.4/repo</localRepository>
```
**2. 全局工具配置关联JDK和Maven**
(1)系统管理 -> 全局工具配置 -> JDK -> 新增JDK。

(2)系统管理 -> 全局工具配置 -> Maven -> 新增Maven。

**3. 添加Jenkins全局变量**
系统管理 -> 系统配置 -> 全局属性 -> 环境变量。



**4. 测试Maven是否配置成功**
在Jenkins上随便找之前好的一个任务,比如 test02。


再次构建,控制台看到把项目打成 war,代码Maven配置成功。

<br/>
- 相关概念
- 软件开发生命周期
- 软件开发瀑布模型
- 软件的敏捷开发
- 持续集成
- Jenkins介绍
- Jenkins是什么
- Jenkins的特征
- Jenkins环境搭建
- 搭建架构说明
- Gitlab安装与配置
- Jenkins安装与配置
- Tomcat安装和配置
- Jenkins构建项目
- 自由风格软件项目构建
- Maven项目构建
- Pipeline流水线项目构建
- Pipeline是什么
- Pipeline语法
- 流水线项目构建演示
- Pipeline Script from SCM
- 构建触发器
- 触发远程构建
- 其他工程构建后触发
- 定时构建
- 轮询SCM
- Git hook自动触发构建
- 参数化构建
- 配置邮箱发送构建结果
- SonarQube代码审查平台
- SonarQube是什么
- SonarQube平台搭建
- 安装jdk11
- 安装数据库PostgreSQL12
- 安装SonarQube
- SonarQube实现代码审查
- Jenkins+Docker+SpringCloud(1)
- 流程说明
- 环境搭建
- 服务器列表
- Docker安装与配置
- Harbor安装与配置
- Nginx安装与配置
- 微服务持续集成演示
- Jenkins上配置
- 微服务项目配置
- 部署前端静态web网站