您的位置:首页 > 其它

jenkins远程部署实践

2015-07-10 00:00 141 查看
摘要: 以前一直以为CI没什么大不了,自己手动就完成了。但是当客户需求每次改个不停,有时一个小小的修改就要打包部署,麻烦、重复而且毫无技术含量,这时候jenkins发挥了它其中的作用——代码库拉源码,编译,打包,部署,自动一条龙!

环境:Windows8.1,JDK1.7,Jenkins1.619,Ant1.9,Glassfish4

安装,不多说了,官网下载war包,放在web容器内即可使用。

准备工作

1.下载“Publish Over SSH”插件

2.进入jenkins,“系统管理”》“插件管理”》上传hpi安装插件

3.“系统管理”》“系统配置”》“Publish Over SSH”项配置SSH链接信息

下面直接进入主题,新建项目



如果采用maven,选择“构建一个maven项目”;如果是其它(ant,将已编译的class打包等),选择“构建一个自由风格的软件项目”。其它选项暂未涉及。

编译,打包方式:

1.本地环境下,直接使用myeclipse或其它IDE编译部署在本地的web服务器的方式



这里没有选择“源码管理”,而是直接指定bat脚本warZip.bat(位于jenkins工程目录下),注意:bat文件中有中文时,需要保存为ANSI编码格式,设置变量时“=”两遍不能有空格



@echo off
set NATIVE_DEPLOYPATH=C:\glassfish4\glassfish\domains\domain1\autodeploy\wxcommunity.war
set JENKINS_DEPLOYPATH=C:\Users\超\.jenkins\workspace\wxcommunity\AntBuild\war\wxcommunity.war
set ZIP_HOME=D:\Program Files\7-Zip
set Path=%Path%;%ZIP_HOME%
7z a -tzip %JENKINS_DEPLOYPATH% %NATIVE_DEPLOYPATH%\* -xr!WEB-INF\lib\*.jar
pause

这里使用的是7zip来打包,如果没有7zip,也可以通过“jar cvf war路径 源码路径”来编译打包

构建后(即本地编译打包后),



其中/deploy.sh为将war上传到待部署的远程服务器后执行的脚本。

#!/bin/sh
cd /opt/glassfish4/bin
./asadmin stop-domain

mv /jenkins.war /usr/xxx/applications/jenkins.war
#rm -rf jenkins.war

cd /usr/xxx/applications
./asadmin start-domain

保存,然后“立即构建”,几分钟后即完成打包部署到远程服务器。

2.本地环境下,拉取svn/git上的源代码,通过Ant或Maven编译打包的方式

以SVN,Ant为例,

区别在于“源码管理”部分,”构建“部分过程中执行脚本不同



填入SVN地址,点击右侧问号,“click this link”进入SVN配置。

“构建”过程,直接执行ant



build.xml文件(具体工程根据下面的修改即可)放在svn拉取的源码工程目录下

<project basedir="." default="publish" name="wxcommunity">
<target name="init" description="设置初始化打 war 包需要的路径变量">
<property name="name" value="wxcommunity"/>
<property name="src" value="${basedir}/src"/>
<property name="lib" value="${basedir}/WebRoot/WEB-INF/lib"/>
<property name="webapp" value="${basedir}/WebRoot"/>
<property name="packages" value="*"/>

<property name="build.src" value="${src}"/>
<property name="build.dest" value="${basedir}/AntBuild/wxcommunity/WEB-INF/classes"/>
<property name="buildwar.dest" value="${basedir}/AntBuild/wxcommunity"/>
<property name="build.javadocs" value="${basedir}/AntBuild/doc"/>
<property name="jar.dest" value="${basedir}/AntBuild/jar"/>
<property name="war.dest" value="${basedir}/AntBuild/war"/>

<property name="tomcat.home" value="D:\apache-tomcat-7.0.40"/>
<property name="j2eelib.dir" value="D:\Program Files\myeclipse\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.0.0.me201110301321\data\libraryset\EE_5"/>

<path id="classpath">
<fileset dir="${j2eelib.dir}">
<include name="**/*.jar"/>
</fileset>
<fileset dir="${lib}">
<include name="**/*.jar"/>
</fileset>
</path>
</target>

<target name="prepare" depends="init" description="创建打包需要的路径,拷贝源文件到打包路径下">
<mkdir dir="${build.src}"/>
<mkdir dir="${build.dest}"/>
<mkdir dir="${buildwar.dest}"/>
<mkdir dir="${jar.dest}"/>
<mkdir dir="${war.dest}"/>
</target>

<target name="build" depends="prepare" description="编译java文件,拷贝properties 属性配置文件到编译后的路径下">
<javac srcdir="${build.src}" destdir="${build.dest}" includeantruntime="on" encoding="utf-8">
<classpath refid="classpath"/>
</javac>
<copy todir="${build.dest}">
<fileset dir="${build.src}">
<include name="**/*.properties"/>
<include name="**/*.xml"/>
</fileset>
</copy>
</target>

<target name="antwar" depends="build" description="打war包,不将java文件打入包内">
<war warfile="${war.dest}/${name}.war" webxml="${buildwar.dest}/WEB-INF/web.xml">
<lib dir="${buildwar.dest}/WEB-INF/lib"/>
<classes dir="${build.dest}"/>
<fileset dir="${buildwar.dest}"/>
</war>
</target>

<target name="publish" depends="antwar,clean" description="发布war包至tomcat目录下">
<copy todir="${tomcat.home}/webapps">
<fileset dir="${war.dest}">
<include name="**/*.war"/>
</fileset>
</copy>
</target>

<target name="clean" depends="init" description="清除打包用临时文件">
<delete dir="${build.src}"/>
<delete>
<fileset dir="${build.dest}" includes="**/*.classes"/>
</delete>
<delete dir="${buildwar.dest}"/>
</target>
</project>
其它内容与第一种方式相同。maven与ant也相似,只是执行maven pom.xml和ant build.xml的区别,取决于你的工程类型
错误汇总:

1.注意上面所说的路径问题

2.脚本执行出错,-bash: ./deploy.sh: /bin/bash^M: bad interpreter: No such file or directory

这是由于我在windows下编辑的脚本,编码格式错误。vi deploy.sh后,set ff=unix把它强制为unix格式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: