jenkins的构建风格有几种?

1)freestyle自由风格
2)maven风格(构建Java代码)
3)pipeline流水线风格

Maven 介绍

maven是编译构建Java代码的工具
Maven是一个项目管理和综合工具。Maven提供给开发人员构建一个完整的生命周期框架。
开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期。
Apache的开源项目主要服务于JAVA平台的构建、依赖管理、项目管理。
Project Object Model,项目对象模型。通过xml格式保存的pom.xml文件。该文件用于管理:源代码、
配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系
等等。该文件是由开发维护,我们运维人员可以不用去关心。

Java代码编译:

  • maven
  • ant

C写的代码编译:nginx、MySQL

  • make
  • cmake
  • gmake

java代码上线流程

# 1.java开发将代码传到gitlab
# 2.运维将java代码从gitlab中拉下来(自动化:Jenkins拉取)
# 3.代码质量检测(审核等...)
# 4.代码编译
 - maven
 - ant
# 5.发布代码
 - 灰度
 - 蓝绿
 - 滚动

gitlab创建Java项目

image-20230828180616034

image-20230828180633259

[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'
[master 3a22dda] v5.0
1 file changed, 1 insertion(+), 1 deletion(-)
[root@gitlab hello-world-war]# git tag -a v5.0 -m v5.0
[root@gitlab hello-world-war]# git push --all
Counting objects: 43, done.
Compressing objects: 100% (28/28), done.
Writing objects: 100% (43/43), 4.85 KiB | 0 bytes/s, done.
Total 43 (delta 10), reused 0 (delta 0)
To git@gitlab.driverzeng.com:root/hello-word.git
* [new branch] master -> master
[root@gitlab hello-world-war]# git push --tag
Counting objects: 5, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 647 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)

安装tomcat

#下载安装
[root@web01 conf.d]# yum install -y tomcat
#准备java代码
[root@web01 ROOT]# ll
total 4
-rw-r--r-- 1 tomcat tomcat 210 Oct 15  2019 index.jsp
drwxr-xr-x 3 tomcat tomcat  38 Aug 28 20:57 META-INF
drwxr-xr-x 3 tomcat tomcat  36 Aug 28 20:57 WEB-INF
[root@web01 ROOT]# pwd
/usr/share/tomcat/webapps/ROOT
#浏览器访问
10.0.0.7:8080

image-20230828210056186

安装maven

[root@gitlab hello-world-war]# yum install -y maven
# 修改maven配置文件
vim /etc/maven/settings.xml
<mirror>
 <id>aliyunmaven</id>
 <mirrorOf>*</mirrorOf>
 <name>阿里云公共仓库</name>
 <url>https://maven.aliyun.com/repository/public</url>
</mirror>
# 编译  //一定要进入到war包目录编译
[root@gitlab hello-world-war]# mvn clean package

image-20230828180920174

使用jenkins构建maven风格项目

配置JDK和maven变量路径

image-20230828181414186

image-20230828181429095

image-20230828181602746

#安装完maven后,使用mvn --version可查看HOME路径

image-20230828181502643

image-20230828181521156

image-20230828181043241

image-20230828181100343

# 在jenkins上使用maven风格首先要再jenkins服务器上安装maven  //同时配置文件如上修改即可,无需编译
[root@jenkins ~]# yum install -y maven

image-20230828181247666

image-20230828221319663

image-20230828221430926

java自由风格构建脚本

#!/bin/bash
#-----------------------------变量定义-------------------
#站点目录
dir=hello

#测试:user ip
test_user=root
test_ip=172.16.1.7
#开发:user ip
dev_user=root
dev_ip=172.16.1.8
#生产:user ip
pord_user=root
pord_ip=172.16.1.9

#-----------------------------函数定义---------------------
pull(){
#进入workspacemul 
cd $WORKSPACE && mvn clean package
#打包代码
tar zcf ${GIT_COMMIT}.tar.gz ./*
#推送至下拉机器
scp ${GIT_COMMIT}.tar.gz $1:/${dir}a
rm -rf ${GIT_COMMIT}.tar.gz
#远端解压
ssh $1 "cd /${dir} && tar xf ${GIT_COMMIT}.tar.gz"
sleep 5
ssh $1 "rm -rf /${dir}/${GIT_COMMIT}.tar.gz"

}

#-----------------------------代码运行----------------------
if [[ $env == test ]]; then
    pull ${test_user}@${test_ip}
elif [[ $env == dev ]]; then
    pull ${dev_user}@${dev_ip}
elif [[ $env == pord ]]; then
    pull ${pord_user}@${pord_ip}
else
    exit
fi

java maven风格构建脚本

#!/bin/bash
#-----------------------------变量定义-------------------
#版本号
version=$(awk -F '[<> ]' 'NR==6{print $3}' ${WORKSPACE}/pom.xml)
#历史版本目录
his='/hello-version'
#测试:user ip
test_user=root
test_ip=172.16.1.7
#开发:user ip
dev_user=root
dev_ip=172.16.1.8
#生产:user ip
pord_user=root
pord_ip=172.16.1.9

#-----------------------------函数定义---------------------
pull(){
#进入workspacemul 推送至下拉机器
scp ${WORKSPACE}/target/hello-world-war-${version}.war $1:${his}
#远端解压
ssh -o StrictHostKeyChecking=no -o BatchMode=yes $1 "unzip -n ${his}/hello-world-war-${version}.war -d ${his}/hello-world-war-${version}"
sleep 5
ssh $1 "rm -f /usr/share/tomcat/webapps/ROOT"
ssh $1 "ln -s ${his}/hello-world-war-${version} /usr/share/tomcat/webapps/ROOT"
ssh $1  "systemctl restart tomcat"

}

#-----------------------------代码运行----------------------
if [[ $env == test ]]; then
    pull ${test_user}@${test_ip}
elif [[ $env == dev ]]; then
    pull ${dev_user}@${dev_ip}
elif [[ $env == pord ]]; then
    pull ${pord_user}@${pord_ip}
else
    exit
fi