CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署

一、jenkins简介

  • Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
  • 主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。
  • Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
  • 通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

二、CI/CD简介

 CI(Continuous integration持续集成)持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。

  •  CI持续集成:
  • CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第1张图片  

  • CD(Continuous Delivery持续交付) 是在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境(类生产环境)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的Staging环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境。
  •  CD持续交付:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第2张图片

三、jenkins环境部署

首先我们先明确主机id及其功能:

主机名称 IP地址 功能
server3 172.25.254.3 作为gitlab服务器
server4 172.25.254.4 作为jenkins服务器

3.1 环境搭建

此时我们再开一个虚拟机用来安装jenkins: 

jenkins官网下载:Jenkins 的安装和设置

国内镜像站:Index of /jenkins/redhat/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

jenkins要求java8的jdk:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第3张图片

安装jenkins

​ 启动

​ 可以看到jenkins的端口为8080。注:若是提示java版本原理一直启动不了,可以尝试手动安装更高版本的java包,但必须是java8的;或者用旧一点版本的jenkins。

 web端访问jenkins

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第4张图片

​ 使用初始密码登陆进来。

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第5张图片

换源

此时可以看到我们要进行插件安装,但是官方的安装源特别慢,可以用以下方式查看哪个源比较快:

curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash 

多测试几次,选一个速度快的、稳定的源:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第6张图片​ 我们通过web来访问是这样的:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第7张图片

 将此链路复制到:

 替换url:CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第8张图片

注:在使用这个链路时,是需要证书的

  • mkdir /var/lib/jenkins/update-center-rootCAs
  • wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /var/lib/jenkins/update-center-rootCAs/update-center.crt
  • chown jenkins.jenkins -R /var/lib/jenkins/update-center-rootCAs 

创建目录,将证书放进去:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第9张图片

​ 设置完成之后,我们重启服务:

此时会在jenkins目录下拉取一个default.json ,这个json文件就是我们从刚刚替换的url上下载下来的。

安装插件

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第10张图片​ 我们选择使用社区推荐的插件:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第11张图片

 安装完成后:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第12张图片

 直接使用admin账户进入:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第13张图片

设置中文

管理插件 --> 安装中文插件:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第14张图片

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第15张图片

安装完成后进入系统设置中 Configure System:

此时就变成中文了: CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第16张图片

 更改用户密码

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第17张图片

 改完后退出再进来即可。

3.2 项目创建---手动触发

新建任务

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第18张图片

 进来之后我们可以在源码管理这里将jenkins和gitlab仓库进行整合。

源码管理

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第19张图片

生产环境里,我们的代码托管在gitlab中,现在我们准备把项目代码从仓库中拉过来:

在gitlab中进行git clone:
CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第20张图片

我们需要在jenkins主机中安装git:CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第21张图片

安装完成之后显示没有主机key:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第22张图片​ 因为我们是以ssh的方式连接,所以一定要有免密。我们在下面添加jenkins证书:

添加jenkins证书

先将server4的公钥添加到gitlab上来:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第23张图片​ server3 的私钥:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第24张图片

我们将server3 gitlab主机上的私钥放到jenkins上来: 

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第25张图片

 我们也可以描述一下我们添加的是什么:

此时git地址就ok了:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第26张图片​ 在gitlab中可以看到我们项目的主分支名称为 main:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第27张图片

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第28张图片

构建触发器

我们可以设置轮询触发,每分钟触发一次:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第29张图片

我们可以设置在构建后简单的执行一个脚本:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第30张图片

然后保存即可。 

触发项目并运行

 接下来我们就可以等着看触发效果,我们也可以点图中红框内的按钮,手动触发:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第31张图片

我们点进工程,可以看到已经触发了一次: CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第32张图片

 点击控制台输出可以看到项目的工作记录:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第33张图片

 可以看到拉取之后执行了我们写的shell命令。

3.3 项目创建---gitlab代码变更触发

显然,每分钟轮询一次是不合理的。我们希望的是gitlab中的代码或者文件一有变更,就直接触发jenkins进行变更。 

安装触发器插件

 我们回到工程配置里,更改触发器,首先我们要安装一个触发器插件:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第34张图片

再回去看我们的触发器,发现触发器选项里多了一项gitlab相关的:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第35张图片

 往下翻,点击高级,点击生成密钥token(一定要点击下面的保存):

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第36张图片

gitlab中添加webhook

 返回gitlab,点击 菜单--> 管理员,进入 设置--->网络:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第37张图片

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第38张图片

将 允许来自webhook 和服务请求勾选上:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第39张图片​返回项目中,在 设置---> webhook中,在令牌处将刚刚的token复制过来:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第40张图片

添加成功:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第41张图片​ 手动push进行测试

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第42张图片

 此时gitlab会通知我们的jenkins,jenkins中收到触发后,项目进行构建:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第43张图片

此时收到触发后进行了第二次构建。 

gitlab文件变更进行触发

在server3的project1中进行更改,简单的写一个Dockerfile:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第44张图片

此时gitlab首先上传成功:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第45张图片​ 在jenkins中也多了构建3:CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第46张图片

控制台输出可以看到详细的执行过程:

CI/CD持续集成与持续交付(二)jenkins环境搭建、项目部署_第47张图片

但是jenkins端,我们还没有进行任何的处理,我们只是单纯的把gitlab和jenkins做了一个整合,在jenkins端我们只是ls了一下,可操作空间还很大。我们接下来可以做在jenkins端写好代码,用Dockerfile文件直接构建镜像。此时整合的逻辑大致为:

用户把代码通过git提交push到gitlab上,然后gitlab触发jenkins的webhook,通知jenkins做构建。

你可能感兴趣的:(jenkins,git,ci)