转:http://jdkleo.iteye.com/blog/2159844
Jenkins+SVN+Maven+Shell
实现项目一键发布
一、前言
众所周知,Jenkins默认情况下可以实现项目更新(通过SVN),和项目发布,通过(MAVEN插件),但是这种情况下发布到一些容器底下(如Tomcat)时,经过多次发布后JVM会报OutOfMemoryError PermGen space, 这个原因是由于这些容器在覆盖老项目后并不会释放老项目内存永久区的资源,久而久之,导致系统永久区内存溢出。为解决这个问题,我们只有通过发布后重新启 动容器才能解决该问题。那有什么办法可以使容器在发布新项目后自动重启呢?重启过程中,我们希望容器正在处理的作业安全完成后(如quartz作业执行完后),容器再重启,如何做到?本文要与大家分享的便是其中一种便利安全的方法。
二、 Jenkins安装与配置
Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。
安装:
选择一个操作系统版本的安装,我这边选择的是 Red Hat/Fedora/CentOS版
安装及启动过程:
- rpm -ivh jenkins-1.590-1.1.noarch.rpm
- 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脚本中改成大家项目中自己的默认参数。
- ./publish.sh <项目WEB显示名称> [TOMCAT端口] [tomcat安装主目录]
六、 编写Shell脚本
需要在你发布的目标机器上编写该脚本,你也可以在开发环境编好后,放到目标机器上,以下给出我的脚本:
- #!/bin/bash
- #defined
- TOMCAT_HOME="/save/apache-tomcat-7.0.56"
- TOMCAT_PORT=8080
- PROJECT="$1"
- #param validate
- if [ $# -lt 1 ]; then
- echo "you must use like this : ./publish.sh <projectname> [tomcat port] [tomcat home dir]"
- exit
- fi
- if [ "$2" != "" ]; then
- TOMCAT_PORT=$2
- fi
- if [ "$3" != "" ]; then
- TOMCAT_HOME="$3"
- fi
- #shutdown tomcat
- "$TOMCAT_HOME"/bin/shutdown.sh
- echo "tomcat shutdown"
- #check tomcat process
- tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`
- echo "current :" $tomcat_pid
- while [ -n "$tomcat_pid" ]
- do
- sleep 5
- tomcat_pid=`/usr/sbin/lsof -n -P -t -i :$TOMCAT_PORT`
- echo "scan tomcat pid :" $tomcat_pid
- done
- #publish project
- echo "scan no tomcat pid,$PROJECT publishing"
- rm -rf "$TOMCAT_HOME"/webapps/$PROJECT*
- cp /save/$PROJECT*.war "$TOMCAT_HOME"/webapps/$PROJECT.war
- #bak project
- BAK_DIR=/save/bak/$PROJECT/`date +%Y%m%d`
- mkdir -p "$BAK_DIR"
- cp "$TOMCAT_HOME"/webapps/$PROJECT.war "$BAK_DIR"/"$PROJECT"_`date +%H%M%S`.war
- #remove tmp
- rm -rf /save/$PROJECT*.war
- #start tomcat
- "$TOMCAT_HOME"/bin/startup.sh
- 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中。
参考配置:
- export JAVA_HOME=/usr/java/jdk1.6.0_45
- export JAVA_BIN=/usr/java/jdk1.6.0_45/bin
- export PATH=$PATH:$JAVA_HOME/bin
如果以上配置还不能解决你的问题,尝试下去的做法:
---------------------------------------------修改.bash_profile文件开始----------------------------------
修改.bash_profile文件方式是用户级的,对当前用户可用,其它用户无法使用。这种方式一般用于生产。.bash_profile文件在用户的根目录,比如说www用户的根目录是/home/www。
具体配置如下:
- cd /home/www/
- vim .bash_profile
插入下面3行配置后保存退出:
- export JAVA_HOME=/usr/java/jdk1.6.0_45/
- export PATH=$JAVA_HOME/bin:$PATH
- export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
---------------------------------------------修改.bash_profile文件结束----------------------------------
相关推荐
本篇文章将深入探讨如何利用Jenkins、Subversion(SVN)、Maven和Shell脚本来实现项目的自动化一键发布,帮助开发者理解并掌握这一高效的工作流程。 首先,Jenkins是一款开源的持续集成工具,它能够监控和记录软件...
### Jenkins + SVN + Maven + ...通过以上步骤,可以实现基于Jenkins、SVN、Maven和Java的自动化构建和部署流程。这种方式大大提高了开发效率和软件质量,减少了人为错误,是持续集成/持续部署(CI/CD)的重要实践之一。
Jenkins、SVN 和 Maven 是实现持续集成的三个关键组件。 1. **Jenkins**: Jenkins 是一个开源的持续集成工具,它允许开发者自动化构建、测试和部署软件。在本实验中,我们首先需要下载并安装 Jenkins。可以从官方...
Jenkins提供了两种部署方法:通过Jenkins+SSH+Shell实现代码发布及回滚,也可以通过SVN回滚。第一种方法使用Jenkins的SSH插件连接远程主机,实现代码发布和回滚。第二种方法使用Jenkins的SVN插件连接SVN版本控制系统...
本文将详细讲解如何利用Jenkins、Maven、SVN和Tomcat等工具进行网站的持续集成实践,以实现代码的自动上传与部署。 1. 传统网站部署流程 传统网站的部署过程繁琐且耗时,包括需求分析、原型设计、编码、测试、内部...
"手把手图解,详解Jenkins,svn,maven项目持续集成SHELL脚本"这个标题表明了本文将通过图形化的解释,详细介绍如何使用Jenkins、Subversion(svn)和Maven这三个工具来实现软件项目的持续集成,并涉及到使用SHELL脚...
通过上述步骤,我们可以有效地利用Jenkins + SVN + Maven实现持续集成,提高软件开发的效率和质量。此外,还可以进一步扩展Jenkins的功能,比如集成更多插件、配置更复杂的构建流程等,以满足不同场景下的需求。
本手册将详细讲解如何利用Jenkins、Maven、SVN和SSH来实现一个高效且可靠的持续集成环境。 首先,Jenkins是一个开源的持续集成服务器,它支持各种版本控制系统、构建工具和部署策略。通过Jenkins,我们可以设置自动...
通过这个实战教程,学习者将全面了解如何使用Jenkins、Maven、SVN和Tomcat实现高效的持续集成流程,提升团队协作效率,降低软件发布风险。通过自动化部署,开发者可以更快地响应需求变化,从而加速产品的迭代和交付...
将Jenkins与SVN集成,能够实现自动从SVN仓库获取代码并进行构建,从而快速发现和解决代码冲突。然而,在某些网络受限的环境中,我们需要进行Jenkins SVN插件的离线安装。以下就是详细的步骤和注意事项。 ### 1. ...
【Jenkins部署文档】 本文档将详细介绍如何在CentOS系统上...以上即为Jenkins+Maven+SVN+Shell+Tomcat的持续集成发布环境的搭建步骤,通过这样的配置,可以实现自动化构建、测试和部署,提高软件开发的效率和质量。
**Jenkins自动化发布工具相关插件** Jenkins是一款开源的持续集成(CI)服务器,它允许开发者自动构建、测试和部署软件,极大地提高了开发效率。在这个主题中,我们将深入探讨Jenkins中的三个重要插件:svn插件、...
**Jenkins项目配置详解** ...通过以上步骤,你可以对Jenkins项目进行详尽的配置,实现持续集成和持续交付的目标。随着项目的发展,不断调整和优化配置,Jenkins将成为你可靠的代码管理和部署伙伴。
本指南详细介绍了 Jenkins 的基本配置,包括启动、解锁、管理员设置,以及如何集成 Maven、SVN、expect 和 SCP。此外,还展示了如何创建构建任务,包括参数化构建、源码管理、触发策略、构建环境和发布流程。通过...
- **蓝绿部署与金丝雀发布**: 了解如何利用Jenkins实现高效且低风险的应用部署策略。 ### 9. 高可用与扩展 - **高可用性设置**: 配置Jenkins集群,实现故障转移和负载均衡。 - **插件开发与定制**: 学习如何为...
将Jenkins与Maven结合,可以实现高效的自动化构建和测试流程。 **Jenkins简介** Jenkins是一款用Java编写的开源持续集成服务器,它支持多种语言和框架的项目。Jenkins提供了一个友好的Web界面,允许用户配置构建...
Jenkins 通过 maven 打包,并通过 shell 脚本将安装包复制到 app 运行环境,并重新启动 app 运行环境。服务器容器环境可以替换成 docker 环境,本质都是一样的。 四、Jenkins 的资源获取 学习 Jenkins 需要了解其...
在项目配置页面,可以设置源代码管理(如Git或SVN)、构建触发器(如代码提交触发、定时触发等)、构建步骤(如运行Maven命令、执行Shell脚本等)。 - **4.1.3 构建项目** 配置完成后,点击“立即构建”按钮启动...
这可以通过 Jenkins 的 `Execute shell` 或 `Windows batch command` 步骤来实现。 - **构建过程**:执行编译、测试等操作,确保只有变动的文件被处理。 - **打包**:根据找出的改动,生成一个包含这些改动的增量...