:-: 服務器列表(虛擬機統一采用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網站