Jenkins 持续集成入门到精通(一)

  • 什么是持续集成
  • 持续集成到组成
  • 持续集成的好处
  • Jenkins
  • Jenkins 安装和持续集成环境配置
  • 持续集成流程说明
  • 服务器列表
  • Gitlab代码托管服务器安装
  • GitLab
  • GitLab 普通 安装
  • GitLab Docker 安装
  • Gitlab添加组、创建用户、创建项目
  • Idea代码上传到gitlab
  • Jenkins 软件安装 Docker的方式
  • Jenkins 插件管理
  • 安装中文包
  • Jenkins用户权限管理
  • Jenkins 凭证管理
  • 安装Credentials Binding 插件
  • 安装git插件和git工具
  • 用户密码类型
  • SSH密钥类型
  • 安装Maven和配置
  • 安装maven以及java
  • 启动Jenkins 挂载java 以及 maven
  • 全局工具配置jenkins关联JDK和Maven
  • 使用Docker 安装tomcat 并打包部署
  • 安装
  • jenkins安装Deploy to container插件
  • 点击构建


什么是持续集成

持续集成(Continuous Integration)简称C I 指的是 频繁(一天多次)将代码集成到骨干。

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。。它的核心措施是,代码集成到骨干之前必须通过自动化测试。只要有一个测试用例失败,就不能集成。

通过持续集成,团队可以快速的从一个功能到另一个功能,简而言之,敏捷软件开发 很大一个部分都要归功于持续集成。

持续集成部署到流程

jenkins 集成cypress 项目_docker

根据持续集成的设计,代码从提交到生产,zeng ti包含以下流程:

  • 提交

第一步,开发者向代码仓库提交代码,所有后续的步骤都始于本地代码的一次提交(commit)。

  • 测试(第一轮)

代码仓库对commit操作设置了钩子(hook),只要提交代码或者合并进主干,就会启动自动化测试。
第一轮至少跑完单元测试。

  • 构建

通过第一轮测试,代码合并进主干,就可以交付了。
交付后,就进行构建(build),再进入第二轮测试,构建指的是将源码转换为可以运行的实际代码,比如安装依赖、配置各种资源(样式表、js脚本、图片等)等。
常用的构建工具有:Jenkins、Travis、Codeship等。

  • 测试(第二轮)

构建完成后,就进行第二轮测试,第二轮是全面测试,包含单元测试、集成测试,以自动化测试为主,新版本的每一个更新点都要测试到。

  • 部署

通过第二轮测试,代码就是可直接部署的版本,将这个版本的所有文件(jar,wer等)打包存档,发到生产服务器,生产服务器将其解包成本地的一个目录,再将运行路径的符号链接指向这个目录,然后重新启动应用。

  • 回滚

一旦之前的版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法是修改符号链接,指向上一个版本的目录。

持续集成到组成

  1. 一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预。
  2. 一个代码存储器,即需要版本控制软件来保障代码的可维护性,一半使用git或svn
  3. 一个持续集成服务器,Jenkins就是一个配置简单和使用方便的持续集成服务器。

持续集成的好处

  1. 降低风险,减少反复的操作
  2. 减少发布风险带来的问题
  3. 减少重复性工作
  4. 持续部署,可提供可部署的单元包
  5. 持续交付可供使用的版本
  6. 增强团队信息

Jenkins

jenkins 集成cypress 项目_tomcat_02

作为领先的开源自动化服务器,Jenkins 提供了数百个插件来支持任何项目的构建、部署和自动化。
Jenkins 特点:

  1. 作为可扩展的自动化服务器,Jenkins 可以用作简单的 CI 服务器或变成任何项目的持续交付中心。
  2. Jenkins 是一个独立的基于 Java 的程序,可以开箱即用,带有适用于 Windows、Linux、macOS 和其他类 Unix 操作系统的软件包。
  3. Jenkins 可以通过其 Web 界面轻松设置和配置,其中包括即时错误检查和内置帮助。
  4. 通过更新中心中的数百个插件,Jenkins 几乎可以与持续集成和持续交付工具链中的所有工具集成。
  5. Jenkins 可以通过其插件架构进行扩展,为 Jenkins 的功能提供近乎无限的可能性。
  6. Jenkins 可以轻松地在多台机器上分配工作,帮助更快地推动跨多个平台的构建、测试和部署。

Jenkins 安装和持续集成环境配置

持续集成流程说明

  1. 首先 开发人员每天进行代码提交,提交到git仓库
  2. 然后Jenkins作为持续集成工具,私有git工具到git仓库拉去代码到集成服务器,再配合jdk,maven等软件完成代码编译,代码测试与审核,测试,打包等工作,在这个过程每一步出错,都重新再执行一次整个流程。
  3. 最后 Jenkins把7
  4. 生成的jar或war包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用。

服务器列表

名称

ip

安装到软件

代码托管服务器

Gitlab-12.4.2

持续集成服务器

Jenkins-2.190.3,jdk1.8,Maven3.6.2,git,SonarQube

应用测试服务器

jdk1.8,tomcat8。5

Gitlab代码托管服务器安装

GitLab

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,部署在自己的服务器,可通过Web界面进行访问公开的或者私人项目。

它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

GitLab 普通 安装
  1. 安装相关依赖包
sudo yum install -y curl policycoreutils-python openssh-server perl
  1. 启动ssh服务并设置为开启启动
sudo systemctl enable sshd
sudo systemctl start sshd
  1. 下载postfix,并设置postfix开启自启动,postfix支持gitlab发信功能
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
  1. 开放ssh以及http服务,然后重新加载防火墙列表
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
  1. 下载gitlab包,并安装
    下载地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm 安装:rpm -ivh gitlab-ce-12.4.2-ce.0.el7.x86_64.rpm
  2. 修改gitlab配置
vi	/etc/gitlab/gitlab.rb
## 修改gitlab访问地址和端口,默认为80 ,我们修改为82
external_url 'http://192.168.66.100:82'
nginx['listen_port'] = 82
  1. 重载配置以及启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
  1. 把端口添加到防火墙(关闭防火墙就不用)
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload

启动成功后,看到修改管理员root密码的页面,修改密码后,然后登陆即可!

jenkins 集成cypress 项目_jenkins_03

GitLab Docker 安装
Gitlab添加组、创建用户、创建项目

1) 创建组
使用管理员root创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同到开发即可实现对开发设置权限的管理。

  1. 创建组
  2. 创建项目

jenkins 集成cypress 项目_Jenkins_04


2)创建用户

  1. 创建普通用户填写信息

Regular:普通用户可以访问他们的组和项目

Admin:管理员可以访问所有组、项目和用户,并可以管理此安装中的所有功能

2. 设置用户密码

jenkins 集成cypress 项目_jenkins_05


jenkins 集成cypress 项目_tomcat_06


3)给用户设置项目组权限

jenkins 集成cypress 项目_tomcat_07


jenkins 集成cypress 项目_Jenkins_08

Guest: 可以创建issue、发布评论、不能读写版本库
Reporter: 可以克隆代码、不能提交,QA,PM可以赋予这个权限
Developer: 可以克隆代码、开发、提交、push,普通开发可以赋予这个q权限
Maintainer: 可以创建项目、添加tag、保护分支、添加项目成员、编辑项目、核心开发可以授予这个权限
Owner: 可以设置项目访问权限-Visbility Level、删除项目、迁移项目、管理项目组成员、开发组组长可以赋予这个权限。

使用普通用户登陆

可以直接看到我们的组

jenkins 集成cypress 项目_java_09


4)在用户组中创建项目

刚才登陆的用户可以进行创建项目

jenkins 集成cypress 项目_Jenkins_10

Idea代码上传到gitlab

首先在idea 创建项目,并启动测试成功

jenkins 集成cypress 项目_jenkins_11


然后给项目添加git

jenkins 集成cypress 项目_jenkins_12


jenkins 集成cypress 项目_tomcat_13


将项目添加到本地git仓库并提交

jenkins 集成cypress 项目_java_14


jenkins 集成cypress 项目_Jenkins_15


最后push到远程gitlab仓库

jenkins 集成cypress 项目_docker_16


这里使用的地址使用ssh,之后会输入正好密码

jenkins 集成cypress 项目_java_17


然后进行push

jenkins 集成cypress 项目_tomcat_18


上传成功!!!

Jenkins 软件安装 Docker的方式

  1. docker 拉取镜像
docker pull jenkins/jenkins
  1. 创建目录并赋予权限
    mkdir -p /var/jenkins_mount
    chmod 777 /var/jenkins_mount
  2. docker 创建并启动容器
docker run -d -p 10240:8080 -p 10241:50000 /
-v /var/jenkins_mount:/var/jenkins_home	/
-v /etc/localtime:/etc/localtime /
--name myjenkins jenkins/jenkins
端口 映射
-p 10240:8080 -p 10241:50000

挂载目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置:
-v /var/jenkins_mount:/var/jenkins_home

让容器使用和服务器同样的时间设置。
-v /etc/localtime:/etc/localtime

4.配置镜像加速
默认的Jenkins是使用国外的地址所以非常慢。

cd /var/jenkins_mount/updates

然后执行

sudo sed -i 's#http://updates.jenkins-ci.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

这个博客写的非常详细 5. 重启容器
docker restart myjenkins

启动成功

jenkins 集成cypress 项目_tomcat_19


6. 查看管理员密码

[root@localhost jenkins_mount]# cat /var/jenkins_mount/secrets/initialAdminPassword 
46f87f2955484e489f82262aaf58ed83

登陆成功!!

jenkins 集成cypress 项目_jenkins_20


这里我们点击选择插件安装,然后选择无。 这里我们不进行插件安装,后续再安装

jenkins 集成cypress 项目_docker_21

jenkins 集成cypress 项目_tomcat_22


后续一直确定就完成了安装!

Jenkins 插件管理
安装中文包

首先进入我们插件管理

jenkins 集成cypress 项目_docker_23


搜索 chinese ,然后选择中文包 下载

jenkins 集成cypress 项目_tomcat_24


点击Go back to the。。。

jenkins 集成cypress 项目_tomcat_25


重新打开后

jenkins 集成cypress 项目_docker_26

Jenkins用户权限管理

我们利用Role-based Authorization Strategy 插件管理Jenkins用户权限

安装Role-based Authorization Strategy插件

jenkins 集成cypress 项目_jenkins_27


然后进行全局安全权限配置

jenkins 集成cypress 项目_Jenkins_28

jenkins 集成cypress 项目_jenkins_29

  1. 创建我们的角色权限管理

  2. 添加两个用户,分别给这两个用户进行 角色授权

  3. 测试我们的角色权限
    新建几个项目

    然后登陆xiaoming1用户发现。只能查看到xiaoming开头的项目任务
    t
Jenkins 凭证管理

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

安装Credentials Binding 插件

要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件

jenkins 集成cypress 项目_jenkins_30


下一步

jenkins 集成cypress 项目_tomcat_31


下一步

jenkins 集成cypress 项目_java_32


选取凭证类型

jenkins 集成cypress 项目_Jenkins_33


一共有5种凭证

jenkins 集成cypress 项目_jenkins_34

安装git插件和git工具

为了让Jenkins支持从gitlab拉取源码,需要安装git插件以及在CentOS上安装Git工具

git插件安装:

jenkins 集成cypress 项目_java_35


CentOS上安装GIT工具

yum install git -y 安装

git --version 安装后查看版本

用户密码类型

添加凭证,使用gitlab的账号密码

jenkins 集成cypress 项目_tomcat_36


jenkins 集成cypress 项目_tomcat_37


创建项目给项目添加git 用户密码凭证

jenkins 集成cypress 项目_tomcat_38


构建项目

jenkins 集成cypress 项目_java_39

SSH密钥类型

jenkins 集成cypress 项目_Jenkins_40


1)使用root用户生成公钥和私钥ssh-keygen -t rsa

在/root/.ssh/ 目录保存了公钥和私钥

jenkins 集成cypress 项目_tomcat_41


id_rsa : 私钥

id_rsa.pub :公钥

2)把生成的公钥放在gitlab中

  1. 在Jenkins机器上面查看公钥
[root@cn-mbp-c02v221ahv2f .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjVAyIBpy1kpFZGJgQ7bZS+PVS6ypKlCFuXDrosTCr8lD2/k5mKdlWS7llf4S+buQgB3l3h0jDxGRw3c+fBG/txbFzNiN0vAYX8Wx0N+12NccqhIdrrp0lGavLuEZqkdlL6Jz4o2jpJjyoRliPLY41ZhJ6eYS6kDuGvJcsN1PsOs7Dq3F2b43qfxTIjvJ3T6I5tLdtyr5qGosMEDCg0fJ/9DOE3pJscKCwWkf5+C07A4+NOmJQbh6+h1WplAbLdQOtn6e0eFcJOOyhaLRF++HPcLVMcdlI4KAB0OvU4rLyq5BGeyAF9nmGdpJm1Enz22cS0ic/rxh4J71n8lcbGg/D root@cn-mbp-c02v221ahv2f
  1. 到我们gitlab 上 添加公共ssh密钥


    3)把生成的私钥添加到Jenkins凭证中


    最后测试

创建一个项目并使用ssh方式

jenkins 集成cypress 项目_java_42


jenkins 集成cypress 项目_tomcat_43


完成ssh类型拉去代码!!

安装Maven和配置
安装maven以及java

首先maven依赖java环境

tar -zvxf jdk-8u301-linux-i586.tar.gz 
 tar -zvxf apache-maven-3.8.1-bin.tar.gz

配置jdk和maven的环境

# java
export JAVA_HOME=/home/java/jdk1.8.0_301
export JRE_HOME=/home/java/jdk1.8.0_301/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH

# maven
export MAVEN_HOME=/home/maven/apache-maven-3.8.1
export PATH=$MAVEN_HOME/bin:$PATH

执行 source /etc/profile 进行刷新文件

## 查看版本
java -- version
mvn -v

修改maven的配置文件下载使用阿里的

<!-- 从阿里云镜像下载jar包 -->
  <mirrors>
	<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>
启动Jenkins 挂载java 以及 maven

之前的容器删除。

docker run -d -p 10240:8080 -p 10241:50000 \
-v /var/jenkins_mount:/var/jenkins_home \
-v /home/maven/apache-maven-3.8.1:/usr/local/maven \
-v /home/java/jdk1.8.0_301:/usr/local/java \
--name myjenkins jenkins/jenkins
全局工具配置jenkins关联JDK和Maven

然后配置Jenkins环境

jenkins 集成cypress 项目_jenkins_44


修改jdk和maven配置

这里的JAVA_HOME 和MAVE

jenkins 集成cypress 项目_jenkins_45


安装 maven 插件

Maven Integration plugin

jenkins 集成cypress 项目_docker_46


创建项目并构建打包

jenkins 集成cypress 项目_tomcat_47


jenkins 集成cypress 项目_docker_48


jenkins 集成cypress 项目_tomcat_49


jenkins 集成cypress 项目_Jenkins_50


打包成功!!

使用Docker 安装tomcat 并打包部署
安装

启动一个基础tomcat

docker run -d -p 8081:8080 mysql:8.5

cp tomcat文件到本地

docker cp b5c948b981ec:/usr/local/tomcat/webapps.dist /home/tomcat/webapps/
 docker cp b5c948b981ec:/usr/local/tomcat/conf /home/tomcat/conf/
  docker cp b5c948b981ec:/usr/local/tomcat/logs /home/tomcat/logs/

停止并删除基础tomcat镜像

docker stop tomcat
docker rm tomcat

启动tomcat 容器并进行挂载

docker run -d -p 8088:8080 --name tomcat1 \
-v /home/tomcat/conf:/usr/local/tomcat/conf \
-v /home/tomcat/logs:/usr/local/tomcat/logs \
-v /home/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5

配置tomcat用户
进入conf目录下,找到tomcat-users.xml文件,然后配置一些用户名即权限

<role rolename="tomcat"/> 
<role rolename="role1"/> 
<role rolename="manager-script"/> 
<role rolename="manager-gui"/> 
<role rolename="manager-status"/> 
<role rolename="admin-gui"/> 
<role rolename="admin-script"/> 
<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>

jenkins 集成cypress 项目_jenkins_51


下面再取到webapp目录下修改一个context文件,默认情况下,web的ui界面是看不到的,需要注释掉下面的这段配置即可

cd /home/tomcat/webapps/manager/META-INF

vi context.xml

jenkins 集成cypress 项目_tomcat_52


再次启动tomcat之后,我们再次点击manage webapp,弹出需要验证用户名的界面

jenkins 集成cypress 项目_java_53

jenkins安装Deploy to container插件

可以想象一下,jenkins怎么才能将打好的jar包或者war包推送到指定的tomcat容器中启动运行呢?肯定需要在某个地方配置远程的tomcat容器地址,比如war包是放在webapp目录的地址,这样才可以吧?下面看具体的操作

搜索Deploy to container并安装
安装好之后配置项目

jenkins 集成cypress 项目_jenkins_54


添加密钥

账号是tomcat 密码是tomcat

配置完保存

点击构建

jenkins 集成cypress 项目_docker_55


最后就可以访问到我们的web项目了!