Jenkins部署GitLab项目

Jenkins部署GitLab项目

前言:这里由于我第三次部署jenkins的时候,遇到了权限不足的各种问题,所以重新整理的jenkins部署gitlab项目的文档。这里我的环境为CentOS7,jenkins版本为当前最新的2.348

1.CentOs7安装maven

因为这里用的java项目,所以需要用到maven管理器,下载比较容易,但是后面需要配置到jenkins上。

#下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

#解压
tar -xf apache-maven-3.6.3-bin.tar.gz

#导入环境变量(PATH:后面是你maven的安装位置,自行更改)
export PATH=$PATH:/home/xxx/maven-3.6.3/bin

#加载变量
source /etc/profile

#验证变量加载是否成功
which mvn

Jenkins部署GitLab项目_第1张图片
在这里插入图片描述

2.CentOs7安装Git

因为jenkins的部署涉及到要去gitlab仓库获取项目,所以需要安装git。

yum install git
git --version

在这里插入图片描述

3.jenkins安装必备插件

jenkins打包自动化部署git上的maven项目,需要这些插件:Maven IntegrationVersion、GitLab、GitLab API Plugin(由于jenkins版本不同,叫法会略有不同,大体上是一样的)

在这里搜索并勾选,然后点击安装不重启,装完之后。输入restart手动重启。(地址栏直接输入即可,ip地址和端口要根据你的配置更改https://192.168.1.88:8089/restart)
Jenkins部署GitLab项目_第2张图片
Jenkins部署GitLab项目_第3张图片

4.jenkins关联相关组件

maven、git、jdk都需要根据实际环境进行配置
Jenkins部署GitLab项目_第4张图片
Jenkins部署GitLab项目_第5张图片
Jenkins部署GitLab项目_第6张图片
Jenkins部署GitLab项目_第7张图片
Jenkins部署GitLab项目_第8张图片

5.创建jenkins项目

前面都是jenkins的全局配置,接下来是针对每个项目的单独配置。

5.1.新建项目

Jenkins部署GitLab项目_第9张图片
Jenkins部署GitLab项目_第10张图片

5.2.General

构建记录保持7天,最多保持5次构建
Jenkins部署GitLab项目_第11张图片

5.3.源码管理

选择git,Repositories表示云项目的地址,credentials是表示访问项目的凭证,点击添加输入正确的账户密码,然后这里就可以进行选择。这里采用的是账户密码登陆,不讨论私钥登陆。
Jenkins部署GitLab项目_第12张图片
在这里要新增一个拷贝行为,拷贝的时间默认是10分钟,超过了直接报错,所以这里直接改成100分钟。
Jenkins部署GitLab项目_第13张图片
Jenkins部署GitLab项目_第14张图片

5.4.Build

这个用于大项目里面有多个子项目,只打包xxx项目,其他没必要的就不打包了。

#表示有多个子项目时只发布xxx
clean install -pl xxx -am -amd -Pdev -Dmaven.test.skip=true

5.4.Post Steps

这个shell是个人写得一个打包发布新版本的流程,仅供参考。
jenkins拉取完git代码后会运行此脚本。Jenkins部署GitLab项目_第15张图片

Jenkins部署GitLab项目_第16张图片

#!/bin/bash
tomcat_home=/mnt/tomcat/apache-tomcat-8.5.69
cd $tomcat_home/bin/
./publish.sh

6.publish脚本

#!/bin/sh

#tomcat目录
tomcat_home=/tomcat/apache-tomcat-9.0.22

#项目名字
project_name=ROOT

#jenkins项目路径
jenkins_project_path=/var/lib/jenkins/workspace/Root/target/Root.war

#配置文件:application存放路径
bak_home=$tomcat_home/bak

#当前时间
now=$(date +"%Y%m%d%H%M%S")

#关闭tomcat并杀死进程
$tomcat_home/bin/shutdown.sh
pid=`ps -ef | grep apache-tomcat-9.0.22 | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
   kill -9 $pid
fi
#防止jenkins构建完后杀死tomcat进程
export BUILD_ID=dontKillMe
sleep 5
echo "关闭tomcat"

#如果配置文件备份目录不存在,创建备份
if [ ! -d $bak_home ];then
   mkdir -p $bak_home
fi
echo "创建配置文件备份目录"

#备份项目旧版本并删除
cd $tomcat_home/webapps
mv  $project_name  $bak_home/$project_name$now
rm -rf $project_name
echo "备份项目旧版本并删除"

#复制jenkins打包好的目录到tomcat
cp -rf $jenkins_project_path  $project_name".war"
echo "把新项目复制过来"

#解压war包,并替换配置文件
unzip $project_name".war" -d $project_name
cp -rf $tomcat_home/bak/application.yml $tomcat_home/webapps/$project_name/WEB-INF/classes/application.yml
echo "覆盖配置文件"

#删除war包,避免配置文件更改导致版本不一致
rm -rf $project_name".war"

#启动项目
$tomcat_home/bin/startup.sh
echo "启动tomcat"

踩坑

a.权限不足

Jenkins部署GitLab项目_第17张图片

问题描述:在之前的版本(2.331)中只要修改即可,但是在这个版本(2.348)即使在配置文件里把jenkins修改成root依旧权限不足,连cd命令都无法正常使用,在执行shell脚本那里修改成whoami进行排查,发现依旧是jenkins用户。
在这里插入图片描述
问题解决:高版本的jenkins修改配置文件已经不再是/etc/sysconfig/jenkins,改成了/usr/lib/systemd/system/jenkins.service

#修改配置文件
/usr/lib/systemd/system/jenkins.service

#刷新配置
systemctl daemon-reload

#重启jenkins
service jenkins restart

#查看jenkins状态
ps -ef | grep jenkins

Jenkins部署GitLab项目_第18张图片
在这里插入图片描述

b.进程查杀

jenkins在构建成功后通过processTreeKiller杀掉了所有子进程,而且这是Jenkins的默认行为,这里采用增加禁止查杀来避免。

export BUILD_ID=dontKillMe

c.Excute shell

这里的脚本要注意,不要直接运行,会有细微差别。

#错误做法
/mnt/guns-rest/publish.sh

#正确做法
#!/bin/bash
cd /mnt/guns-rest/
./publish.sh

Jenkins部署GitLab项目_第19张图片

你可能感兴趣的:(服务器运维,jenkins,git,maven)