Jenkins+gitlab+tomcat参数化部署
1、实验准备三台服务器:
10.0.0.128 🡪 Jenkins
10.0.0.129 🡪 gitlab
10.0.0.130 🡪 tomcat
保证每一台服务器防火墙、selinux关闭
Base、epel仓库可用,网络畅通
2、jenkins服务部署(10.0.0.128):
本次实验通过jenkins的wa包进行部署:
将实验用的包上传到服务器:
Tomcat、jdk、maven、jenkins
解压:
> tar xf jdk-8u211-linux-x64.tar.gz -C /usr/local/
> tar xf apache-maven-3.8.1-bin.tar.gz -C /usr/local/
>tar xf tar xf apache-maven-3.8.1-bin.tar.gz -C /usr/local/
改名,方便后续操作:
>mv /usr/local/jdk1.8.0_211 /usr/local/java
>mv /usr/local/apache-tomcat-8.5.69 /usr/local/tomcat
>mv /usr/local/apache-maven-3.8.1 /usr/local/maven
编辑环境变量:
>vim /etc/profile
在末行添加以下内容:
export JAVA_HOME=/usr/local/java
export MAVEN_HOME=/usr/local/maven
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin:$PATH
保存并退出
>source /etc/profile
测试一下:
>java -version
>mvn -v
部署jenkins服务:
>rm -rf /usr/local/tomcat/webapps/
>cp Jenkins.war /usr/local/tomcat/webapps/
启动服务:
>cd /usr/local/tomcat
> ./bin/startup.sh ; tail -f logs/catalina.out
启动没有报错就可以进行访问测试了
浏览器访问:
10.0.0.128:8080/Jenkins

回到服务器,进行密码的查看:
>cat /root/.jenkins/secrets/initialAdminPassword





安装插件:
Extended Choice Parameter
Git Parameter
GIT server
SSH
Public Over SSH
GitLab
Maven Integration
Maven Release Plug-in



此选项代表下载后下次启动时生效,有些插件必须重启才会生效,所以我们在下载时勾选下载完成后自动重启。
注意,快下载完的时候,页面将不会提示也不会刷新,不是卡了,而是这时候的jenkins服务器已经执行了‘下载后重启‘的指令,我们手动刷新一下即可
这个时候就可以开始我们的设置了。


回到jenkins服务器上,制作密钥对:
>ssh-keygen
>cat .ssh/id_rsa
将私钥内容复制下来
配置ssh:
注意:key:指的是jenkins服务器用哪个用户去远程连接程序服务器就是那个用户的私钥。
随后添加SSH Servers也就是tomcat服务器:
在下方找到ssh-server添加一个远程ssh-server:
name:app(后端标识)
hostname:10.0.0.130
username:root(远程服务器的用户,与后端服务器做免密登陆的用户)
下面一栏为指定用户的家目录:/root
在jenkins服务器上执行ssh-copy-id 10.0.0.130将公钥发送到tomcat服务器上
后点击test configuration测试是否可以连接到后端(如果多台可以继续新增)
配置结束后点击保存
接着配置jdk、maven命令、全局配置
找到jdk安装取消自动安装
别名:解压后jdk包的名称,如果修改填写修改后的内容
JAVA_HOME:目录所在路径
找到maven安装,取消自动安装:
name:maven解压后的目录名称
MAVEN_NAME:maven解压后的绝对路径




随后配置maven,多台jdk或maven继续新增即可


随后点击保存
*Gitlab服务器部署(10.0.0.129):
开启邮件服务:
> systemctl start postfix
> systemctl enable postfix
安装Gitlab依赖包:
>yum install -y curl openssh-server openssh-clients postfix cronie policycoreutils-python
添加Gitlab安装源(根据个人需求配置源)
阿里源:
>vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
Repo_gpgcheck=0
Enabled=1
gpgcheck=0
保存退出
清华源:
>vim /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
清华ee源:
>vim /etc/yum.repos.d/gitlab-ee.repo
[gitlab-ee]
name=Gitlab EE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el$releasever/
gpgcheck=0
enabled=1
安装Gitlab(根据需求选择ce/ee)
>yum -y install gitlab-ce (自动安装最新版)
下载完毕后对gitlab进行配置:
>vim /etc/gitlab/gitlab.rb
1.将原来的修改为:
external_url ‘http://10.0.0.129‘
2.设置地区
gitlab_rails[‘time_zone’] = ‘Asia/Shanghai’

将数据路径的注释去掉,可以更改

开启ssh服务:

保存退出
初始化Gitlab(首次加载,需要很长时间):
> gitlab-ctl reconfigure
启动gitlab-ctl服务:
>gitlab-ctl start
随后进行访问测试,浏览器访问服务器ip即可
浏览器地址栏输入10.0.0.129进行访问
想登录并使用需要先进行用户与密码的设置:
> gitlab-rails console -e production (等待一会进入交互页面)
执行如下命令, 修改root密码为你想要的密码, 无需重启即可完成设置
u=User.where(id:1).first # u定义为root用户
u.password=’你的密码’ # 设置root密码, 注意需要符合密码强度
u.password_confirmation=’你的密码’ # 确认当前密码
u.save! # 保存操作
quit # 退出交互界面
如果需要手工修改nginx的port ,可以在gitlab.rb中设置 nginx[‘listen_port’] = 8000 ,然后再次 gitlab-ctl reconfigure即可
登录 gitlab 如下所示(首次登陆设置 root 密码):
Gitlab设置中文:

进行仓库的部署:
首先需要创建一个群组,可以是私有也可以是公开,私有需要配置密钥公开可以直接用,这里选择公开:















随后进行数据的推送,找一台服务器下载git后,clone下我们的仓库添加项目后上传即可。注意:进行拉取和推送仓库内容的服务器,要提交对应用户的公钥到gitlab上,添加jenkins的公钥是为了拉取仓库。
回到gitlab主页

Tomcat服务器部署(10.0.0.130):
将环境需要的包上传到服务器:
Jdk、tomcat
>mkdir -p /data/application
>tar xf jdk-8u191-linux-x64.tar.gz -C /data/application/
>tar xf apache-tomcat-8.5.69.tar.gz -C /usr/local
>mv /data/application/apache-tomcat-8.5.69 /data/application/tomcat
>mv /usr/local/jdk1.8.0_191 /usr/local/java
设置环境变量:
>vim /etc/profile
在末行后添加:
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/application/tomcat
保存退出
测试:
>java -version
删除tomcat默认发布目录下的内容:
>rm -rf /data/application/tomcat/webapps/*
>ls /data/application/tomcat/webapps/
创建目录以及脚本:
>mkdir /opt/script
>vim /opt/script/app-jenkins.sh
#!/usr/bin/bash
#本脚本适用于jenkins持续集成,实现备份war包到代码更新上线!使用时请注意全局变量。
#================
#Defining variables
export JAVA_HOME=/usr/local/java
webapp_path=”/data/application/tomcat/webapps”
tomcat_run=”/data/application/tomcat/bin”
updata_path=”/data/update/date +%F-%T“
backup_path=”/data/backup/date +%F-%T“
tomcat_pid=ps -ef | grep tomcat | grep -v grep | awk '{print $2}'
files_dir=”easy-springmvc-maven”
files=”easy-springmvc-maven.war”
job_path=”/root/upload”
Preparation environment
echo “Creating related directory”
mkdir -p $updata_path
mkdir -p $backup_path
echo “Move the uploaded war package to the update 2directory”
mv $job_path/$files $updata_path
echo “=========================================================”
cd /opt
echo “Backing up java project”
if [ -f $webapp_path/$files ];then
tar czf $backup_path/date +%F-%H.tar.gz $webapp_path
if [ $? -ne 0 ];then
echo “打包失败,自动退出”
exit 1
else
echo “Checking if tomcat is started”
if [ -n “$tomcat_pid” ];then
kill -9 $tomcat_pid
if [ $? -ne 0 ];then
echo “tomcat关闭失败,将会自动退出”
exit 2
fi
fi
cd $webapp_path
rm -rf $files && rm -rf $files_dir
cp $updata_path/$files $webapp_path
cd /opt
$tomcat_run/startup.sh
sleep 5
echo “显示tomcat的pid”
echo “ps -ef | grep tomcat | grep -v grep | awk '{print $2}'“
echo “tomcat startup”
echo “请手动查看tomcat日志。脚本将会自动退出”
fi
else
echo “Checking if tomcat is started”
if [ -n “$tomcat_pid” ];then
kill -9 $tomcat_pid
if [ $? -ne 0 ];then
echo “tomcat关闭失败,将会自动退出”
exit 2
fi
fi
cp $updata_path/$files $webapp_path
$tomcat_run/startup.sh
sleep 5
echo “显示tomcat的pid”
echo “ps -ef | grep tomcat | grep -v grep | awk '{print $2}'“
echo “tomcat startup”
echo “请手动查看tomcat日志。脚本将会自动退出”
fi
保存退出
>chmod 777 /opt/script/app-jenkins.sh
回到jenkins页面开始构建任务:
构建发布任务:
1、点击新建任务
选择构建一个maven项目

2、在策略栏选择 丢弃旧的构建
保持构建的天数(第一栏):1(视情况而定)
保持构建的最大个数(第二栏):5(视情况而定)
设置参数化构建过程:


设置credentials:


3、随后进行源码管理设置:
第一栏url填写我们github的仓库地址
Credentials选择我们刚添加的即可
下面的分支选择${TAG}
其他默认即可
4、构建触发器:
选择Build whenever a SNAPSHOT dependency is built即可
5、构建环境:
选择Send files or execute commands over SSH after the build runs
Name为你设置的SSH sever的名称:tomcat
source files:target/*.war
Remove prefix:target
Remote directory:upload/
Exec command:/opt/script/app-jenkins.sh
设置Build:
Root POM:pom.xml
Goals and options:clean package
开启邮箱:
开始构建:

回到jenkins服务器:
因为jenkins服务器在gitlab上提交过公钥
拉取上传不需要再进行免密操作
使用别的服务器也可以,不过需要向gitlab提交公钥
>yum -y install git #下载git命令
将要上传的项目包上传到服务器内
将项目包的内容复制并覆盖到cloud中
Cd到git工作目录中去:
给自己的git配置身份:
>git config —global user.name “zs”
>git config —global user.email 1277848836@qq.com
进行项目的推送:
回到gitlab的web界面查看新增的tag:
再次回到jenkins进行项目的构建:


可以再去建立一个tag,试验一下在多个tag内回退切换
