# CI & CD 持续集成部署

#### 博客作者：联系请[点击](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)，搬运不易，希望请作者喝咖啡，可以点击联系[博客作者](https://hezhiqiang.gitbook.io/about-the-author/lian-xi-zuo-zhe)

### CI / CD 的优点是什么？

* **集成：** GitLab CI / CD是GitLab的一部分，支持从计划到部署（甚至更多）的单个对话
* **开源：** CI / CD是开源GitLab社区版和专有GitLab企业版的一部分
* **易于学习：** 请参阅GitLab的 [快速入门](https://docs.gitlab.com/ee/ci/quick_start/) 指南
* **无缝：** 是单个GitLab应用程序的一部分，具有出色的用户体验
* **可扩展：** 测试可以在单独的计算机上分布式运行，您可以根据需要添加任意数量的计算机
* **更快的结果：** 每个构建可以拆分为多个作业，这些作业可以在多台计算机上并行运行
* **针对交付进行了优化：** 多个阶段，手动部署门， [环境](https://docs.gitlab.com/ee/ci/environments.html) 和 [变量](https://docs.gitlab.com/ee/ci/variables/)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lx53lMutrsyPUks5pJf%2F-LxvJ9sjqh2RiQTYoPj8%2F-LxvJQ4elpVJz5d0OEGP%2Fimage.png?alt=media\&token=d40ecef2-08ad-4655-8987-9a0819e76420)

### 特征

* **多平台：** 您可以在Unix，Windows，macOS和任何其他支持Go的平台上执行构建。
* **多语言：** 构建脚本是命令行驱动的，并且可以与Java，PHP，Ruby，C和任何其他语言一起使用。
* **稳定：** 您的构建在与GitLab不同的机器上运行。
* **并行构建：** GitLab CI / CD在多台机器上拆分构建，以实现快速执行。
* **实时日志记录：** 合并请求中的链接将您带到动态更新的当前构建日志。
* **灵活的管道：** 您可以在每个阶段定义多个并行作业，并且可以 [触发其他构建](https://docs.gitlab.com/ee/ci/triggers/)。
* **版本管道：** 一个 [.gitlab-ci.yml文件](https://docs.gitlab.com/ee/ci/yaml/) 包含您的测试，整个过程的步骤，使每个人都能贡献更改，并确保每个分支获得所需的管道。
* **自动缩放：** 您可以 [自动旋转虚拟机](https://about.gitlab.com/blog/2016/03/29/gitlab-runner-1-1-released/) ，以确保立即处理您的构建并将成本降至最低。
* **构建工件：** 您可以将二进制文件和其他[构建工件](https://docs.gitlab.com/ee/ci/build_artifacts/)上载到 GitLab并浏览和下载它们。
* **本地测试** 有 [多个执行程序](https://docs.gitlab.com/runner/executors/) ，您可以 [在本地复制测试](https://gitlab.com/gitlab-org/gitlab-runner/issues/312)。
* **Docker支持：** 您可以使用自定义Docker映像， 作为测试的一部分启动 [服务](https://docs.gitlab.com/ee/ci/services/)， [构建新的Docker映像](https://docs.gitlab.com/ee/ci/docker/using_docker_build.html)，甚至可以在Kubernetes上运行。
* **容器注册表：** [内置的容器注册表，](https://docs.gitlab.com/ee/user/project/container_registry.html) 用于存储，共享和使用容器映像。
* **受保护的变量：** 在部署期间使用[受](https://docs.gitlab.com/ee/ci/variables/README.html#protected-variables)每个环境保护的[变量](https://docs.gitlab.com/ee/ci/variables/README.html#protected-variables)安全地存储和使用机密信息
* **环境：** 定义多个环境，包括临时 [Review Apps](https://about.gitlab.com/features/review-apps/) ，请参阅每个环境的部署历史记录。

## 一、Jenkins简介

{% embed url="<https://jenkins.io/zh/>" %}

[Jenkins](https://zh.wikipedia.org/wiki/Jenkins_\(%E8%BD%AF%E4%BB%B6\))是一款开源 CI\&CD 软件，用于自动化各种任务，包括构建、测试和部署软件。

Jenkins 支持各种运行方式，可通过系统包、Docker 或者通过一个独立的 Java 程序。<br>

## 二、GitLab简介

{% embed url="<https://about.gitlab.com>" %}

[GitLab](https://zh.wikipedia.org/wiki/GitLab)是一个完整的DevOps平台，作为单个应用程序提供，从根本上改变了开发，安全和运营团队的协作方式。GitLab帮助团队将软件交付时间从数周缩短至数分钟，降低开发成本，并降低应用程序漏洞的风险，同时提高开发人员的生产率。

### **主机配置**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtYv_iuc50fDQA6B%2F0.png?generation=1577788875723662\&alt=media)

## **三、GitLab环境部署**

### **安装依赖包。**

```
sudo yum install -y curl policycoreutils-python openssh-server
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtYwXWL0CamKKDAv%2F1.png?generation=1577788875767161\&alt=media)

### **设置SSH开机自启动并启动SSH服务。**

```
sudo systemctl enable --now sshd
```

### **安装Postfix来发送通知邮件。**

```
sudo yum install postfix
```

### **设置Postfix开机自启动。**

```
sudo systemctl enable postfix
```

### **启动Postfix服务**。

输入命令vim /etc/postfix/main.cf打开main.cf文件并找到下图内容：

```
vim /etc/postfix/main.cf
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtYxljQOzEevFxv4%2F2.png?generation=1577788875720124\&alt=media)

将这行代码改为inet\_interfaces = all，然后按Esc键，然后输入:wq并回车以保存并关闭main.cf文件。

输入命令sudo systemctl start postfix启动Postfix服务。

```
sudo systemctl start postfix
```

## **四、添加GitLab软件包仓库。**

```
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
```

### **安装GitLab。**

```
sudo EXTERNAL_URL="GitLab服务器的公网IP地址" yum install -y gitlab-ce
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtYydE21ozygXlkU%2F3.png?generation=1577788875630661\&alt=media)

这个是我gitlab公网ip

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtYz8mH_0lb9nbuk%2F4.png?generation=1577788875622597\&alt=media)

安装完成会出现如下图片：

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ-voal8s56S8d_%2F5.png?generation=1577788875708445\&alt=media)

说明已经自动启动getlab服务，如没有出现以上情况则说明硬件配置太低或输入systemctl restart gitlab-runsvdir.service 重启gitlab服务

```
systemctl restart gitlab-runsvdir.service 
```

其他操作命令：

```
sudo gitlab-ctl status      #查看服务的状态
sudo gitlab-ctl start       #启动
sudo gitlab-ctl stop        #关闭
sudo gitlab-ctl restart     #重启
```

```
[root@gitlab ~]# vim /etc/gitlab/gitlab.rb     #gitlab配置文件
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ0ZkvonutWBduS%2F6.png?generation=1577788875751162\&alt=media)

如果修改了配置文件，需要执行 gitlab-ctl reconfigure 进行更新配置（只要修改了该文件，必须执行该命令才能生效）

```
gitlab-ctl reconfigure
```

执行 gitlab-ctl restart 重启服务，我这里不做修改

```
gitlab-ctl restart
```

服务启动成功后即可通过公网IP去访问，如果修改了端口，IP后面就要加上端口去访问

**使用浏览器访问GitLab服务器的公网IP地址，显示如下页面，说明环境搭建成功**。

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ1xW_v2tU-2HAO%2F7.png?generation=1577788875883621\&alt=media)

管理员默认为root用户，初始密码不能低于8位

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ2vgWM9iRjcRrU%2F8.png?generation=1577788875750089\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ3NP7o97pb66uU%2F9.png?generation=1577788875710623\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ4bb7AeNZyKnGQ%2F10.png?generation=1577788875774310\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ5QUvbcuaU56fE%2F11.png?generation=1577788875784720\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ6a-ilkTIX815s%2F12.png?generation=1577788875736978\&alt=media)

把要克隆或要上传代码这台服务器的公钥cat /root/.ssh/id\_rsa.pub打开公钥文件复制到gitlab服务器指定位置上

```
cat /root/.ssh/id_rsa.pub
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ7SuuopnJZXJH6%2F13.png?generation=1577788875707974\&alt=media)

### 添加公钥

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ8F1A1u1SePFTd%2F14.png?generation=1577788875746245\&alt=media)

\#克隆代码仓库，然后测试是否能够上传代码到gitlab

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ9aA2ElrLSawBo%2F15.png?generation=1577788875808897\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZAqEC4CQ9-K6J3%2F16.png?generation=1577788875730778\&alt=media)

```
yum -y install git                         #安装git
git clone git@139.9.91.82:root/test.git    #克隆远程仓库
cd test/
echo 11111 > 1.txt
git add .
git commit -m "add 1.txt"
git push
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZBWYxQ8NcLcKKI%2F17.png?generation=1577788875723683\&alt=media)

## **五、Jenkins环境部署**

### **系统要求**

#### **最低推荐配置:**

256MB可用内存

1GB可用磁盘空间(作为一个[Docker](https://jenkins.io/zh/doc/book/installing/%22%20/l%20%22docker)容器运行jenkins的话推荐10GB)为小团队推荐的**硬件配置:**

1GB+可用内存

50 GB+ 可用磁盘空间

### **软件配置:**

Java 8—​无论是Java运行时环境（JRE）还是Java开发工具包（JDK）都可以。

### **安装JDK**

```
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
```

### **安装tomcat**

```
[root@jenkins ~]# tar -xf apache-tomcat-9.0.6.tar.gz
[root@jenkins ~]# mv apache-tomcat-9.0.6 /usr/local/tomcat
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZCn1l9dMeylTt0%2F18.png?generation=1577788875728729\&alt=media)

访问jenkins官网 [下载Jenkins](https://jenkins.io/zh/)

{% embed url="<https://jenkins.io/zh/>" %}

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZDve9gpVxhl-dr%2F19.png?generation=1577788875792495\&alt=media)

## **六、下载Jenkins**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZEhMGyXt1zRQfb%2F20.png?generation=1577788875755411\&alt=media)

```
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZF7313mPaLB5EZ%2F21.png?generation=1577788875763142\&alt=media)

两种方式使用其中一种就可以下载了

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZGlOle4YmTspMG%2F22.png?generation=1577788875733540\&alt=media)

```
[root@jenkins ~]# ls
apache-tomcat-9.0.6.tar.gz baidu.html index.html jenkins.war
[root@jenkins ~]# cd /usr/local/tomcat/         #切换到tomcat目录
[root@jenkins tomcat]# pwd
/usr/local/tomcat
[root@jenkins tomcat]# rm -rf webapps/*         #删除tomcat根目录下其他默认文件
[root@jenkins tomcat]# ls webapps/
[root@jenkins tomcat]# mv /root/jenkins.war /usr/local/tomcat/webapps/ #移动下载好的jenkins.war包到tomcat网页根目录下
[root@jenkins tomcat]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[root@jenkins tomcat]# ./bin/startup.sh         #启动tomcat服务
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@jenkins tomcat]# ls webapps/              #tomcat服务启动会自动解jenkins.war包
jenkins jenkins.war
```

**然后访问**<http://139.159.189.191:8080/jenkins> **见到如下图片就说明安装成功：**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZHxaxx63D1hflr%2F23.png?generation=1577788875819331\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZImoWxsvr1DYUU%2F24.png?generation=1577788875748655\&alt=media)

### **插件安装：**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZJp6ZMjBbYSJkm%2F25.png?generation=1577788875788620\&alt=media)

{% hint style="danger" %}

#### **注意：**

#### &#x20; **打×的插件是由于网络传输导致的安装失败，后面再重新安装即可。**

#### &#x20; 插件安装可以自定义，可以用社区推荐安装，工作需要的插件一定要安装上

{% endhint %}

### **安装完成出现如下页面：**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZK0DYAG7dxs3CN%2F26.png?generation=1577788875730688\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZLU4VnZTY45P8t%2F27.png?generation=1577788875755863\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZM7VDxdO53eN5n%2F28.png?generation=1577788875771345\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZNdZ-7ZFJ3o7ga%2F29.png?generation=1577788875764378\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZOXsp4ACi7EysI%2F30.png?generation=1577788875968754\&alt=media)

如果插件没安装完会出现如下页面，点纠正安装相关插件就好了：

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZPl9IdcIp9nkPP%2F31.png?generation=1577788875762993\&alt=media)

**必须需要添加的6个插件：**&#x47;itlab Hook、Build Authorization Token Root、Publish Over SSH、Gitlab Authentication、Gitlab、Git Parameter

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZQTTtPBPMrheHX%2F32.png?generation=1577788875729090\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZR5jN_Kns6Gpf9%2F33.png?generation=1577788875726249\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZSwhw6JRNFWXmQ%2F34.png?generation=1577788875796828\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZT30TRvoqlu4-v%2F35.png?generation=1577788875740774\&alt=media)

## **七、配置Jenkins**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZUTs0ks1jJgeg3%2F36.png?generation=1577788875875819\&alt=media)

### **进来系统设置如下图，然后鼠标往下滑：**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZVOUb10Z7OPSSE%2F37.png?generation=1577788875828073\&alt=media)

### **部署密钥：**

**#添加主机：系统管理 - 系统设置 找到Publish over SSH**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZWjKs2FCLdCWRo%2F38.png?generation=1577788875777335\&alt=media)

开始添加要部署代码的主机，注意一定是要能够ssh登陆的用户。

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZX9zR-KU2xl0Lv%2F39.png?generation=1577788875764389\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZYbUZdgzArZguM%2F40.png?generation=1577788875874423\&alt=media)

**这里要注意的是要先把jenkins服务器的公钥传送给要部署代码的那台机然后再点测试**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZZMhtbIudgcFpV%2F41.png?generation=1577788875748322\&alt=media)

**#添加完主机之后，新建一个项目，开始配置构建操作**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZ_k6XCbwk8Q-_C%2F42.png?generation=1577788875781788\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZa3TtjS9-kLLg4%2F43.png?generation=1577788875869756\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZbvTW7LbPQIrVR%2F44.png?generation=1577788875806223\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZchSjr3DdM0ZwA%2F45.png?generation=1577788875892038\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZdrreNklhUsq_u%2F46.png?generation=1577788875782316\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZeP5FtGJCdH-A0%2F47.png?generation=1577788875846519\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZf1Np5XzPmNoZX%2F48.png?generation=1577788875799127\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZgZhQbAKzP2hhL%2F49.png?generation=1577788875737754\&alt=media)

添加完后，选择root或git用户进行认证没有任何提示表示成功

### **构建触发器**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZharnay3cZESBF%2F50.png?generation=1577788875798833\&alt=media)

这里一定要勾上

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZiM5PSnxbuLYPR%2F51.png?generation=1577788875845848\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZjsER01Px7hxLI%2F52.png?generation=1577788875801538\&alt=media)

## **八、配置Gitlab，当有代码提交时，触发Jenkins的部署操作**

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZkQ9YO660NaYl3%2F53.png?generation=1577788875806613\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZl6o7EDsLZ7PEN%2F54.png?generation=1577788875826783\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZm0rTArPEl4bKO%2F55.png?generation=1577788875788066\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZnh5yrwWbJNHub%2F56.png?generation=1577788875783769\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZomGuvjzqqGi0h%2F57.png?generation=1577788875815774\&alt=media)

### **测试提交代码是否会部署到远程主机**

\#再次克隆仓库

```
git clone git@139.9.91.82:root/test.git
cd test/
echo '测试Jenkins' > index.html
git add .
git commit -m 'add index.html'
git push
```

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZpwcioLMAoX1cE%2F58.png?generation=1577788875783964\&alt=media)

\#提交之后去Jenkins页面看看

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZqJPQAp9nc92aQ%2F59.png?generation=1577788875819572\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZrECbfnVKu-FeG%2F60.png?generation=1577788875945311\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZsjY2bKi3yUUHC%2F61.png?generation=1577788875911607\&alt=media)

## 九、查看部署好的web服务器

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZt5pxMXxMHAWu_%2F62.png?generation=1577788875822398\&alt=media)

### 访问web测试页面

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZukkvh7JHrLTlk%2F63.png?generation=1577788875912979\&alt=media)

访问成功

## 十、总结

### 小坑：

#### 错误提示：

\#很多朋友使用最新版本的gitlab做自动部署时，在增加web钩子那一步，

\#点击test push events时会报错：Url is blocked: Requests to the local network are not allowed

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZvx3t-Od2qJBkU%2F64.png?generation=1577788875733291\&alt=media)

### **解决方法：**

\#这是因为新版的gitlab为了安全默认禁止了本地局域网地址调用web hook

\#我们在设置里允许就行，具体步骤如下：

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZwGj0wbX2rj94H%2F65.png?generation=1577788876016613\&alt=media)

![](https://139036132-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2Fabout-the-author%2F-LxQTAIRT5n3QPTda2Pj%2F-LxQXtZxmT-rjfmO60UC%2F66.png?generation=1577788875804834\&alt=media)
