jenkins svn tomcat ant自动部署

 这里写图片描述 
Jenkins

Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 
1、持续的软件版本发布/测试项目。 
2、监控外部调用执行的工作。 
跟其他持续集成相比,它的主要优点有: 
开源,即免费。 
支持多种平台(windows、linux、os x都支持)。 
安装、配置简单。 
Web可视化管理界面,并且有丰富的tips帮助信息。

svn

Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。

ant

是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。 
Ant的构建文件: 
当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每个人使用。Ant构建文件默认名为build.xml,也可以取其他的名字。只不过在运行的时候把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中。这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。

(1) src存放文件。

(2) class存放编译后的文件。

(3) lib存放第三方JAR包。

(4) dist存放打包,发布以后的代码。

Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所依赖的目标。每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。

(1)核心任务。核心任务是Ant自带的任务。

(2)可选任务。可选任务是来自第三方的任务,因此需要一个附加的JAR文件。

(3)用户自定义的任务。用户自定义的任务是用户自己开发的任务。

Jenkins 的安装: 
进入https://jenkins.io/ 
直接下载war包即可。 
将war直接放到tomcat下的webapps。 
直接在浏览器输入 192.168.0.219:8080/Jenkins 
就可以进入Jenkins界面。 
在进入jenkins界面时,会自动下载插件。

ant 的安装: 
下载地址:http://ant.apache.org/ 
配置环境变量 
vim /etc/profile

export ANT_HOME=/usr/local/ant
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$ANT_HOME/bin:$PATH
  • 1
  • 2

查看

#使生效
source /etc/profile
#查看版本
ant -version
  • 1
  • 2
  • 3
  • 4

svn的安装

#安装yum install -y subversion#验证安装版本svnserve --version
#创建SVN 版本库mkdir /opt/svndatasvnadmin create /opt/svndata/test  #test为版本库名称#创建版本库后,在这个test目录下会生成3个配置文件authz  passwd  svnserve.conf1)svnserve.conf:  svn服务配置文件下。
(2)passwd: 用户名口令文件。
(3)authz: 权限配置文件。 
svnserve.conf 文件, #该文件配置项分为以下5项:anon-access: #控制非鉴权用户访问版本库的权限。auth-access: # 控制鉴权用户访问版本库的权限。password-db: #指定用户名口令文件名。authz-db:#指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。realm:#指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的认证域相同,建议使用相同的用户名口令数据文件Passwd 文件 :我们在svnserve.conf文件里启用这个文件。然后配置如下:cat passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.[users]
# harry = harryssecret
# sally = sallyssecret
test = test   #新建用户
test1 = test1```
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

authz 文件

#在网上找到一个很好的配置例子:
[groups]
admin = john, kate
devteam1 = john, rachel, sally
devteam2 = kate, peter, mark
docs = bob, jane, mike
training = zak
--这里把不同用户放到不同的组里面,下面在设置目录访问权限的时候,用目录来操作就可以了。# 为所有库指定默认访问规则
# 所有人可以读,管理员可以写,危险分子没有任何权限
[/]  --对应我测试里的:/opt/svndata 目录
* = r
@admin = rw# 允许开发人员可以完全访问他们的项目版本库
[proj1:/]
@devteam1 = rw
[proj2:/]
@devteam2 = rw
[bigproj:/]
@devteam1 = rw
@devteam2 = rw
trevor = rw# 文档编写人员对所有的docs目录有写权限
[/trunk/doc]
@docs = rw# 培训人员可以完全访问培训版本库
[TrainingRepos:/]
@training = rw```
下面我们来配置我们的authz文件:cat authz
[groups]
admin = test
dev=test1
[davesvn:/]
@admin = rw
@dev = rw
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

启动和停止SVN服务

#启动SVN服务:svnserve -d -r /opt/svndata#-d表示后台运行#-r 指定根目录是 /opt/svndata
#停止SVN服务:
ps -aux |grep svn
kill -9  进程号
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

客户端连接 
新建测试目录svn,进入后右键,点checkout: 
填写服务器地址 
这里写图片描述

配置Jenkins 
1, 新建一个项目,名字自己定义, 
2, 选择构建一个自由风格的软件项目 
源码管理: 这里选择Subversion

也就是什么时候开始自动构建。我这里选择Poll SCM,该方案能定时检代码版本库是否有新的提交,如果有则自动构建。我设置的日程表是“H/5 * * * *”,即5分钟自动检查一次代码版本库是否有新的提交。 
这里写图片描述 
Schedule的配置规则是有5个空格隔开的字符组成,从左到右分别代表:分 时 天 月 年。代表所有,0 6,18 * * 表示“在任何年任何月任何天的6和18点0分”进行构建。 
构建: 
这里写图片描述

构建后操作: 
首先Jenkins提供了一个发布的插件deploy plugin,来帮助我们实现远程部署,这个插件默认是不安装的,所以需要我们自己手动的来安装。 
手动安装deploy plugin 插件,我们可以在线安装,也可以通过官方下载相关插件,下载地址:https://updates.jenkins-ci.org/download/plugins,

  1. 系统管理->管理插件->可选插件->搜索“Deploy to container Plugin”,勾选插件直接安装,等着Jenkins自动安装完成。此时我们打开我们之前新建的项目选择“增加构建后的操作”中增加了一项“Deploy war/ear to a Container”,将我们的war和ear工程部署到容器。

  2. 我们添加一个deploywar/ear to a container选择,Jenkins中构建后操作多出一个发布选项 
    这里写图片描述 
    记住这里要把应用服务器的防火墙关闭。 
    tomcat默认的登录是注释的,我们需要打开。在tomcat/conf/tomcat-users.xml下添加,

    tomcat-users.xml

<role rolename="tomcat" /> <role rolename="admin"/> <role rolename="admin-gui"/> <role rolename="manager"/> <role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="tomcat" password="tomcat" roles="tomcat,admin-gui,admin,manager,manager-gui,manager-script"/>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

找到Jenkins仓库 在workspace下面会在你构建的时候生成你构建项目名称,然后在你项目名称下面拷入build.xml

<!-- 定义一个工程,默认任务为warFile。 -->  
<project name="test" default="warFile" basedir=".">  <echo>开始构建</echo><!-- 定义属性,打成war包的名称。 -->  <property name="warFileName" value="test.war"></property>  <property name="catalina.home" value="/usr/local/tomcat/" /><!-- 定义路径,编译java文件时用到的jar包。 -->  <path id="project.lib">  <fileset dir="${basedir}/WebContent/WEB-INF/lib">  <include name="**/*.jar"/>  </fileset>  </path>  <!-- 定义任务,清空任务:清空原有的class文件,创建新的build路径。 -->  <target name="clean">  <delete dir="${basedir}/build" />  <mkdir dir="${basedir}/build" />  </target>  <!-- 定义任务,编译src文件夹中的java文件,编译后的class文件放到创建的文件夹下。 -->  <target name="compile" depends="clean">  <javac srcdir="${basedir}/src" destdir="${basedir}/build" includeantruntime="false">  <classpath refid="project.lib"/>  <compilerarg line="-encoding UTF-8" />  
<compilerarg value="-XDignore.symbol.file"/> </javac>  </target>  <!-- 定义默认任务,将class文件集合成jar包。 -->  <echo>定义默认任务,将class文件集合成jar包。</echo><target name="warFile" depends="compile">  <!-- 删除原有war包。 -->  <delete dir="${basedir}/${warFileName}" />  <!-- 建立新war包。 -->  <war destfile="${basedir}/${warFileName}" webxml="${basedir}/WebContent/WEB-INF/web.xml">  <!-- 将非jar和非class文件拷贝到war包的对应路径下。 -->  <fileset dir="${basedir}/WebContent">  <include name="**/**.*" />  <exclude name="**/*.jar"/>  <exclude name="**/*.class"/>  </fileset>  <!-- 将jar和class文件拷贝到war包的对应路径下。 -->  <lib dir="${basedir}/WebContent/WEB-INF/lib" />  <classes dir="${basedir}/build" />  </war>  </target>  </project>  
-------------------------------------------------------------------------

111

<?xml version="1.0" encoding="UTF-8"?><!-- 定义一个工程,默认任务为warFile。 -->
<project name="pactreq" default="warFile" basedir="."><!-- 定义属性,打成war包的名称。 --><property name="warFileName" value="pactreq.war"></property><!-- 定义路径,编译java文件时用到的jar包。 --><path id="project.lib"><fileset dir="${basedir}/WebContent/WEB-INF/lib"><include name="**/*.jar"/></fileset></path> <!-- 定义任务,清空任务:清空原有的class文件,创建新的build路径。 --><target name="clean"><delete dir="${basedir}/build" /><mkdir dir="${basedir}/build" /></target> <!-- 定义任务,编译src文件夹中的java文件,编译后的class文件放到创建的文件夹下。 --><target name="compile" depends="clean"><javac srcdir="${basedir}/src" destdir="${basedir}/build" includeantruntime="false"><classpath refid="project.lib"></classpath><compilerarg value="-Xlint:unchecked" /></javac><copy todir="${basedir}/build"><fileset dir="${basedir}/src"><include name="**/**.*" /><exclude name="**/*.java"/><exclude name="**/*.class"/></fileset>
</copy></target> <!-- 定义默认任务,将class文件集合成jar包。 --><target name="warFile" depends="compile"><!-- 删除原有war包。 --><delete dir="${basedir}/${warFileName}" /><!-- 建立新war包。 --><war destfile="${basedir}/${warFileName}" webxml="${basedir}/WebContent/WEB-INF/web.xml"><!-- 将非jar和非class文件拷贝到war包的对应路径下。 --><fileset dir="${basedir}/WebContent"><include name="**/**.*" /><exclude name="**/*.jar"/><exclude name="**/*.class"/></fileset><!-- 将jar和class文件拷贝到war包的对应路径下。 --><lib dir="${basedir}/WebContent/WEB-INF/lib" /><classes dir="${basedir}/build" /></war> </target> </project> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

553 mail from must equal authorized user解决方法

在配置发送邮件通知&#xff0c;验证其正确性时&#xff0c;出现"553 mail from must equal authorized user"提示的错误&#xff1b; 原因在于没有在"系统管理&#xff08;Manage Jenkins&#xff09;"的"系统设置&#xff08;Configure system&…

[Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)...

创建临时配置文件以在设备上运行您的应用程序而无需Xcode。在开始之前&#xff0c;您需要一个App ID&#xff0c;一个分发证书和多个注册设备。 有关完整的临时配置文件工作流程&#xff0c;请转到Xcode帮助中的分发到已注册设备&#xff08;iOS&#xff0c;tvOS&#xff0c;wa…

解决做好一个机器学习项目的3个问题

机器学习是目前人工智能最令人激动的研究方向之一。我们可能更关注机器学习算法的实现细节&#xff0c;沉浸于机器学习所需要的数学功底&#xff0c;但对于机器学习从业者来说&#xff0c;如何更好更快速的实现一个机器学习项目更值得关注。 正如吴恩达在《机器学习》这门课中所…

[币严区块链]以太坊(ETH)Dapp开发入门教程之宠物商店领养游戏

阅读本文前&#xff0c;你应该对以太坊、智能合约有所了解&#xff0c;如果你还不了解&#xff0c;建议你先看以太坊是什么 除此之外&#xff0c;你最好还了解一些HTML及JavaScript知识。 本文通过实例教大家来开发去中心化应用&#xff0c;应用效果如图: 项目背景 Pete有一个…

怎么通俗易懂地解释贝叶斯网络和它的应用?

作者&#xff1a;小杰链接&#xff1a;https://www.zhihu.com/question/28006799/answer/38996563来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。英语原文&#xff1a;http://www.norsys.com/tutorials/netica/secA/tut…

SVM分类算法的基本理论问题

1.引言   随着网络技术的飞速发展和普及&#xff0c;进入了信息大爆炸的时代。信息无处不在&#xff0c;给我们的学习生活带来了诸多便捷&#xff0c;由于堪称海量的信息量&#xff0c;我们从中获取有用的信息变得困难&#xff0c;解决这一难题就是要对这些大量的信息进行分…

决策树案例理解

小王是一家著名高尔夫俱乐部的经理。但是他被雇员数量问题搞得心情十分不好。某些天好像所有人都來玩高尔夫&#xff0c;以至于所有员工都忙的团团转还是应付不过来&#xff0c;而有些天不知道什么原因却一个人也不来&#xff0c;俱乐部为雇员数量浪费了不少资金。 小王的目的是…

剑指offer-反转链表

反转链表 一、题目描述 输入一个链表&#xff0c;反转链表后&#xff0c;输出新链表的表头。 &#xff08;看过答案和测试之后&#xff0c;题目隐藏条件是要求链表是不带头结点的&#xff09; 二、题目思路 就是用三个指针&#xff0c;head、pre、next&#xff0c;head之前都是…

从决策树学习谈到贝叶斯分类算法、EM、HMM

引言 最近在面试中(点击查看&#xff1a;我的个人简历&#xff0c;求职意向&#xff0c;择司标准)&#xff0c;除了基础 & 算法 & 项目之外&#xff0c;经常被问到或被要求介绍和描述下自己所知道的几种分类或聚类算法(当然&#xff0c;这完全不代表你将来的面试中会遇…

计算机网络与协议

计算机网络&#xff1a; TCP/IP中只要是能够设定IP地址的计算机就成为主机 网络按其规模可分为&#xff1a; WAN&#xff08;广域网&#xff09;&#xff1a;覆盖多个远距离区域的远程网络 MAN&#xff08;城域网&#xff09;&#xff1a;比广域网小一级&#xff0c;连接整个城…

对线性回归、逻辑回归、各种回归的概念学习

回归问题的条件/前提&#xff1a; 1&#xff09; 收集的数据 2&#xff09; 假设的模型&#xff0c;即一个函数&#xff0c;这个函数里含有未知的参数&#xff0c;通过学习&#xff0c;可以估计出参数。然后利用这个模型去预测/分类新的数据。 1. 线性回归 假设 特征 和 结果 都…

XGBoost入门及实战

kaggle比赛必备算法XGBoost入门及实战 xgboost一直在kaggle竞赛江湖里被传为神器&#xff0c;它在对结构化数据的应用占据主导地位&#xff0c;是目前开源的最快最好的工具包&#xff0c;与常见的工具包算法相比速度提高了10倍以上&#xff01; XGBoost is an implementation o…

几个常用算法的适应场景及其优缺点

机器学习算法太多了&#xff0c;分类、回归、聚类、推荐、图像识别领域等等&#xff0c;要想找到一个合适算法真的不容易&#xff0c;所以在实际应用中&#xff0c;我们一般都是采用启发式学习方式来实验。通常最开始我们都会选择大家普遍认同的算法&#xff0c;诸如SVM&#x…

EM算法 案例量则

例子一&#xff1a;理论&#xff1a; 简版&#xff1a;猜&#xff08;E-step&#xff09;,反思&#xff08;M-step&#xff09;,重复&#xff1b; 啰嗦版&#xff1a; 你知道一些东西&#xff08;观察的到的数据&#xff09;&#xff0c; 你不知道一些东西&#xff08;观察不到…

C#编写TensorFlow人工智能应用 TensorFlowSharp

TensorFlowSharp入门使用C#编写TensorFlow人工智能应用学习。 TensorFlow简单介绍 TensorFlow 是谷歌的第二代机器学习系统&#xff0c;按照谷歌所说&#xff0c;在某些基准测试中&#xff0c;TensorFlow的表现比第一代的DistBelief快了2倍。 TensorFlow 内建深度学习的扩展支持…

马尔可夫链 (Markov Chain)是什么鬼

作者&#xff1a;红猴子链接&#xff1a;https://www.zhihu.com/question/26665048/answer/157852228来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。马尔可夫链 &#xff08;Markov Chain&#xff09;是什么鬼 它是随机…

主题模型-LDA浅析

个性化推荐、社交网络、广告预测等各个领域的workshop上都提到LDA模型&#xff0c;感觉这个模型的应用挺广泛的&#xff0c;会后抽时间了解了一下LDA&#xff0c;做一下总结&#xff1a; &#xff08;一&#xff09;LDA作用 传统判断两个文档相似性的方法是通过查看两个文档共…

dorado-SplitSpanel控件

1.这是一个界面布局控件 2.分为SideControl边区域和MainControl主区域 3.常用属性 3.1 collapsed&#xff1a;打开页面时&#xff0c;边区域是否显示 3.2 position&#xff1a;边区域占总的大小 转载于:https://www.cnblogs.com/ergougougou/p/10438752.html

CAFFE怎样跑起来

0、参考文献 [1]caffe官网《Training LeNet on MNIST with Caffe》; [2]薛开宇《读书笔记4学习搭建自己的网络MNIST在caffe上进行训练与学习》&#xff08;[1]的翻译版&#xff0c;同时还有作者的一些注解&#xff0c;很赞&#xff09;; 1、*.sh文件如何执行&#xff1f; ①方…