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

Jenkins+SVN+Maven+Shell

实现项目一键发布

一、前言

众所周知,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项目,配置根据大家需要,实际配置,本文仅列出作者的配置,供参考:




其中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文件结束----------------------------------


转:http://jdkleo.iteye.com/blog/2159844

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Jenkins是一个开源的持续集成工具,可实现自动化构建、测试和部署。Spring Boot是一个基于Spring框架的轻量级Web应用开发框架,提供了快速构建Web应用的开发环境。Maven是一个基于项目对象模型(POM)的项目管理工具,可用于构建、依赖管理和部署。SVN是一种源代码管理工具,可用于协作开发和版本控制。 将这些工具组合起来,可实现一键打包发布。首先,在Jenkins中创建一个新的构建项目,并选择Maven项目类型。然后,配置SVN源代码管理,在构建触发器中设置定时执行构建任务。接着,在Maven构建中设置pom.xml文件路径和构建命令,确保能够成功构建Spring Boot应用程序。最后,将打包后的应用程序上传到远程服务器,并启动应用程序部署脚本。 通过这个过程,我们可以实现自动化构建、测试和部署,简化部署流程并提高生产效率。同时,通过与Jenkins、Spring Boot、MavenSVN的结合,可以实现更完整的持续集成和持续交付过程。 ### 回答2: Jenkins、Spring Boot、MavenSVN 都是非常流行的开发工具和框架。其中,Jenkins 是一个开放源代码的自动化部署工具,它可以自动构建、测试和部署软件。Maven 是一个对象中心的开发工具,它可以自动编译、测试和部署软件。Spring Boot 是一个开发框架,它可以轻松地构建和部署 Web 应用程序。而 SVN 则是一个用于版本控制的工具,它可以帮助开发人员协同工作,追踪历史记录等。 对于这种情况,我们可以使用 Jenkins 进行自动化部署和打包发布。下面是该过程的步骤: 1. 安装 Jenkins:首先,你需要安装 Jenkins。可以通过下载 Jenkins 的最新版本来安装它。 2. 配置 Maven:在 Jenkins 中,你需要配置 Maven。在 Jenkins 主页的“Manage Jenkins”选项中,可以找到“Global Tool Configuration”菜单。你需要在这里配置 Maven,包括指定 Maven 的路径和版本。 3. 配置构建步骤:在 Jenkins 中,你可以配置构建步骤。在此处你可以通过选择“构建一个 Maven 项目”选项并指定相关的 Maven 工程,然后再指定命令执行变量等。 4. 编写脚本Jenkins 支持脚本编写,你可以通过写 shell 脚本或者 Windows 批处理来执行构建和部署操作,指定 Maven 打包的相关参数,自动化编译打包、部署到服务器等操作。 5. 配置 SVNJenkins 配置 SVN 的方式也非常简单,在 Jenkins 主页中,你可以通过创建装载 SVN 仓库的插件来配置 SVN。 6. 执行自动化部署:最后,你需要执行自动化部署。你可以在 Jenkins 中添加定时任务或在被检测到有 SVN 代码提交后进行自动化的部署。 总之,使用 Jenkins 自动化部署的好处在于,它可以大大提高开发效率,减少手动操作,降低出错率,并且它可以随时进行监控和定位问题,有效的提高项目的质量,降低运维成本。 ### 回答3: Jenkins是一个开源的自动化部署工具,可以非常方便地实现一键打包、构建和发布。在使用Jenkins进行springboot maven svn部署时,需要进行如下几个步骤: 1. 安装Jenkins 首先需要在服务器上安装JenkinsJenkins支持多种操作系统,可以根据具体情况进行选择安装方法。 2. 安装必要的插件 需要在Jenkins中安装必要的插件,主要包括Maven Integration plugin、Subversion plugin、Deploy plugin等,这些插件将帮助我们实现源代码的管理、打包构建以及自动部署。 3. 配置JenkinsJenkins中配置SVNMaven的信息,包括源代码地址、Maven路径等。 4. 编写自动化脚本 根据实际需求,编写自动化脚本实现构建、测试、打包以及部署,这些脚本可以使用Jenkins提供的Pipeline语法或者其他脚本语言来编写。 5. 执行构建任务 在Jenkins界面上,选择需要构建的项目,点击构建即可,Jenkins将根据自动化脚本执行编译、测试、打包和部署。 6. 验证部署结果 在Jenkins上查看构建结果,如果成功,则可以上线进行测试。如果失败,则需要查看详情并进行修复,以便下次构建成功。 总之,使用Jenkins进行springboot maven svn部署,可以大大提高开发效率,减少手动部署的工作量,不仅在测试、集成和部署等方面提供了更好的支持,还有利于提高应用程序的质量和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值