linux下jenkins+git+maven+tomcat版本管理集成

一、前言

由于是做虚拟搭建和测试,这里采用在同一虚拟机上搭建(http://192.168.11.169),具体信息如下:

服务端口软件及版本
linux系统RHEL8
gitlab82gitlab-ce-13.12.9-ce.0.el8.x86_64.rpm
持续集成8088Jenkins-2.190.3-1.1.noarch.rpm(不小心升级到2.308了,感觉UI更漂亮了)
JDK1.8.0
Git2.27.0
maven3.6.3
tomcat8080v8.5.61

二、Gitlab安装

1. 安装相关依赖并启动,设置开机自启:

PS:由于涉及到ssh和ftp的使用,除了以下方法外,也可以安装宝塔面板(默认端口8888)在其中安装和放行端口,方便快捷;

dnf -y install policycoreutils openssh-server openssh-clients postfix

systemctl enable sshd && sudo systemctl start sshd
systemctl enable postfix && systemctl start postfix

2. 防火墙开放ssh和http服务,并重载防火墙

firewall-cmd --add-service=ssh --permanent # 永久开放ssh服务
# firewall-cmd --remove-service=ssh --permanent   # 永久关闭
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

3. 下载安装gitlab

这里有两种方式,可以下载并通过ftp传到服务器目录,也可以使用wget命令下载
https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/gitlab-ce-13.12.9-ce.0.el8.x86_64.rpm

4. 修改默认端口,并重启服务

提示vim操作:在命令模式或者末行模式下,输入 “/搜索关键字” 来查询,n为下一个,N为上一个

[root@linuxprobe /]# vim /etc/gitlab/gitlab.rb

##! **Override only if you use a reverse proxy**
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port
nginx['listen_port'] = 82   # 修改端口

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
##!
##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'http://192.168.11.169:82'   # 修改外部访问ip+端口

PS:在后面安装启动Tomcat时,发现tomcat所使用的8080端口被占用了,导致无法访问,这里有两种方式解决:
1.更换Tomcat端口
2.修改gitlab配置文件,更换gitlab中puma或unicorn进程端口

netstat -lpnut | gerp 8080     # 查看端口占用,发现是puma进程
[root@linuxprobe ~]# netstat -lpnut | grep puma
tcp        0      0 127.0.0.1:8089          0.0.0.0:*               LISTEN      2197/puma 5.1.1 (un 

systemctl status 2197        # 查看此进程信息(属于哪个服务),发现是gitlab的一个关键子进程
vim /etc/gitlab/gitlab.rb 	 # 在配置文件中搜索8080端口,发现puma和unicorn默认都是8080端口,并且默认使用puma(enable为true),
							 # 所以这里采用修改puma端口,并启用puma配置的方式,试验后可行

在这里插入图片描述

5. 将端口添加到防火墙

PS:linux系统一般都有防火墙,例如RHEL的iptables和firewalld,一般安装好软件、修改完配置文件,依然无法访问时,我们就要考虑是不是防火墙拦截了

firewall-cmd --zone=public --add-port=82/tcp --permanent     # 开放82端口
firewall-cmd --reload   # 重新加载防火墙

6. 控制台设置及上传项目

登陆 http://192.168.11.169:82 修改root的默认密码即可登陆;root可以创建新用户、空项目、修改默认语言,并将本地代码上传至gitlab,http方式上传步骤如下:

git基本配置,crlf为换行符配置,可以自行考虑是否添加

git config --global user.email “your email”
git config --global user.name “your name”
git config --global core.autocrlf true
git config --global core.safecrlf true

git init :代码目录右键git bash,然后初始化git
git remote add origin http://192.168.11.169:82/coderwhat/test.git :关联远程仓库(已在控制台创建空项目)
git add .
git commit -m ‘init’
git push -u origin master :将代码推送到gitlab端

7.常用命令

gitlab-ctl reconfigure	重新配置
gitlab-ctl restart	重启

二、Jenkins安装

1. 安装JDK环境

dnf install java-1.8.0-openjdk* -y

2. 下载并安装Jenkins

https://www.jenkins.io/zh/download/

rpm -ivh jenkins-2.190.3-1.1.noarch.rpm

3. 修改用户名及端口

[root@linuxprobe /]# vim /etc/sysconfig/jenkins 

## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
# Set to -1 to disable
#
JENKINS_PORT="8088"    # 端口

## Type:        string
## Default:     "jenkins"
## ServiceRestart: jenkins
#
# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="root"    # 用户名

4. 启动服务并添加开机自启

systemctl start jenkins

[root@linuxprobe /]# systemctl enable jenkins    # 此方式无法正常添加开机启动,按照提示如下输入即可
jenkins.service is not a native service, redirecting to systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable jenkins
[root@linuxprobe /]# /usr/lib/systemd/systemd-sysv-install enable jenkins

5. 防火墙开放配置

firewall-cmd --add-service=jenkins --permanent
firewall-cmd --zone=public --add-port=8088/tcp --permanent
firewall-cmd --reload

6. 初始化及修改插件源

这时我们就可以访问http://192.168.11.169:8088/来初始化jenkins,根据提示到系统对应路径下获取默认密码,然后新增用户(这里插件可以选择 自定义 - 无 来跳过自动下载安装插件,因为官网下载速度很慢)

修改国内源方法:
a. 点击 Manage Jenkins -> Manage Plugins -> Available 生成官方插件列表到本地 /var/lib/jenkins/updates/default.json文件
b. 然后运行命令:sed -i 's/http:\/\/updates.jenkinsci.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
c. 最后在 Manage Jenkins -> Manage Plugins -> Advanced 中修改 Update Site 为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
d. 重启jenkins :http://192.168.11.169:8088/restart

7.插件安装

a. 汉化 Localization: Chinese (Simplified)

在插件管理Available页面搜索 chinese,选择出现的汉化插件选择安装,最后重启(本次在实验中,虽然也报错了,但是重启后汉化依然成功)

安装时可能会出现 Trilead API failure 报错,只需下载对应版本的 trilead-api.hpi,并在 Manage Jenkins -> Manage Plugins -> Available 上传 hpi文件然后重启即可,同时安装git插件需要新版的Trilead API插件
https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/trilead-api/

b. 权限管理 Role-based Authorization Strategy

  1. 安装完成后,在 系统管理-> 配置全局安全 中,将授权策略修改为 Role-Based Strategy;
    然后在 系统管理 -> Manage and Assign Roles -> Manage Roles 中就可以看到三种类型的用户,创建三个月角色:
  • Global roles:角色全局的权限
  • Item roles:角色项目的权限
  • Node roles:角色节点的权限
    在这里插入图片描述
    读权限不给报错提示:
    在这里插入图片描述
  1. 在 系统管理 -> 管理用户 -> 新建用户中创建如下用户
    在这里插入图片描述
  2. 在 系统管理 -> Manage and Assign Roles -> Assign Roles 来分配角色,这是project用户只能查看 “web*” 项目,project1用户只能查看 “test*” 项目
    在这里插入图片描述
  3. 通过如上步骤设置能得到如下结果:
    project:BaseRead + web.*项目权限
    project1:BaseRead + test.*项目权限

c. 凭证管理 Credentials Binding

凭证是与第三方系统交互的认证信息,如常见的用户名密码、git仓库的ssh密钥等,安装此插件可以帮助我们与其他系统交互;
在 系统管理 -> Manage Credentials -> 全局-> 添加凭据 中总共有5种类型的凭证可供添加:

  • Username with password:用户名和密码
  • SSH Username with private key: 使用SSH用户名和密钥
  • Secret file:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的Secret file就会被删除。
  • Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token
  • Certificate:通过上传证书文件的方式

这里以集成gitlab为例,通过凭证来连接:

  1. Jenkins安装Git插件,RHEL8上安装Git工具
    在这里插入图片描述
dnf install git
git --version
  1. 在 系统管理 -> Manage Credentials -> 全局-> 添加凭据 下添加一个用户名密码凭证
    在这里插入图片描述
  2. 在刚才添加的 freestyle 项目中修改源码管理并选择已添加的用户凭证:
    在这里插入图片描述
  3. 这时我们可以使用点击立即构建,在 Build History 中就能看到 build 记录,同时在控制台能看到调用凭证的日志,同时在var/lib/jenkins/workspace/目录下也能看到jenkins拉取到的源码:
    在这里插入图片描述
[root@linuxprobe /]# cd var/lib/jenkins/workspace/web123
[root@linuxprobe web123]# ll
total 16
-rw-r--r-- 1 root root 2636 Aug 31 11:00 email.html
-rw-r--r-- 1 root root 1374 Aug 31 11:00 Jenkinsfile
-rw-r--r-- 1 root root  625 Aug 31 11:00 pom.xml
-rw-r--r-- 1 root root  579 Aug 31 11:00 sonar-project.properties
drwxr-xr-x 3 root root   18 Aug 31 11:00 src
  1. 然后我们再尝试使用ssh密钥方式
    首先是准备工作,需要生成密钥文件,同时需要搞清楚一个概念:Gitlab是存放公钥的,Jenkins等是存放私钥的,这样就可以通过ssh密钥登陆Gitlab服务器了;
[root@linuxprobe keygen]# ssh-keygen -t rsa      # 生成rsa ssh密钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.    # 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub.	# 公钥
The key fingerprint is:
SHA256:oDTDOwftEJY1qKod/cC6f9jlwn+5041FWsxqJSFeZMI root@linuxprobe.com
The key's randomart image is:
+---[RSA 3072]----+
|    o+o  ...o    |
|   ooo .  Eoo    |
|   .B o  . o +   |
|  .. O .  . . *  |
| . o+ o S    B   |
|. . +o  .   + .  |
|.. o * o   + +   |
|. o . * . + o .  |
|  .o.. o...o     |
+----[SHA256]-----+
  1. 将公钥添加到gitlab中,以root账户登陆, 头像 -> Preferences -> SSH密钥 ,将id_rsa.pub中的内容复制过来保存;将私钥添加到Jenkins凭证中,添加选下如下:
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
7. 最后就是测试了,我们把之前的test_model修改一下配置,Credentials选择使用ssh密钥的凭证;同样的,编译、日志、源码都与之前http方式结果一致,测试成功。
在这里插入图片描述

d.自动部署到容器 Deploy to container

Jenkins本身无法实现远程部署到Tomcat的功能,需要安装Deploy to container插件实现,搜索安装即可,这样在项目“构建后操作”中就能看到Deploy war/ear to a container:
在这里插入图片描述

三、maven安装及Jenkins集成

1. 解压缩放到自定义目录下

https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/

mkdir -p /opt/maven
tar xzvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven/
mv /opt/maven/apache-maven-3.6.3/* /opt/maven/

2. 配置环境变量并校验

vim /etc/profile

# 在文件的末尾添加环境变量
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export MAVEN_HOME=/opt/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

mvn -v # 查看maven版本并校验

3. 修改本地仓库位置、配置镜像地址

https://developer.aliyun.com/mirror/maven?spm=a2c6h.13651102.0.0.3e221b11gTmVMo

mkdir /opt/mvnrepo
vim /opt/maven/conf/settings.xml 

# 修改本地仓库和配置镜像
<localRepository>/opt/mvnrepo/</localRepository>

<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

4. Jenkins集成maven

在Jenkins中集成maven主要有以下步骤:

  • 在 系统管理 -> 全局工具配置 中配置JDK和Maven;
    在这里插入图片描述
  • 在 配置管理 -> 系统配置 -> 全局属性 -> 环境变量 中添加 JAVA_HOME、MAVEN_HOME、PATH+EXTRA;
    在这里插入图片描述
  • 校验:增加maven打包命令执行打包,看日志是否成功打包;
    在这里插入图片描述

四、Tomcat

1. 解压缩放到自定义目录下

https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.61/bin/

mkdir -p /opt/tomcat
tar xzvf apache-tomcat-8.5.61.tar.gz -C /opt/tomcat/
mv apache-tomcat-8.5.61/* /opt/tomcat/
rm -rf apache-tomcat-8.5.61/

如果8080端口默认没有开放,就在防火墙配置一下
firewall-cmd --zone=public --add-port=8088/tcp --permanent
firewall-cmd --reload

启动直接在此目录下运行startup.sh即可

cd /opt/tomcat/bin
bash startup.sh

bash shutdown.sh

2.配置Tomcat角色权限(中间件)

访问:http://192.168.11.169:8080/ 后,点击 Managing Tomcat 框中的manager webapp,会出现403 拒绝访问提示,这是因为还没有配置Tomcat用户权限,无法进行管理,包括后续Jenkins也是需要用到;

/opt/tomcat/conf/tomcat-users.xml文件对应脚标添加如下,用户的用户名和密码均为 tomcat:

<tomcat-users>
	<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"/>
</tomcat-users>

同时需要注释掉/opt/tomcat/webapps/manager/META-INF/context.xml中的下列内容:

<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

最后重启,点击manager webapp输入用户名和密码,即可进入管理页面
在这里插入图片描述

五、Jenkins 拉取、打包、部署Maven项目

这里会基于上述的 git拉取代码、maven打包项目、安装插件使用tomcat角色权限自动部署 来进行实践,根据自动构建项目的常见类型可分为三种:

  • 自由风格软件项目(FreeStyle Project):就是一个free,但也会少很多定制功能
  • Maven项目(Maven Project):
  • 流水线项目(Pipeline Project):

5.1 freestyle project

在前期环境准备好的基础上,需要做一下配置操作:

  1. 新建项目,配置好git;
  2. 增加 构建步骤 -> 执行shell 添加打包命令及日志
echo "开始编译和打包"
mvn clean package
echo "编译和打包结束"
  1. 在 系统管理 -> 管理凭据 添加tomcat用户认证,认证信息在 4.2 章节中配置;然后在构建后步骤增加tomcat的配置
    在这里插入图片描述
    在这里插入图片描述
  2. 根据项目日志即可尝试访问部署好的地址:
    后面跟的是war包名:http://192.168.11.169:8080/web_demo-1.0-SNAPSHOT/
    在这里插入图片描述

PS:这里有一个小插曲,前面尝试编译时一直报错,这里截取关键日志如下:

[DeployPublisher][INFO] Deploying /var/lib/jenkins/workspace/freestype_demo/target/web_demo-1.0-SNAPSHOT.war to container Tomcat 8.x Remote with context null
ERROR: Build step failed with exception
org.codehaus.cargo.container.ContainerException: Failed to redeploy [/var/lib/jenkins/workspace/freestype_demo/target/web_demo-1.0-SNAPSHOT.war]
...
Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: The username you provided is not allowed to use the text-based Tomcat Manager (error 403)
...
Caused by: java.io.IOException: Server returned HTTP response code: 403 for URL: http://192.168.11.169:8080/manager/text/list
...

从日志中可以看出,提示的是用户权限问题,仔细检查/opt/tomcat/conf/tomcat-users.xml后发现,复制时漏掉了一个符号,修改重启服务器才恢复
在这里插入图片描述

5.2 maven project

  1. 安装Maven Integration插件,这样便能在创建项目时选择“构建一个maven项目”了(安装插件是如果出现异常,有可能是网络问题,需要开梯子才能顺利安装,这里就涉及到更换了清华源为什么没有生效的问题了,可以研究一下):
    在这里插入图片描述

  2. 第1,3,4步骤与freestyle project是一样的,唯一不同的便是构建项目时配置变为:
    在这里插入图片描述

5.3 Pipeline流水线项目构建

流水线类型的优点,是可以自己随意控制整个流程阶段,编排细化任务的流程,并且可视化。支持的语法类型有两种:

  • 声明式(Declarative-Pipeline):
  • 脚本式(Scripted-Pipeline):

安装Pipeline插件,这样便能在创建项目时选择“流水线”类型了

5.3.1 声明式 Declarative-Pipeline

在这里插入图片描述
按照下方是示例编写声明式流水线,这样在编译时我们就能在项目主界面看到阶段视图了,能清楚的看到每一个stage的执行情况
在这里插入图片描述
在这里插入图片描述

5.3.2 脚本式 Scripted-Pipeline

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mitays

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值