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.pswp.cn/news/387378.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387378.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387378.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Shell02

局部變量 1、普通字符串變量 變量名value 變量名value #單引號中不進行變量解析&#xff0c;原樣輸出&#xff0c;應用不多 變量名"value" #雙引號會解析變量 例&#xff1a; a1123 a2234 a3"345" echo "a1$a1" echo "a2$a2&quo…

553 mail from must equal authorized user解決方法

在配置發送郵件通知&#xff0c;驗證其正確性時&#xff0c;出現"553 mail from must equal authorized user"提示的錯誤&#xff1b; 原因在于沒有在"系統管理&#xff08;Manage Jenkins&#xff09;"的"系統設置&#xff08;Configure system&…

3.1 讀入一個參數

已知正方形的邊長&#xff0c;求出其面積。 輸入樣例&#xff1a; 1 2 3 4 輸出樣例&#xff1a; 1 4 9 16 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交時&#xff0c;注釋此句i…

[Apple開發者帳戶幫助]八、管理檔案(2)創建臨時配置文件(iOS,tvOS,watchOS)...

創建臨時配置文件以在設備上運行您的應用程序而無需Xcode。在開始之前&#xff0c;您需要一個App ID&#xff0c;一個分發證書和多個注冊設備。 有關完整的臨時配置文件工作流程&#xff0c;請轉到Xcode幫助中的分發到已注冊設備&#xff08;iOS&#xff0c;tvOS&#xff0c;wa…

Ant Build.xml

題記&#xff1a;用 Eclipse 3 &#xff0b;Tomcat 5 做東東&#xff0c;用起來還是比較爽。但是調試時每次手動Deploy到Tomcat中&#xff0c;比較麻煩。今用Ant來完成之。 1。打開Eclipse&#xff0c;在項目的根路徑下建立builds.xml文件。 這個是Ant配置的關鍵。其內容如下&…

3.2 讀入兩個參數

計算兩個整數的差。 輸入樣例&#xff1a; 1 3 5 7 輸出樣例&#xff1a; -2 -2 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交時&#xff0c;注釋此句int num1, num2;while (cin &g…

解決做好一個機器學習項目的3個問題

機器學習是目前人工智能最令人激動的研究方向之一。我們可能更關注機器學習算法的實現細節&#xff0c;沉浸于機器學習所需要的數學功底&#xff0c;但對于機器學習從業者來說&#xff0c;如何更好更快速的實現一個機器學習項目更值得關注。 正如吳恩達在《機器學習》這門課中所…

數據挖掘的相關知識例子

一、貝葉斯 貝葉斯定理由英國數學家貝葉斯 ( Thomas Bayes 1702-1761 ) 發展&#xff0c;用來描述兩個條件概率之間的關系&#xff0c;比如 P(A|B) 和 P(B|A)。按照乘法法則&#xff0c;可以立刻導出&#xff1a;P(A∩B) P(A)*P(B|A)P(B)*P(A|B)。如上公式也可變形為&#xf…

3.3 1!到n!的和

求1! 2! ... n! 的結果。 輸入樣例&#xff1a; 3 6 輸出樣例 9 873 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交時&#xff0c;注釋此句int num;while (cin >> num){int…

[幣嚴區塊鏈]以太坊(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…

3.4 等比數列

已知q與n&#xff0c;求等比數列之和&#xff1a;1 q q^2 ... q^n 輸入樣例&#xff1a; 6 0.3 5 1.3 輸出樣例&#xff1a; 1.428 12.756 #include<iostream> #include<fstream> #include<cmath> using namespace std;int main() {ifstream cin(…

SVM分類算法的基本理論問題

1.引言   隨著網絡技術的飛速發展和普及&#xff0c;進入了信息大爆炸的時代。信息無處不在&#xff0c;給我們的學習生活帶來了諸多便捷&#xff0c;由于堪稱海量的信息量&#xff0c;我們從中獲取有用的信息變得困難&#xff0c;解決這一難題就是要對這些大量的信息進行分…

3.5 斐波那契數

求第n項的斐波那契數。 1 1 2 3 5 8 ... 輸入樣例&#xff1a; 6 10 輸出樣例&#xff1a; 8 55 #include<iostream> #include<fstream> #include<cmath> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交時&#xff…

決策樹案例理解

小王是一家著名高爾夫俱樂部的經理。但是他被雇員數量問題搞得心情十分不好。某些天好像所有人都來玩高爾夫&#xff0c;以至于所有員工都忙的團團轉還是應付不過來&#xff0c;而有些天不知道什么原因卻一個人也不來&#xff0c;俱樂部為雇員數量浪費了不少資金。 小王的目的是…

3.6 最大公約數

輸入樣例&#xff1a; 6 5 18 22 輸出樣例&#xff1a; 1 6 #include<iostream> #include<fstream> #include<cmath> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交時&#xff0c;注釋此句int m, n;while (cin >&…

劍指offer-反轉鏈表

反轉鏈表 一、題目描述 輸入一個鏈表&#xff0c;反轉鏈表后&#xff0c;輸出新鏈表的表頭。 &#xff08;看過答案和測試之后&#xff0c;題目隱藏條件是要求鏈表是不帶頭結點的&#xff09; 二、題目思路 就是用三個指針&#xff0c;head、pre、next&#xff0c;head之前都是…

3.7 最小公倍數

先各自除以最大公約數&#xff0c;然后將兩個結果和最大公約數相乘&#xff0c;即為最小公倍數。 輸入樣例&#xff1a; 6 5 18 12 輸出樣例&#xff1a; 30 36 #include<iostream> #include<fstream> using namespace std;int gcd(int, int);int main() {ifs…

聚類、K-Means、例子、細節

聚類#####今天說聚類&#xff0c;但是必須要先理解聚類和分類的區別&#xff0c;很多業務人員在日常分析時候不是很嚴謹&#xff0c;混為一談&#xff0c;其實二者有本質的區別。分類其實是從特定的數據中挖掘模式&#xff0c;作出判斷的過程。比如Gmail郵箱里有垃圾郵件分類器…

圖的廣度優先遍歷

#include <iostream> #include <vector> #include <queue> using namespace std;const int MAXV 1000; const int INF 1000000000; //下標代表點,數組元素代表連接的點 //圖的鄰接表 vector<int> Adj[MAXV]; //頂點數 int n;//DFS 如果頂點i已經被…