一、介绍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 //查看私钥
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 ,然后添加项目构建后操作