转载自:http://blog.csdn.net/minebk/article/details/72763859

记录初衷:

由于每次项目部署非常痛苦,很麻烦,遂使用jenkins来部署项目,只需点击即可,但是网上不论是百度还是google关于jenkins集成weblogic部署项目的资料非常少,至少通过我的搜索没有找到一篇非常完整的,所以以次来记录,给大家提供一点参考。(此次记录包含了集成weblogic和tomcat)

整合过程:

Jenkins搭建环境

CentOS6.5(系统环境)

JDK6u45(由于系统用的是weblogic10.3.5只能用JDK6了,官方提供了升级JDK7的方法,先不折腾了)

SVN

Jenkins-1.596.3(貌似是JDK6u45能支持到的最高版本,有兴趣的可以继续升级试试)

Jenkins官网:https://jenkins.io/index.html

Jenkins资源地址(各个版本及插件):http://mirrors.jenkins.io

Tomcat7.x(随便一个版本即可)

Weblogic10.3.5(坑爹的版本,跟weblogic集成各种坑)

Maven3.2.5(JDK6u45最高支持到该版本,否则就得升级为JDK7.x)

Ant1.9.7(这个好像没啥要求,主要用来编译打包非Maven项目,非Maven项目的Ant编译也有问题,再此做记录!!!)

Jenkins启动

将jenkins的war包部署到应用服务器(我用的是Tomcat7)启动即可

jenkins启动完成后会生成一个目录:/用户/.jenkins

.jenkins目录中会有workspace这么个目录(执行构建后会从svn上down下来文件并根据项目类型执行具体的编译打包如Ant或Maven [该目录下也会按项目分目录 如:ECP])

Jenkins基础配置

主界面(就这个熊样子)

1.    系统设置

里面的配置项非常多,截图显示不全,只需要配置我们关心的配置!!!

其他的都不管,直接找到这里,全部配好!!!省的别的地方报错!别管用不用得到,配上再说(一定要保证配对!!!)。

JDK配置

ANT配置(规则同上)

MAVEN配置(规则同上)

最后别忘了保存!!!

2.    权限配置

Jenkins1.596.3+Jdk6u45+Maven3.2.5+Tomcat7.x+SVN自动部署项目(很简单只要步骤对都能成功)

在这之前,需要先在Jenkins里新增一个插件(deploy-1.10.hpi)

直接选<高级>即可,<可更新>和<可选插件>可能报错,用不到不用管。

开始新建

配置svn地址(此处svn地址最后需要跟上@HEAD:https://10.2.254.79/svn/CCI/EBT1/02-Engineering_工程/04-Code_实现/ECP@HEAD否则jenkins同步svn代码会有延迟!)

设置svn用户名密码,设置完后回到项目配置页面重新配置svn地址即可

构建后操作(只有当deploy-1.10.hpi插件安装后才会有该选项!!!)

选择完tomcat后需要配置tomcat的用户名密码!!!

在tomcat目录(此处的tomcat目录一定是你要把项目发布到的tomcat的目录!!!)/conf/tomcat-users.xml中配置用户名密码,省事儿直接copy下面这段

<role rolename="tomcat"/>

<role rolename="role1"/>

<rolerolename="manager-gui"/>

<rolerolename="manager-script"/>

<rolerolename="manager-jmx"/>

<role rolename="manager"/>

<rolerolename="manager-status"/>

<user username="tomcat"password="tomcat" roles="tomcat"/>

<user username="both"password="tomcat" roles="tomcat,role1"/>

<user username="role1"password="tomcat" roles="role1"/>

<user username="admin"password="admin"roles="manager,manager-gui,manager-script,manager-jmx,manager-status"/>

执行构建 会在.jenkins/workspace目录下生成一个文件夹ECP(jenkins中建的项目叫啥就生成啥)会把项目从svn上全down下来进行构建

Jenkins1.596.3+Jdk6u45+Ant+Weblogic10.3.5+SVN自动部署项目(巨TM费劲,weblogic需要单独插件才能部署,并且插件的使用方法非常模糊,关于jenkins部署weblogic的文档网上资源稀少,特此记录)

在这之前,需要先在Jenkins里新增一个插件(weblogic-deployer-plugin-3.6.hpi)

添加插件步骤跟之前一样,不重复了

非Maven项目选这个吧

和之前一样

非Maven项目需要用Ant编译打包

Ant Version:只有在jenkins系统设置里配过,这里才能选择!!!

Targets:ant构建时默认会执行 ant 命令,如果需要另外的参数写到这里就行

选这个(只有安装了weblogic-deployer-plugin-3.6.hpi插件才有该选项)

此时你会毛都没看到,页面上没有任何显示,也不报错,第一个坑来了

看jenkins所在tomcat的日志catalog.out文件

点击这个选项时报了这么个错

2017-1-10 13:51:27hudson.widgets.RenderOnDemandClosure$1 generateResponse

警告: Failed toevaluate the template closure

org.apache.commons.jelly.JellyTagException:jar:file:/root/.jenkins/plugins/weblogic-deployer-plugin/WEB-INF/lib/classes.jar!/org/jenkinsci/plugins/deploy/weblogic/WeblogicDeploymentPlugin/config.jelly:17:138:<j:invokeStatic> Could not load class: org.jenkinsci.plugins.deploy.weblogic.jdk.JdkToolService.Reason: java.lang.NoSuchMethodException:org.jenkinsci.plugins.deploy.weblogic.jdk.JdkToolService.getJDKHomeByName(java.lang.Object)

atorg.apache.commons.jelly.tags.core.InvokeStaticTag.createLoadClassFailedException(InvokeStaticTag.java:177)

atorg.apache.commons.jelly.tags.core.InvokeStaticTag.doTag(InvokeStaticTag.java:139)

atorg.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)

at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)

atorg.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)

atorg.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95)

at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147)

atorg.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)

atorg.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)

atorg.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)

atorg.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)

atorg.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)

atorg.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)

atorg.apache.commons.jelly.tags.core.OtherwiseTag.doTag(OtherwiseTag.java:41)

atorg.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)

atorg.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)

atorg.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)

atorg.apache.commons.jelly.tags.core.ChooseTag.doTag(ChooseTag.java:38)

atorg.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)

at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)

atorg.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)

atorg.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)

at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)

atorg.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63)

atorg.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53)

athudson.widgets.RenderOnDemandClosure$1.generateResponse(RenderOnDemandClosure.java:99)

atorg.kohsuke.stapler.HttpResponseRenderer$Default.handleHttpResponse(HttpResponseRenderer.java:124)

at org.kohsuke.stapler.HttpResponseRenderer$Default.generateResponse(HttpResponseRenderer.java:69)

atorg.kohsuke.stapler.Function.renderResponse(Function.java:113)

atorg.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:98)

at org.kohsuke.stapler.MetaClass$JavaScriptProxyMethodDispatcher.doDispatch(MetaClass.java:470)

atorg.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)

atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)

at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

atorg.kohsuke.stapler.MetaClass$12.dispatch(MetaClass.java:391)

atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)

atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

atorg.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:813)

atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:876)

atorg.kohsuke.stapler.Stapler.invoke(Stapler.java:649)

atorg.kohsuke.stapler.Stapler.service(Stapler.java:199)

atjavax.servlet.http.HttpServlet.service(HttpServlet.java:722)

atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:306)

atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

athudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:96)

athudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:88)

atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)

atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)

atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)

atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

athudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)

athudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)

athudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

atjenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)

athudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

atorg.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)

athudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

atorg.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)

athudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

atorg.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

atjenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)

athudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)

athudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)

at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)

athudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)

athudson.security.HudsonFilter.doFilter(HudsonFilter.java:168)

atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)

atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

atorg.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)

atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)

atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)

atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)

atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

atorg.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)

atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:244)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)

atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:589)

atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)

atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)

atorg.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)

atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:383)

atorg.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)

atorg.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)

atorg.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:288)

atjava.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)

atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)

atjava.lang.Thread.run(Thread.java:662)

Caused by:java.lang.NoSuchMethodException:org.jenkinsci.plugins.deploy.weblogic.jdk.JdkToolService.getJDKHomeByName(java.lang.Object)

atjava.lang.Class.getMethod(Class.java:1607)

atorg.apache.commons.jelly.tags.core.InvokeStaticTag.doTag(InvokeStaticTag.java:124)

... 93 more

这个错误在网上根本查不到解决办法,遂想到是不是刚刚安装的weblogic插件需要设置什么东西没设导致的错误,重新进到<系统设置>一直往下拉发现有个weblogic的设置。。。设置吧,不知道咋设置吧,找官网!!!

有了,有些选项设置起来依然费劲,猜着来吧

configuration.xml官网给的参考

我的configuration.xml文件内容及格式(注意:该文件内容修改后需要重启jenkins)

<?xmlversion="1.0" encoding="UTF-8"?>

<configxmlns="http://org.jenkinsci.plugins/WeblogicDeploymentPlugin"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://org.jenkinsci.plugins/WeblogicDeploymentPluginplugin-configuration.xsd">

<weblogic-targets>

<!—该节点根据需求可配置多个-->

<weblogic-target>

<!--随便起个名字(我直接用的domain当名字)-->

<name>rayootechDomain</name>

<!-- domain的ip -->

<host>10.1.1.66</host>

<!-- domain的端口 -->

<port>7001</port>

<!-- domain的登录名 -->

<login>weblogic</login>

<!-- domain的密码 -->

<password>123QWe!@#</password>

</weblogic-target>

</weblogic-targets>

</config>

重新选择该项,发现页面有反应了,第一个坑至此算解决完了!!!

别忘了检查前面的设置对不对,有可能没保存

看到下面这个配置项中的Environment项我突然明白上面配置的configuration.xml中的<weblogic-target>是什么意思(并非之前猜测的集群配置),如果配置了多个<weblogic-target>标签,下面的Environment选项则有多个选项,选择自己需要的domain就行了!!!

保存成功后执行构建(跟之前一样),去看jenkins控制台吧!

若上图中的Targets参数不为空,则jenkins控制台输出为(一部分):

/opt/jdk1.6.0_45/bin/java-Xms256M -Xmx1024M -cp /bea/wlserver_10.3/server/lib/weblogic.jarweblogic.Deployer -debug -stage -remote -verbose -upload -name EBT-WX-UAT-source /root/.jenkins/workspace/EBT-WX-UAT/target/EBT.war -targets AdminServer(或其他文本框中输入的值) -adminurl t3://10.1.1.66:7001-user weblogic -password 123QWe!@# -deploy

(由此看出jenkins往weblogic部署war包是直接通过命令部署)

不知道为啥,只要带上Targets参数就部署报错,一开始也不知道是因为这个参数导致部署失败,所以查了一下weblogic用命令部署war包的命令,都没有用targets参数的,所以尝试清空上图中的Targets的值,可以看到jenkins控制台输出的命令为:

/opt/jdk1.6.0_45/bin/java-Xms256M -Xmx1024M -cp /bea/wlserver_10.3/server/lib/weblogic.jarweblogic.Deployer -debug -stage -remote -verbose -upload -name EBT-WX-UAT-source /root/.jenkins/workspace/EBT-WX-UAT/target/EBT.war -targets  -adminurl t3://10.1.1.66:7001 -user weblogic-password 123QWe!@# -deploy

可以看到-targets参数后面已经没值了,部署成功!!!

注意:weblogic控制台这里一定要是释放配置的状态!!!否则你别想用jenkins部署成功!

这算是第二个坑吧

Ant编译遇到的坑

build.xml尽量用eclipse或者其他开发工具倒出来!

此时项目下会生成一个build.xml文件,执行ant命令时默认是build,只编译,不会打war包,需要加上这种配置。

我的配置

<?xml version="1.0"encoding="UTF-8" standalone="no"?>

<!-- WARNING: Eclipse auto-generatedfile.

Any modifications will beoverwritten.

To include a user specificbuildfile here, simply create one in the same

directory with the processinginstruction <?eclipse.ant.import?>

as the first entry and export thebuildfile again. -->

<project basedir="."default="war" name="EBT">

<!--

需要指定使用eclipse里面的jdtcompile编译!!!

解决方案:http://www.cnblogs.com/hoojo/p/use_eclipse_ant_javac_JDT_compiler_class.html

-->

<property name="build.compiler"value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

<property environment="env"/>

<property name="debuglevel"value="source,lines,vars"/>

<property name="target" value="1.6"/>

<property name="source" value="1.6"/>

<path id="EBT.classpath">

<pathelement location="build/classes"/>

<filesetdir="WebContent/WEB-INF/lib">

<include name="*.jar"/>

</fileset>

</path>

<target name="init">

<mkdir dir="build/classes"/>

<copy includeemptydirs="false"todir="build/classes">

<fileset dir="src/main/java">

<excludename="**/*.launch"/>

<exclude name="**/*.java"/>

</fileset>

</copy>

<copy includeemptydirs="false"todir="build/classes">

<fileset dir="src/main/resources">

<excludename="**/*.launch"/>

<excludename="**/*.java"/>

</fileset>

</copy>

<copy includeemptydirs="false"todir="build/classes">

<fileset dir="src/test/java">

<excludename="**/*.launch"/>

<excludename="**/*.java"/>

</fileset>

</copy>

</target>

<target name="clean">

<delete dir="build/classes"/>

</target>

<target depends="clean" name="cleanall"/>

<target depends="build-subprojects,build-project"name="build"/>

<target name="build-subprojects"/>

<target depends="init" name="build-project">

<echo message="${ant.project.name}: ${ant.file}"/>

<javac debug="true" debuglevel="${debuglevel}"destdir="build/classes" includeantruntime="false"source="${source}" target="${target}"encoding="UTF-8">

<src path="src/main/java"/>

<src path="src/main/resources"/>

<src path="src/test/java"/>

<!--该参数用来解决使用sun的内部api时编译报错!!! -->

<compilerargline="-XDignore.symbol.file"/>

<classpath refid="EBT.classpath"/>

</javac>

</target>

<target description="Build all projects which reference thisproject. Useful to propagate changes."name="build-refprojects"/>

<!--打war包-->

<targetname="war" depends="build">

<warwarfile="${basedir}/target/EBT.war"webxml="${basedir}/WebContent/WEB-INF/web.xml">

<filesetdir="WebContent"/>

<classesdir="build/classes"/>

</war>

</target>

</project>

上面红色字体需要特别注意,在Ant编译时遇到的坑:

1.    如果java代码中用到了Sun内部的api时会编译报错

需要该配置<compilerarg line="-XDignore.symbol.file"/>

2.    Ant编译时报GBK乱码错误需要增加该参数

encoding="UTF-8"

3.    Ant编译时报什么“泛型无法转换无法确定<X>X的类型参数;对于上限为 T,java.lang.Object的类型变量 X不存在唯一最大实例”(这个是最严重的bug,网上对该bug建议最多的是对泛型强转,我们这报错的地方太多改不限时;另外一个方法是不使用JDK进行编译,而是用eclipse(ecj[Eclipse Compiler forJava])的JDT(查寻得知eclipse的JDTCompiler也实现了java的编译规范,作用同javac,编译后的class文件java虚拟机也能用)进行编译。

注意,想用JDT编译有两种方法,推荐方法一和方法二,更简单

方法一:

直接把tomcat安装目录lib目录下的ecj开头的jar包copy到ant安装目录的lib目录

方法二:

去maven仓库搜索ecj,选择Eclipse ECJ

一开始我用的是4.5版本,copy到ant下的lib目录执行ant命令还是报错,思路是对的,可能版本不对,试着降低版本直接用了4.2.2版本copy进去,重新执行ant命令,成功!!!

方法二:

需要去eclipse或者Myeclipse的安装目录的plugin目录中找到以下几个jar)

1.    org.eclipse.jdt.compiler.tool开头jar包

2.    org.eclipse.jdt.core开头jar包

3.    org.eclipse.jdt.debug.ui开头jar包

4.    jdtCompilerAdapter.jar这个jar包需要从org.eclipse.jdt.core开头jar包中找到(麻烦)

注:这几个jar包当时从我机器上的eclipse安装目录的pulugin中找这几个jar包copy到ant安装目录的lib目录下执行ant命令还是报错,后来又从别人Myeclipse2014安装目录的pulugin中找到,重复copy步骤,重新执行ant命令编译,成功!!!

如何修改该编译Bug:

1.    将方法一中的ecj-4.2.2.jar或方法二中的几个jar包copy到ant安装目录的lib目录下

2.    build.xml中增加

<propertyname="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>配置,强制更改ant的编译方式为JDT

好了,用ant重新编译吧,再有错你来找我!!!

现在只想静静。。。

至此所有的坑都没了。。。

jenkins自动部署到tomcat/weblogic相关推荐

  1. jenkins自动部署项目到tomcat机器问题之jenkins打版项目卡住

    jenkins自动部署项目到tomcat机器 背景: 今天测试同事在执行jenkins自动打版项目并发布到tomcat机器的时候,出现一直卡住的情况 控制台日志输出如下 jenkins机器配置: je ...

  2. jenkins部署java_在Window上使用Jenkins自动部署和上传快照Java工件

    jenkins部署java 这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序(使用MYSQL DB和基于Hibernate ORM在基 ...

  3. 在Window上使用Jenkins自动部署和上传快照Java工件

    这篇文章将展示如何使用Jenkins Continuous Integration自动执行Java Web应用程序(使用MYSQL DB和基于Hibernate ORM在基于REST的Jersey2 ...

  4. jenkins自动部署配置

    jenkins自动部署配置 新建item 在jenkins首页新建item->选择构建一个maven项目->确定 新页面中: 源码管理:选择Git-> Repository URL: ...

  5. linux jenkins部署脚本,使用Jenkins 自动部署发布

    使用Jenkins自动部署发布,继Jenkins部署篇后, #注意:jenkins路径会有差异,不用在意这个,同一个版本部署2次,发现了2个不同的目录结构,很诧异. jenkins build玩war ...

  6. hexo使用jenkins自动部署到阿里云

    hexo使用jenkins自动部署到阿里云 本地安装hexo npm install hexo-cli -g hexo init blog cd blog npm install hexo serve ...

  7. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  8. Maven环境下实现Web工程自动部署到Tomcat

    概述 : 每次修改完web工程是不是都要重新cp来,cp去到webapps目录中部署,确实是非常的麻烦,重复的工作做来做去浪费了时间不说,还容易把人搞得非常烦躁,那么,这里记录下怎样把web工程自动的 ...

  9. 使用Jenkins自动部署博客

    使用Jenkins自动部署博客 title: 使用Jenkins自动部署博客 toc: true comment: true date: 2017-12-17 19:48:10 tags: ['Jen ...

最新文章

  1. 如何找出应用程序未使用绑定变量
  2. JDK 1.4 主要新特性
  3. CentOS6.7安装mysql5.7
  4. 招行率先落地房贷新政 其他银行细则仍在制定
  5. 如何在博客等文章中添加带有滚动条的文本框
  6. 最著名的10位程序员,你都知道吗?
  7. 函数判断的和是用android,WPJAM Basic 内置的系统和设备判断函数
  8. lammps建模_lammps建模方法,即生成data文件
  9. 谷歌浏览器html调试iphone11,FireFox chrome 模拟手机浏览器 调试手机网页
  10. →箭头符号大全复制_特殊符号大全,想要那个自己来复制
  11. 本地上运行正常,但是部署到了服务器却一直验证码错误(Nginx反向代理导致的session丢失问题)
  12. 地磅无人值守称重系统怎样实现自动发货的?
  13. 免费多平台思维导图软件
  14. 信息系统监理师题库_软考信息系统监理师题库
  15. Scylladb学习笔记
  16. 【等保小知识】等保、分保以及关保分别是什么意思?
  17. 深入了解JVM之内存区域(一)
  18. vba 发送邮件 html,VBA自动发送邮件+内容+附件
  19. OAuth2.0实现自定义颁发token
  20. win 10 hosts 文件位置

热门文章

  1. Android Studio常用快捷键
  2. 工件表面图案正反及混料检测流程
  3. 网络推广优化专员工作职责,网络推广专员工作内容
  4. md+邮件服务器+334错误,邮件发送,无尽的501错误。TCP发送邮件解决方案
  5. 卷积的数学理解和图像处理
  6. 以 gensim 訓練中文詞向量
  7. 人工智能在刷题学海战术中的作用
  8. 利用JavaScript实现发表、修改、删除评论
  9. 【Python】PyQt5入门
  10. 基于Matlalb使用惯性传感器融合和MPU9250估计方向(附源码)