Jenkins+SVN+Maven+Shell 实现项目一键发布

简介:

这才是最好的jenkins教程,maven

  • 前言

众所周知,Jenkins默认情况下可以实现项目更新(通过SVN),和项目发布,通过(MAVEN插件),但是这种情况下发布到一些容器底下(如Tomcat)时,经过多次发布后JVM会报OutOfMemoryError PermGen space,这个原因是由于这些容器在覆盖老项目后并不会释放老项目内存永久区的资源,久而久之,导致系统永久区内存溢出。为解决这个问题,我们只有通过发布后重新启动容器才能解决该问题。那有什么办法可以使容器在发布新项目后自动重启呢?重启过程中,我们希望容器正在处理的作业安全完成后(如quartz作业执行完后),容器再重启,如何做到?本文要与大家分享的便是其中一种便利安全的方法。


  • Jenkins安装与配置

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。

安装:

官网:http://jenkins-ci.org/

选择一个操作系统版本的安装,我这边选择的是 Red Hat/Fedora/CentOS

安装及启动过程:

 

Ruby代码  收藏代码

  1. rpm -ivh jenkins-1.590-1.1.noarch.rpm     

  2. service jenkins start  

 

 

访问:

http://<ip>:8080/


  • Publish Over SSH插件安装


依次单击“Jenkins->系统管理->管理插件菜单


在可选插件选项卡中找到勾选Publish Over SSH插件,点击界面下方的直接安装按钮。等待jenkins安装完毕即可。


  • Publish Over SSH插件配置

全局配置:


依次点开“Jenkins->系统管理->系统设置菜单

找到Publish over SSH配置项,配置如下配置


底下还有个Test Configuration按钮,点击,如出现Success则表示配置成功。


最后点击页底的保存按钮,完成配置。


  • 创建Jenkins Item

直接点击Jenkins首页的新建按钮,创建一个Maven项目,配置根据大家需要,实际配置,本文仅列出作者的配置,供参考:




如何区分开环境 clean package -Dmaven.test.skip=true -Denv=prod



其中Exec command的脚本是一个shell文件,放置在远程发布机上后,可执行参数有三个,分别如下,第一个参数必填,后面两个选填,默认值是8080和/save/apache-tomcat-7.0.56,大家可以在第六节的SHELL脚本中改成大家项目中自己的默认参数。

Ruby代码  收藏代码

  1. ./publish.sh <项目WEB显示名称> [TOMCAT端口] [tomcat安装主目录]  

 

  • 编写Shell脚本

需要在你发布的目标机器上编写该脚本,你也可以在开发环境编好后,放到目标机器上,以下给出我的脚本:

 

Ruby代码  收藏代码

  1. #!/bin/bash  

  2. #defined   

  3. TOMCAT_HOME="/save/apache-tomcat-7.0.56"  

  4. TOMCAT_PORT=8080  

  5. PROJECT="$1"  

  6. #param validate  

  7. if [ $# -lt 1 ]; then    

  8.   echo "you must use like this : ./publish.sh <projectname> [tomcat port] [tomcat home dir]"    

  9.   exit    

  10. fi   

  11. if [ "$2" != "" ]; then  

  12.    TOMCAT_PORT=$2  

  13. fi  

  14. if [ "$3" != "" ]; then  

  15.    TOMCAT_HOME="$3"  

  16. fi  

  17. #shutdown tomcat  

  18. "$TOMCAT_HOME"/bin/shutdown.sh  

  19. echo "tomcat shutdown"  

  20. #check tomcat process  

  21. tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`  

  22. echo "current :" $tomcat_pid  

  23. while [ -n "$tomcat_pid" ]  

  24. do  

  25.  sleep 5  

  26.  tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`  

  27.  echo "scan tomcat pid :" $tomcat_pid  

  28. done  

  29. #publish project  

  30. echo "scan no tomcat pid,$PROJECT publishing"  

  31. rm -rf "$TOMCAT_HOME"/webapps/$PROJECT*  

  32. cp /save/$PROJECT*.war "$TOMCAT_HOME"/webapps/$PROJECT.war  

  33. #bak project  

  34. BAK_DIR=/save/bak/$PROJECT/`date +%Y%m%d`  

  35. mkdir -p "$BAK_DIR"  

  36. cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war  

  37. #remove tmp  

  38. rm -rf /save/$PROJECT*.war  

  39. #start tomcat  

  40. "$TOMCAT_HOME"/bin/startup.sh  

  41. echo "tomcat is starting,please try to access $PROJECT conslone url"   


该脚本具有自动安全停Tomcat,自动发布项目,自动备份已发布项目版本的功能。

需要注意的是你连上来的admin用户需要具有执行该文件的权限,如果没有可以

chmod 600(755) publish.sh

具体权限给多少,根据你们的需要,决定权在你们手上。


如果shell执行出现如下错误,则可能是你在etc/profile中设置了JAVA_HOME,同时您还需要在/etc/bashrc也设置JAVA_HOME。


 

原因:远程机器的java_home在配置在/etc/profile中的,这个只给shell用户使用的;

但对于ssh 这种非login shell(non-login shell)用户,需要配置在/etc/bashrc中。

参考配置:

 

Ruby代码  收藏代码

  1. export JAVA_HOME=/usr/java/jdk1.6.0_45  

  2. export JAVA_BIN=/usr/java/jdk1.6.0_45/bin  

  3. export PATH=$PATH:$JAVA_HOME/bin  

如果以上配置还不能解决你的问题,尝试下去的做法:

---------------------------------------------修改.bash_profile文件开始----------------------------------

修改.bash_profile文件方式是用户级的,对当前用户可用,其它用户无法使用。这种方式一般用于生产。.bash_profile文件在用户的根目录,比如说www用户的根目录是/home/www。

具体配置如下:

Java代码  收藏代码

  1. cd /home/www/  

  2. vim .bash_profile  

 

 

插入下面3行配置后保存退出:

Ruby代码  收藏代码

  1. export JAVA_HOME=/usr/java/jdk1.6.0_45/  

  2. export PATH=$JAVA_HOME/bin:$PATH  

  3. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  

 

---------------------------------------------修改.bash_profile文件结束----------------------------------



本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1956416,如需转载请自行联系原作者
相关文章
|
2月前
|
Java 区块链 Maven
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
255 4
|
1月前
|
Java jenkins 应用服务中间件
结合Jenkins与Tomcat,实施Maven项目的自动构建和部署流程。
任何项目构建和部署的自动化流程,总离不开对各个环节精细把控与密切配合。涉及到源代码管理、构建工具、持续集成服务器以及最终的运行时环境的协调。通过上述简洁实用的步骤,可以实现Maven项目从源代码到运行状态的无缝过渡,进而提升软件开发的效率与质量。
165 0
|
Java Maven 开发者
maven项目中官方setting.xml文件
`settings.xml` 是 Maven 的配置文件,用于定义用户或全局级别的构建行为。它包含本地仓库路径、网络代理、服务器认证、仓库镜像及构建配置文件等设置,帮助开发者根据环境定制 Maven 行为,提升构建效率与灵活性。
560 0
|
4月前
|
Java 测试技术 项目管理
【JavaEE】从 0 到 1 掌握 Maven 构建 Java 项目核心技巧 解锁 Java 项目高效管理实用实例
本文从Maven基础概念讲起,涵盖安装配置、核心概念(如POM与依赖管理)及优化技巧。结合Java Web项目实例,演示如何用Maven构建和管理项目,解决常见问题,助你高效掌握这一强大工具,提升Java开发与项目管理能力。适合初学者及进阶开发者学习。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
151 6
|
8月前
|
Java jenkins 持续交付
Jenkins集成Maven
通过以上步骤,可以在Jenkins中成功集成Maven,实现自动化构建和部署。通过定时构建、SCM轮询等方式,可以确保代码库中的最新变更能够及时构建和测试,提高开发效率和代码质量。这种集成方式在实际项目中具有广泛的应用前景,能够显著提升团队的协作效率。
210 8
|
10月前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
305 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
11月前
|
Java 关系型数据库 MySQL
Maven——创建 Spring Boot项目
Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
845 1
Maven——创建 Spring Boot项目
|
11月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
282 1
如何使用 maven 创建一个 Spring Boot项目
|
10月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
783 8
|
11月前
|
Java Maven Kotlin
idea maven创建kotlin项目
本文介绍了在IntelliJ IDEA中使用Maven创建Kotlin项目的步骤,包括在`pom.xml`文件中添加Maven中央仓库、配置`kotlin-maven-plugin`插件、指定源目录、添加测试插件和执行插件,以及添加Kotlin测试依赖和标准库依赖。文中还提到了如何通过更换镜像或使用代理来解决依赖下载速度慢的问题,并展示了运行示例代码的截图。
634 4
idea maven创建kotlin项目