一、介绍Jenkins

1、Jenkins概念
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。

2、Jenkins目的
① 持续、自动地构建/测试软件项目。
② 监控软件开放流程,快速问题定位及处理,提示开放效率。

3、特性
① 开源的java语言开发持续集成工具,支持CI,CD。
② 易于安装部署配置:可通过yum安装,或下载war包以及通过docker容器等快速实现安装部署,可方便web界面配置管理。
③ 消息通知及测试报告:集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知,生成JUnit/TestNG测试报告。
④ 分布式构建:支持Jenkins能够让多台计算机一起构建/测试。
⑤ 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
⑥ 丰富的插件支持:支持扩展插件,你可以开发适合自己团队使用的工具,如git,svn,maven,docker等。

4、产品发布流程
产品设计成型 -> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线
持续集成 (Continuous integration,简称CI)
持续交付(Continuous delivery,简称CD )
持续部署(continuous deployment)

5、准备工作
JDK
Maven
SVN 或者选用 Gitlab(目前主流)
Jenkins.war

二、Linux 安装配置 SVN 用于存放代码仓

1.YUM安装
[root@Server_2 ~]# yum install subversion -y

2.查看版本
[root@Server_2 ~]# svnserve --version

3.创建仓库目录(自定义)
[root@Server_2 ~]$ mkdir  /svn

4.使用SVN自带命令创建代码仓库,名字为项目名
[root@Server_2 ~]$ cd /svn
[root@Server_2 svn]$ svnadmin create cmdbservice

5.修改启动默认路径
[root@Server_2 ~]# vim /etc/sysconfig/svnserve
OPTIONS="-r /svn"  //仓库目录

6.编辑 svnserve.conf 配置文件
[root@Server_2 ~]$ vim /svn/cmdbservice/conf/svnserve.conf
anon-access = none 		//禁止匿名用户访问
auth-access = write 	//配置可写权限
password-db = passwd 	//指定用户配置文件,后面会用到
authz-db = authz 		//指定权限配置文件,后面会用到
realm=cmdbservice		//域,与库名一致

7.编辑 passwd 文件 设置SVN客户端访问用户
[root@Server_2 ~]$ vim /svn/cmdbservice/conf/passwd
admin = 12345

8.编辑authz文件,指定SVN仓库目录,[/]代表根目录,以及每个用户的权限,这里均为可读可写
[root@Server_2 ~]$ vim /svn/cmdbservice/conf/authz
[/]
admin = rw

9.启动svnserve 并测试
[root@Server_2 ~]# systemctl start svnserve
[root@Server_2 ~]# systemctl enable svnserve

打开IDEA 并创建一个项目提交到SVN版本库 项目名为你之前在Linux 创建的项目仓库名(名称要一致)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
通过 SVN 里checkout 检索出svn服务器的项目库,获取到本地
在这里插入图片描述
在这里插入图片描述
这里 SVN库 上传和拉取就验证成功了,下面通过 Jenkins 开始配置到构建

svn里checkout depth各选项的具体含义
代表四种检出深度: 
1、Fully recursive——全递归:检出完整的目录树,包含所有的文件或子目录。
2、Immediate children,including folders——直接子节点,包含文件夹:检出目录,包含其中的文件或子目录,但是不递归展开子目录。
3、Only file chlidren——仅文件子节点:检出指定目录,包含所有文件,但是不检出任何子目录。
4、Only this item——仅此项:只检出目录。不包含其中的文件或子目录

三、安装-部署-配置 Jenkins+SVN 步骤

1.安装JDK,Maven,SVN 等中间件辅助 Jenkins 部署

[app@Server_1 ~]$ tar -zxvf jdk-11.0.10_linux-x64_bin.tar.gz
[app@Server_1 ~]$ tar -zxvf apache-maven-3.8.4-bin.tar.gz
export MAVEN_HOME=/home/app/apache-maven-3.8.4
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

2.部署jenkins.war 到tomcat/webapps/下,并启动tomcat

[app@Server_1 ~]$ /home/app/tomcat9/bin/startup.sh 

3.为了安全考虑,首先需要解锁Jenkins,请在 /home/app/.jenkins/secrets/initialAdminPassword 中查看
在这里插入图片描述
4.访问Jenkins 默认端口就是tomcat端口 http://192.168.40.157:8080/jenkins/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、准备就绪,下面开始讲解Jenkins 配置项

在这里插入图片描述
1.进入首页会有中英文,这里要设置Jenkins语言为中文或英文,通过安装locale 插件可以在不修改服务器配置的情况下,修改Jenkins的语言为中文或英文, 注意:修改locale可能会影响该服务器上依靠JDK的其它应用的语言设置。

安装插件>Manage Jenkins>Manage Plugins
在这里插入图片描述
点击可选插件>搜索locale插件并勾选>点击"Download now and install after restart">勾选"Restart Jenkins when installation is complete and no jobs are running"
在这里插入图片描述
2.管理Jenkins Manage Jenkins > 全局配置 Global Tool Configuration > 配置JDK环境变量
在这里插入图片描述
在这里插入图片描述
4.配置 Maven
在这里插入图片描述
在这里插入图片描述5.配置 SVN插件 并重启
Deploy to container 将构建好的war包发布到远程的WEB容器中
Subversion svn 连接插件
Publish Over SSH 用于通过ssh方式连接远程服务器,从而实现代码远程推送

在这里插入图片描述

五、构建并发布项目

1.配置 主机信息 系统管理>系统设置>SSH Servers
在这里插入图片描述

2.点击新建任务,任务名为 cmdbservice
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:此时Jenkins 的工作区中还没有代码,需要执行一次构建操作之后Jenkins 才会下载代码
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

六、安装-部署-配置 Jenkins+Gitlab 步骤

一、配置Gitlab

1.Gitlab 常用命令
    gitlab-ctl start                 # 启动所有 gitlab 组件
    gitlab-ctl stop                  # 停止所有 gitlab 组件
    gitlab-ctl restart               # 重启所有 gitlab 组件
    gitlab-ctl status                # 查看服务状态
    vim /etc/gitlab/gitlab.rb        # 修改gitlab配置文件
    gitlab-ctl reconfigure           # 重新编译gitlab的配置
    gitlab-rake gitlab:check SANITIZE=true --trace    # 检查gitlab
    gitlab-ctl tail                  # 查看日志gitlab-ctl tail nginx/gitlab_access.log
    

2.安装相关依赖
[root@Server_2 ~]# yum install -y curl policycoreutils-python openssh-server httpd prostfix

3.启动ssh 服务
[root@Server_2 ~]# systemctl enable sshd &&  systemctl start  sshd
[root@Server_2 ~]# systemctl stop firewalld

4.设置postfix 开机自启,并启动,postfix 支持 gitlab发邮件功能
[root@Server_2 ~]# systemctl start postfix && systemctl enable postfix

5.开启ssh以及http服务,然后重新加载防火墙列表
[root@Server_2 ~]# firewall-cmd --add-service=ssh --permanent
[root@Server_2 ~]# firewall-cmd --add-service=http --permanent
[root@Server_2 ~]# firewall-cmd --reload

6.安装Gitlab
[root@Server_2 ~]# wget http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-14.6.0-ce.0.el7.x86_64.rpm
[root@Server_2 ~]# rpm -ivh gitlab-ce-14.6.0-ce.0.el7.x86_64.rpm

7.修改gitlab配置文件指定服务器IP和自定义端口
[root@Server_2 ~]# vim /etc/gitlab/gitlab.rb
external_url 'http://192.168.40.158:8443'
nginx['listen_port'] = 8443
//防止登录的时候弹出注册界面,先设置好
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "192.168.40.158"
gitlab_rails['smtp_port'] = 8443
gitlab_rails['smtp_user_name'] = "root"
gitlab_rails['smtp_password'] = "12345"
gitlab_rails['smtp_domain'] = "example.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
//启动gitlab,注意 执行编译的时候会遇到卡死情况
[root@Server_2 ~]# gitlab-ctl reconfigure
//卡死情况解决办法
[root@Server_2 ~]# nohup /opt/gitlab/embedded/bin/runsvdir-start &
//启动gitlab
[root@Server_2 ~]# gitlab-ctl start

8.设置防火墙开放 Gitlab 8443端口
[root@Server_2 ~]# firewall-cmd --zone=public --add-port=8443/tcp --permanent
[root@Server_2 ~]# firewall-cmd --reload

二、访问Gitlab页面IP+端口,注意:可能是由于版本不一样,我在访问的时候没有出现让我更改密码的页面,直接是登录,这里有个查看默认密码的方式,用户是root

1.访问 http://192.168.40.158:8443/

//查看默认密码,这个文件将在首次执行reconfigure后24小时自动删除
[root@Server_2 bin]# cat /etc/gitlab/initial_root_password

在这里插入图片描述
2.修改默认初始密码,防止失效登不上去
在这里插入图片描述
3.设置Gitlab为中文
在这里插入图片描述
4.Gitlab添加组、创建用户和项目
(1)、创建组
在这里插入图片描述
在这里插入图片描述
(2)、新建项目
在这里插入图片描述
在这里插入图片描述
5.IDEA 源码上传到 Gitlab 仓库
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
(1)、右键点击 项目,将项目放入到本地仓库缓存中 add
在这里插入图片描述
(2)、点击完add 然后再点击上面的 commit Directory 提交到本地仓库(不是lab仓库)
在这里插入图片描述
(3)、右键点击项目,选择 Git>Repository>Remotes 管理远程地址,输入仓库用户名和密码,如果能添加成功,就说明可以联通。
在这里插入图片描述
(4)、再次右键点击项目,选择 Git>Repository>Push
在这里插入图片描述
(5)、登录 Gitlab 私服 查看项目是否提交成功
在这里插入图片描述
三、部署Jenkins + Tomcat + Maven
1.安装 JDK Maven 等环境变量

[app@Server_1 ~]$ tar -zxvf jdk-11.0.10_linux-x64_bin.tar.gz
[app@Server_1 ~]$ tar -zxvf apache-maven-3.8.4-bin.tar.gz

2.进入首页会有中英文,这里要设置Jenkins语言为中文或英文,通过安装locale 插件可以在不修改服务器配置的情况下,修改Jenkins的语言为中文或英文, 注意:修改locale可能会影响该服务器上依靠JDK的其它应用的语言设置。

安装插件>Manage Jenkins>Manage Plugins 点击可选插件 > 搜索locale插件并勾选 > 点击 “Download now and install after restart” > 勾选"Restart Jenkins when installation is complete and no jobs are running"
在这里插入图片描述
3.安装Role-based Authorization Strategy插件并重启,然后依次点击系统管理 > 全局安全配置
在这里插入图片描述
管理角色可以点击 系统管理 > Manage and Assign Roles (这里不做多讲)

4.安装 Credentials Binding Plugin 凭证管理插件
5.安装 Git plugin 插件用于Jenkins 拉取服务器上代码
在这里插入图片描述
6.登录 Jenkins 服务器 安装Git工具

[root@Server_1 ~]# yum install git -y
[root@Server_1 ~]# git --version

7.通过用户名和密码凭证去Gitlab服务器上拉取代码
在这里插入图片描述
在这里插入图片描述
8.复制 Gitlab上的 HTTP地址,然后到Jenkins 去新建一个自由风格的项目,然后点击构建查看控制台输出,默认构建到 Jenkins 主目录
在这里插入图片描述
在这里插入图片描述
9.点击构建,然后点击进度条可以查看控制台输出,默认构建到Jenkins设置的主目录,主目录查看方式 依次点击系统管理 > 系统设置
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
10. 再 Gitlab 主机上生成SSH私钥凭证(root用户下),然后通过 SSH 去构建一个自由风格的项目

[root@Server_2 ~]# ssh-keygen -t rsa   //一直回车
[root@Server_2 .ssh]# cat id_rsa.pub  //查看公钥
[root@Server_2 .ssh]# cat id_rsa	  //查看私钥

在sdad

在这里插入图片描述
11. 复制 Gitlab 项目地址的SSH链接用于 Jenkins 构建 (上一次是用HTTP+用户名和密码的方式构建的,这次使用SSH免密构建)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、通过 Maven 构建部署项目到Tomcat中

1.前面已有 Maven和TOMCAT安装步骤这里就不做多讲,系统管理 > 系统设置 配置三个键值

在这里插入图片描述
2. 配置 Maven 阿里云私服地址用于获取依赖插件

[root@Server_1 app]# mkdir repo	 //创建repo目录 
[root@Server_1 app]# vim apache-maven-3.8.4/conf/settings.xml
//镜像源存放目录
<localRepository>/home/app/repo</localRepository>
//阿里镜像地址
<mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

3.测试 构建步骤执行 shell
在这里插入图片描述
4. 远程部署到Tomcat 容器当中,首先安装插件 Deploy to container Plugin ,然后添加项目构建后操作
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐