Jenkins创建Mvn风格项目
jenkins的构建风格有几种
1)Freestyle自由风格
2)Maven风格(构建java代码)
3)pipeline流水线风格
Maven介绍
maven是编译构建java代码的工具
Maven是一个项目管理和综合工具。Maven提供给开发人员构建一个完整的生命周期框架。
开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期。
Apache的开源项目主要服务于JAVA平台的构建、依赖管理、项目管理。
Project Object Model,项目对象模型。通过xml格式保存的pom.xml文件。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。
该文件是由开发维护,我们运维人员可以不用去关心。
C写的代码:nginx,MySQL
- make
- cmake
- gmake
Java代码:
- maven
- ant
java代码上线流程
# 1.java开发将代码传到gitlab
# 2.运维将java代码从gitlab中拉下来(自动化:Jenkins拉取)
# 3.代码质量检测(审核等...)
# 4.代码编译
- maven
- ant
# 5.发布代码
- 灰度
- 蓝绿
- 滚动
mvn项目创建前准备
gitlab创建Java项目
[root@gitlab hello-world-war]# git remote remove origin
[root@gitlab hello-world-war]# git remote add origin git@gitlab.driverzeng.com:root/hello-word.git
[root@gitlab hello-world-war]# git add .
[root@gitlab hello-world-war]# git commit -m 'v5.0'
[root@gitlab hello-world-war]# git tag -a v5.0 -m v5.0
[root@gitlab hello-world-war]# git push --all
[root@gitlab hello-world-war]# git push --tag
在gitlab上安装服务
[root@gitlab hello-world-war]# yum install -y maven
# 修改maven配置文件
[root@gitlab hello-world-war]# vim /etc/maven/settings.xml
159 <mirror>
160 <id>aliyunmaven</id>
161 <mirrorOf>*</mirrorOf>
162 <name>阿里云公共仓库</name>
163 <url>https://maven.aliyun.com/repository/public</url>
164 </mirror>
# 编译(mvn clean && mvn package)
[root@gitlab hello-world-war]# #mvn clean && mvn package
[root@gitlab hello-world-war]# mvn clean package
在web上安装服务
[root@web01 ~]# yum install -y tomcat
# 启动服务
[root@web01 ~]# systemctl start tomcat
使用jenkins创建mvn风格项目
# 安装maven
[root@jenkins plugins]# yum install -y maven
# 修改maven配置文件
[root@gitlab hello-world-war]# vim /etc/maven/settings.xml
159 <mirror>
160 <id>aliyunmaven</id>
161 <mirrorOf>*</mirrorOf>
162 <name>阿里云公共仓库</name>
163 <url>https://maven.aliyun.com/repository/public</url>
164 </mirror>
## 创建脚本
# 版本:
version=$(awk -F '[<> ]' 'NR==6{print $3}' ${WORKSPACE}/pom.xml)
his='/hello_version'
scp ${WORKSPACE}/target/hello-world-war-${version}.war root@172.16.1.7:${his}
ssh root@172.16.1.7 "unzip ${his}/hello-world-war-${version}.war -d ${his}/hello-world-war-${version}"
ssh root@172.16.1.7 "rm -f /usr/share/tomcat/webapps/ROOT"
ssh root@172.16.1.7 "ln -s ${his}/hello-world-war-${version} /usr/share/tomcat/webapps/ROOT"
ssh root@172.16.1.7 "systemctl restart tomcat"
操作步骤
[root@gitlab hello-world-war]# vim pom.xml
[root@gitlab hello-world-war]# vim src/main/webapp/index.jsp
[root@gitlab hello-world-war]# git add .
[root@gitlab hello-world-war]# git commit -m '8.0'
[root@gitlab hello-world-war]# git tag -a '8.0' -m '8.0'
[root@gitlab hello-world-war]# git push --all
[root@gitlab hello-world-war]# git push --tag
jenkins变量
\1. GIT_COMMIT 当前版本提交产生的哈希唯一值
\2. GIT_PREVIOUS_SUCCESSFUL_COMMIT 已经提交过的版本的哈希唯一值
使用以上两个值做比较,如果已提交则退出,如果没有提交过则继续执行构建,更改脚本做判断
if [ "$deploy_env" == "deploy" ];then
if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
echo "构建失败该 $git_version 版本号已部署"
else
main
fi
elif [ "$deploy_env" == "rollback" ];then
ln_html
fi
使用钩子创建mvn风格项目(jenkins前半部分除去开启钩子部分可用于参数化构建)
# URL
http://10.0.0.92:8080/project/hello-world-maven-webhock
# token
f949036aa36c5169bf65fbb09803f6d0
# 版本:
version=$(awk -F '[<> ]' 'NR==6{print $3}' ${WORKSPACE}/pom.xml)
his='/hello_version'
ssh_user=root
ssh_port=22
dev=7
test=8
prod=9
for num in ${!env};do
scp ${WORKSPACE}/target/hello-world-war-${version}.war ${ssh_user}@172.16.1.$num:${his}
ssh -o StrictHostKeyChecking=no -o BatchMode=yes ${ssh_user}@172.16.1.$num "unzip -n ${his}/hello-world-war-${version}.war -d ${his}/hello-world-war-${version}"
ssh ${ssh_user}@172.16.1.$num "rm -f /usr/share/tomcat/webapps/ROOT"
ssh ${ssh_user}@172.16.1.$num "ln -s ${his}/hello-world-war-${version} /usr/share/tomcat/webapps/ROOT"
ssh ${ssh_user}@172.16.1.$num "systemctl restart tomcat"
done
Gitlab上进行钩子配置
使用freestyle发布java代码
其余步骤与freestyle自由风格中的参数化构建无异只需要修改脚本来适用于java代码即可,代码如下
# 版本:
version=$(awk -F '[<> ]' 'NR==6{print $3}' ${WORKSPACE}/pom.xml)
his='/hello_version'
ssh_user=root
ssh_port=22
dev=7
test=8
prod=9
cd ${WORKSPACE} && mvn clean package
for num in ${!env};do
scp ${WORKSPACE}/target/hello-world-war-${version}.war ${ssh_user}@172.16.1.$num:${his}
ssh -o StrictHostKeyChecking=no -o BatchMode=yes ${ssh_user}@172.16.1.$num "unzip -n ${his}/hello-world-war-${version}.war -d ${his}/hello-world-war-${version}"
ssh ${ssh_user}@172.16.1.$num "rm -f /usr/share/tomcat/webapps/ROOT"
ssh ${ssh_user}@172.16.1.$num "ln -s ${his}/hello-world-war-${version} /usr/share/tomcat/webapps/ROOT"
ssh ${ssh_user}@172.16.1.$num "systemctl restart tomcat"
done