热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

[代码上线]maven

第1章准备Maven环境注意:下列操作都是在jenkins主机部署1.安装maventarzxfapache-maven-3.3.9-bin.tar.gz-Coptcdoptln-

第1章 准备Maven环境

注意:下列操作都是在jenkins主机部署


1.安装maven

tar zxf apache-maven-3.3.9-bin.tar.gz -C /opt/
cd /opt/
ln -s apache-maven-3.3.9 maven

2.设置maven国内源

在mirror标签下添加mirror区块

vim /opt/maven/conf/settings.xml
<mirror>
<id>nexus-aliyunid>
<mirrorOf>*mirrorOf>
<name>Nexus aliyunname>
<url>http://maven.aliyun.com/nexus/content/groups/publicurl>
mirror>

3.配置环境变量

echo 'export PATH=$PATH:/opt/maven/bin' >> /etc/profile
source /etc/profile
mvn -v

4.使用mvn打包测试项目

tar zxf hello-world-war.tar.gz
cd hello-world-war/
mvn package

5.检查是否生成war包

ll target

第2章 上传代码到gitlab

以下操作在gitlab服务器进行:


1.在gitlab中创建项目


2.在gitlab主机提交测试项目

tar zxf hello-world-war.tar.gz
cd hello-world-war/
git remote remove origin
git init
git remote add origin git@10.0.0.200:dev/java-helloworld.git
git add .
git commit -m "Install commit"
git push -u origin master

3.gitlab上查看项目


第3章 Jenkins配置Maven项目

1.配置Maven目录

进入Jenkins的系统管理-->全局工具配置页面-->Maven安装


2.新建Maven项目


3.gitlab项目里激活部署公钥


3.配置项目的gitlab地址


4.设置打包命令


5.测试构建是否成功

点击立即构建,然后查看jenkins的工作目录下是否成功生成了war包

[root@jenkins-201 ~]# ll /var/lib/jenkins/workspace/java-helloworld/target/
总用量 4
drwxr-xr-x 4 root root 54 87 08:13 hello-world-war-1.0.0
-rw-r--r-- 1 root root 2403 87 08:13 hello-world-war-1.0.0.war
drwxr-xr-x 2 root root 28 87 08:13 maven-archiver
[root@jenkins-201 ~]#

6.将war包发送给web服务器

cd /var/lib/jenkins/workspace/java-helloworld/target/
scp hello-world-war-1.0.0.war 10.0.0.7:/tmp/

第4章 安装部署Tomcat

注意:以下操作在web服务器进行


1.安装java环境

yum install java -y

2.安装Tomcat

tar xf apache-tomcat-8.0.27.tar.gzls -C /opt/
cd /opt
ln -s apache-tomcat-8.0.27 tomcat

2.拷贝测试项目并用tomcat启动

rm -rf /opt/tomcat/webapps/*
cp /tmp/hello-world-war-1.0.0.war /opt/tomcat/webapps/ROOT.war
/opt/tomcat/bin/startup.sh

3.测试访问


4.清理环境

测试完成后我们将war包删掉,后续我们使用jenkins自动部署

rm -rf /opt/tomcat/webapps/ROOT.war

第5章 Jenkins配置参数化构建

1.编写发布脚本

cat > /scripts/jenkins/java_deploy.sh <<'EOF'
#!/bin/bash
PATH_CODE=/var/lib/jenkins/workspace
PATH_WEB=/opt/tomcat/webapps
IP=10.0.0.7
#拷贝war包发送到web服务器代码目录
code_scp(){
ssh ${IP} "mkdir ${PATH_WEB}/java-${git_version} -p"
scp ${PATH_CODE}/java-helloworld/target/*.war ${IP}:${PATH_WEB}/java-${git_version}
}
#web服务器解压代码
code_unzip(){
ssh ${IP} "cd ${PATH_WEB}/java-${git_version} && unzip *.war && rm -rf *.war"
}
#创建代码软链接
code_ln(){
ssh ${IP} "cd ${PATH_WEB} && rm -rf ROOT && ln -s java-${git_version} ROOT"
}
#重启tomcat
restart_tomcat(){
ssh ${IP} "cd /opt/tomcat/bin && ./shutdown.sh && ./startup.sh"
}
main(){
code_scp
code_unzip
code_ln
}
#选择发布还是回滚
if [ "${deploy_env}" == "deploy" ]
then
ssh ${IP} "ls ${PATH_WEB}/java-${git_version}" >/dev/null 2>&1
if [ $? == 0 -a ${GIT_COMMIT} == ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} ]
then
echo "java-${git_version} 已部署,不允许重复构建"
exit
else
main
restart_tomcat
fi
elif [ "${deploy_env}" == "rollback" ]
then
code_ln
restart_tomcat
fi
EOF

2.配置参数化构建

最后还需要配置一下git仓库地址,注意需要修改拉取的版本的变量为 $git_version

jenkins构建查看会发现已经有了选项,但是因为还没提交代码,所以版本号还没有:


3.配置构建后操作


4.项目打标签测试

删除以前的标签:

git tag
git tag -d v1.0 v2.0 v3.0 v4.0

发布v2.0版本

cd hello-world-war/src/main/webapp/
git checkout master
git pull
git checkout -b v2.0
vim src/main/webapp/index.jsp
git status
git add .
git commit -m "v2.0 稳定版"-
git push -u origin v2.0

发布v3.0版本

cd hello-world-war/src/main/webapp/
git checkout master
git pull
git checkout -b v3.0
vim src/main/webapp/index.jsp
git status
git add .
git commit -m "v3.0 稳定版"
git push -u origin v3.0

5.测试发版

发布v2.0版本:

web服务器查看:

目录查看:

[root@web-7 ~]# ll /opt/tomcat/webapps/
总用量 0
drwxr-xr-x 4 root root 54 87 09:26 java-v2.0
lrwxrwxrwx 1 root root 9 87 09:27 ROOT -> java-v2.0

测试发布v3.0版本:

浏览器查看:

代码目录查看

[root@web-7 ~]# ll /opt/tomcat/webapps/
总用量 0
drwxr-xr-x 4 root root 54 87 09:26 java-v2.0
drwxr-xr-x 4 root root 54 87 09:39 java-v3.0
lrwxrwxrwx 1 root root 9 87 09:39 ROOT -> java-v3.0

6.测试回滚

当前版本为v3.0,我们选择回滚到v2.0

web浏览器查看发现已经回滚成功了:

查看代码目录:

[root@web-7 ~]# ll /opt/tomcat/webapps/
总用量 0
drwxr-xr-x 4 root root 54 87 09:26 java-v2.0
drwxr-xr-x 4 root root 54 87 09:39 java-v3.0
lrwxrwxrwx 1 root root 9 87 09:41 ROOT -> java-v2.0

第7章 sonar添加java项目

1.SonarQube添加新项目


2.创建新令牌


3.选择java项目


4.将命令写入sonar-scanner配置文件

cat > /opt/sonar-scanner/conf/sonar-scanner.properties <<'EOF'
sonar.host.url=http://10.0.0.203:9000
sonar.login=a82e776ea9fe8efa91c53d041d969ee23d2a27d1
sonar.sourceEncoding=UTF-8
EOF

第8章 jenkins配置sonar

1.配置构建后步骤

参数命令:

sonar.projectName=${JOB_NAME}
sonar.projectKey=java
sonar.sources=.

2.提交新版本发版测试

cd hello-world-war/src/main/webapp/
git checkout master
git pull
git checkout -b v4.0
vim src/main/webapp/index.jsp
git status
git add .
git commit -m "v4.0 稳定版"-
git push -u origin v4.0

3.jenkins发版测试


4.检查发版状态

web服务状态:

sonar状态:



推荐阅读
  • 本文由chszs撰写,详细介绍了Apache Mina框架的核心开发流程及自定义协议处理方法。文章涵盖从创建IoService实例到协议编解码的具体步骤,适合希望深入了解Mina框架应用的开发者。 ... [详细]
  • 最适合初学者的编程语言
    本文探讨了适合编程新手的最佳语言选择,包括Python、JavaScript等易于上手且功能强大的语言,以及如何通过有效的学习方法提高编程技能。 ... [详细]
  • 搭建个人博客:WordPress安装详解
    计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ... [详细]
  • HBase 数据复制与灾备同步策略
    本文探讨了HBase在企业级应用中的数据复制与灾备同步解决方案,包括存量数据迁移及增量数据实时同步的方法。 ... [详细]
  • 本文详细介绍了在 CentOS 系统中如何创建和管理 SWAP 分区,包括临时创建交换文件、永久性增加交换空间的方法,以及如何手动释放内存缓存。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.jena.atlas.lib.ByteBufferLib 类下的 acopyArray 方法,并提供了多个实际应用中的代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文详细探讨了 Java 中 org.apache.gobblin.metrics.GobblinMetrics 类下的 getName() 方法的使用场景及其代码实现,提供了多个实际应用示例以加深理解。 ... [详细]
  • 本文探讨了在Windows系统中运行Apache服务器时频繁出现崩溃的问题,并提供了多种可能的解决方案和建议。错误日志显示多个子进程因达到最大请求限制而退出。 ... [详细]
author-avatar
荆灬樊小姐_526
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有