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 指的是 频繁(一天多次)将代码集成到骨干。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。。它的核心措施是,代码集成到骨干之前必须通过自动化测试。只要有一个测试用例失败,就不能集成。
通过持续集成,团队可以快速的从一个功能到另一个功能,简而言之,敏捷软件开发 很大一个部分都要归功于持续集成。
持续集成部署到流程
根据持续集成的设计,代码从提交到生产,zeng ti包含以下流程:
- 提交
第一步,开发者向代码仓库提交代码,所有后续的步骤都始于本地代码的一次提交(commit)。
- 测试(第一轮)
代码仓库对commit操作设置了钩子(hook),只要提交代码或者合并进主干,就会启动自动化测试。
第一轮至少跑完单元测试。
- 构建
通过第一轮测试,代码合并进主干,就可以交付了。
交付后,就进行构建(build),再进入第二轮测试,构建指的是将源码转换为可以运行的实际代码,比如安装依赖、配置各种资源(样式表、js脚本、图片等)等。
常用的构建工具有:Jenkins、Travis、Codeship等。
- 测试(第二轮)
构建完成后,就进行第二轮测试,第二轮是全面测试,包含单元测试、集成测试,以自动化测试为主,新版本的每一个更新点都要测试到。
- 部署
通过第二轮测试,代码就是可直接部署的版本,将这个版本的所有文件(jar,wer等)打包存档,发到生产服务器,生产服务器将其解包成本地的一个目录,再将运行路径的符号链接指向这个目录,然后重新启动应用。
- 回滚
一旦之前的版本发生问题,就要回滚到上一个版本的构建结果。最简单的做法是修改符号链接,指向上一个版本的目录。
持续集成到组成
- 一个自动构建过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预。
- 一个代码存储器,即需要版本控制软件来保障代码的可维护性,一半使用git或svn
- 一个持续集成服务器,Jenkins就是一个配置简单和使用方便的持续集成服务器。
持续集成的好处
- 降低风险,减少反复的操作
- 减少发布风险带来的问题
- 减少重复性工作
- 持续部署,可提供可部署的单元包
- 持续交付可供使用的版本
- 增强团队信息
Jenkins
作为领先的开源自动化服务器,Jenkins 提供了数百个插件来支持任何项目的构建、部署和自动化。
Jenkins 特点:
- 作为可扩展的自动化服务器,Jenkins 可以用作简单的 CI 服务器或变成任何项目的持续交付中心。
- Jenkins 是一个独立的基于 Java 的程序,可以开箱即用,带有适用于 Windows、Linux、macOS 和其他类 Unix 操作系统的软件包。
- Jenkins 可以通过其 Web 界面轻松设置和配置,其中包括即时错误检查和内置帮助。
- 通过更新中心中的数百个插件,Jenkins 几乎可以与持续集成和持续交付工具链中的所有工具集成。
- Jenkins 可以通过其插件架构进行扩展,为 Jenkins 的功能提供近乎无限的可能性。
- Jenkins 可以轻松地在多台机器上分配工作,帮助更快地推动跨多个平台的构建、测试和部署。
Jenkins 安装和持续集成环境配置
持续集成流程说明
- 首先 开发人员每天进行代码提交,提交到git仓库
- 然后Jenkins作为持续集成工具,私有git工具到git仓库拉去代码到集成服务器,再配合jdk,maven等软件完成代码编译,代码测试与审核,测试,打包等工作,在这个过程每一步出错,都重新再执行一次整个流程。
- 最后 Jenkins把7
- 生成的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 普通 安装
- 安装相关依赖包
sudo yum install -y curl policycoreutils-python openssh-server perl
- 启动ssh服务并设置为开启启动
sudo systemctl enable sshd
sudo systemctl start sshd
- 下载postfix,并设置postfix开启自启动,postfix支持gitlab发信功能
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
- 开放ssh以及http服务,然后重新加载防火墙列表
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo systemctl reload firewalld
- 下载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 - 修改gitlab配置
vi /etc/gitlab/gitlab.rb
## 修改gitlab访问地址和端口,默认为80 ,我们修改为82
external_url 'http://192.168.66.100:82'
nginx['listen_port'] = 82
- 重载配置以及启动gitlab
gitlab-ctl reconfigure
gitlab-ctl restart
- 把端口添加到防火墙(关闭防火墙就不用)
firewall-cmd --zone=public --add-port=82/tcp --permanent
firewall-cmd --reload
启动成功后,看到修改管理员root密码的页面,修改密码后,然后登陆即可!
GitLab Docker 安装
Gitlab添加组、创建用户、创建项目
1) 创建组
使用管理员root创建组,一个组里面可以有多个项目分支,可以将开发添加到组里面进行设置权限,不同的组就是公司不同的开发项目或者服务模块,不同的组添加不同到开发即可实现对开发设置权限的管理。
- 创建组
- 创建项目
2)创建用户
- 创建普通用户填写信息
Regular:普通用户可以访问他们的组和项目
Admin:管理员可以访问所有组、项目和用户,并可以管理此安装中的所有功能
2. 设置用户密码
3)给用户设置项目组权限
Guest: 可以创建issue、发布评论、不能读写版本库
Reporter: 可以克隆代码、不能提交,QA,PM可以赋予这个权限
Developer: 可以克隆代码、开发、提交、push,普通开发可以赋予这个q权限
Maintainer: 可以创建项目、添加tag、保护分支、添加项目成员、编辑项目、核心开发可以授予这个权限
Owner: 可以设置项目访问权限-Visbility Level、删除项目、迁移项目、管理项目组成员、开发组组长可以赋予这个权限。
使用普通用户登陆
可以直接看到我们的组
4)在用户组中创建项目
刚才登陆的用户可以进行创建项目
Idea代码上传到gitlab
首先在idea 创建项目,并启动测试成功
然后给项目添加git
将项目添加到本地git仓库并提交
最后push到远程gitlab仓库
这里使用的地址使用ssh,之后会输入正好密码
然后进行push
上传成功!!!
Jenkins 软件安装 Docker的方式
- docker 拉取镜像
docker pull jenkins/jenkins
- 创建目录并赋予权限
mkdir -p /var/jenkins_mount
chmod 777 /var/jenkins_mount - 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
启动成功
6. 查看管理员密码
[root@localhost jenkins_mount]# cat /var/jenkins_mount/secrets/initialAdminPassword
46f87f2955484e489f82262aaf58ed83
登陆成功!!
这里我们点击选择插件安装,然后选择无。 这里我们不进行插件安装,后续再安装
后续一直确定就完成了安装!
Jenkins 插件管理
安装中文包
首先进入我们插件管理
搜索 chinese ,然后选择中文包 下载
点击Go back to the。。。
重新打开后
Jenkins用户权限管理
我们利用Role-based Authorization Strategy 插件管理Jenkins用户权限
安装Role-based Authorization Strategy插件
然后进行全局安全权限配置
- 创建我们的角色权限管理
- 添加两个用户,分别给这两个用户进行 角色授权
- 测试我们的角色权限
新建几个项目
然后登陆xiaoming1用户发现。只能查看到xiaoming开头的项目任务
t
Jenkins 凭证管理
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker 私有仓库密码等,以便于Jenkins可以和这些第三方等应用进行交互。
安装Credentials Binding 插件
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件
下一步
下一步
选取凭证类型
一共有5种凭证
安装git插件和git工具
为了让Jenkins支持从gitlab拉取源码,需要安装git插件以及在CentOS上安装Git工具
git插件安装:
CentOS上安装GIT工具
yum install git -y 安装
git --version 安装后查看版本
用户密码类型
添加凭证,使用gitlab的账号密码
创建项目给项目添加git 用户密码凭证
构建项目
SSH密钥类型
1)使用root用户生成公钥和私钥ssh-keygen -t rsa
在/root/.ssh/ 目录保存了公钥和私钥
id_rsa : 私钥
id_rsa.pub :公钥
2)把生成的公钥放在gitlab中
- 在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
- 到我们gitlab 上 添加公共ssh密钥
3)把生成的私钥添加到Jenkins凭证中
最后测试
创建一个项目并使用ssh方式
完成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环境
修改jdk和maven配置
这里的JAVA_HOME 和MAVE
安装 maven 插件
Maven Integration plugin
创建项目并构建打包
打包成功!!
使用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"/>
下面再取到webapp目录下修改一个context文件,默认情况下,web的ui界面是看不到的,需要注释掉下面的这段配置即可
cd /home/tomcat/webapps/manager/META-INF
vi context.xml
再次启动tomcat之后,我们再次点击manage webapp,弹出需要验证用户名的界面
jenkins安装Deploy to container插件
可以想象一下,jenkins怎么才能将打好的jar包或者war包推送到指定的tomcat容器中启动运行呢?肯定需要在某个地方配置远程的tomcat容器地址,比如war包是放在webapp目录的地址,这样才可以吧?下面看具体的操作
搜索Deploy to container并安装
安装好之后配置项目
添加密钥
账号是tomcat 密码是tomcat
配置完保存
点击构建
最后就可以访问到我们的web项目了!