前言:这里由于我第三次部署jenkins的时候,遇到了权限不足的各种问题,所以重新整理的jenkins部署gitlab项目的文档。这里我的环境为CentOS7,jenkins版本为当前最新的2.348
因为这里用的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仓库获取项目,所以需要安装git。
yum install git
git --version
jenkins打包自动化部署git上的maven项目,需要这些插件:Maven IntegrationVersion、GitLab、GitLab API Plugin(由于jenkins版本不同,叫法会略有不同,大体上是一样的)
在这里搜索并勾选,然后点击安装不重启,装完之后。输入restart手动重启。(地址栏直接输入即可,ip地址和端口要根据你的配置更改https://192.168.1.88:8089/restart)
前面都是jenkins的全局配置,接下来是针对每个项目的单独配置。
选择git,Repositories表示云项目的地址,credentials是表示访问项目的凭证,点击添加输入正确的账户密码,然后这里就可以进行选择。这里采用的是账户密码登陆,不讨论私钥登陆。
在这里要新增一个拷贝行为,拷贝的时间默认是10分钟,超过了直接报错,所以这里直接改成100分钟。
这个用于大项目里面有多个子项目,只打包xxx项目,其他没必要的就不打包了。
#表示有多个子项目时只发布xxx
clean install -pl xxx -am -amd -Pdev -Dmaven.test.skip=true
这个shell是个人写得一个打包发布新版本的流程,仅供参考。
jenkins拉取完git代码后会运行此脚本。
#!/bin/bash
tomcat_home=/mnt/tomcat/apache-tomcat-8.5.69
cd $tomcat_home/bin/
./publish.sh
#!/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"
问题描述:在之前的版本(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在构建成功后通过processTreeKiller杀掉了所有子进程,而且这是Jenkins的默认行为,这里采用增加禁止查杀来避免。
export BUILD_ID=dontKillMe
这里的脚本要注意,不要直接运行,会有细微差别。
#错误做法
/mnt/guns-rest/publish.sh
#正确做法
#!/bin/bash
cd /mnt/guns-rest/
./publish.sh