Jenkins學習之旅

學習博客:http://www.cnblogs.com/zz0412/tag/jenkins/html

       https://jenkins.io/doc/java

       http://www.cnblogs.com/horizonli/tag/jenkins/node

1. 傳統網站部署的流程

傳統的網站部署,你們在運維過程當中,網站部署是運維的工做之一,網站部署的流程大體分爲:python

需求分析—原型設計—開發代碼—提交測試—內網部署—確認上線—備份數據—外網更新-最終測試,若是發現外網部署的代碼有異常,須要及時回滾。(以下圖所示)linux

案例演示:部署LAMP網站,同時更新網頁內容,檢查效果!

更新完後的網站內容:

1. 目前主流網站部署的流程

目前主流網站部署方法,經過Hudson/Jenkins工具平臺實現全自動部署+測試,是一個可擴展的持續集成引擎,是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。Jenkins很是易於安裝和配置,簡單易用。

簡單來講方便以下人員:

1) 開發人員:寫好代碼,不須要本身進行源碼編譯、打包等工做,直接將代碼分支存放在SVN、GIT倉庫便可。

2) 運維人員:減輕人工干預的錯誤率,同時解放運維人員繁雜的上傳代碼、手動備份、更新。

3) 測試人員:能夠經過jenkins進行簡單的代碼及網站測試。

1. Jenkins持續集成簡介

持續集成(Continuous Integration)是一種軟件開發實踐,對於提升軟件開發效率並保障軟件開發質量提供了理論基礎。Jenkins 是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使持續集成變成可能。本文正是從持續集成的基本概念入手,經過具體實例,介紹瞭如何基於 Jenkins 快速搭建持續集成環境。

Jenkins是一個可擴展的持續集成引擎,是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。Jenkins很是易於安裝和配置,簡單易用。web

2. 持續集成意義

1) 持續集成中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減小重複過程以節省時間、費用和工做量;shell

2) 持續集成保障了每一個時間點上團隊成員提交的代碼是能成功集成的。換言之,任什麼時候間點都能第一時間發現軟件的集成問題,使任意時間發佈可部署的軟件成爲了可能;apache

3) 持續集成還能利於軟件自己的發展趨勢,這點在需求不明確或是頻繁性變動的情景中尤爲重要,持續集成的質量能幫助團隊進行有效決策,同時創建團隊對開發產品的信心。tomcat

3. 持續集成組件

1) 一個自動構建過程,包括自動編譯、分發、部署和測試;bash

2) 一個代碼存儲庫,即須要版本控制軟件來保障代碼的可維護性,同時做爲構建過程的素材庫,例如SVN、GIT代碼庫;

3) 一個jenkins持續集成服務器(123.57.11.203服務器就是一個配置簡單和使用方便的持續集成服務器)

4. Jenkins安裝部署

地址http://mirrors.jenkins-ci.org/下載適合的Jenkins版本。

Linux穩定版的Jenkins地址爲:http://ftp.yz.yamagata-u.ac.jp/pub/misc/jenkins/war-stable/1.651.2/jenkins.war 

因爲Jenkins屬於一個JAVA 代碼,須要java容器才能運行jenkins,因此須要安裝JDK+Tomcat,方法以下:

1) JAVA JDK安裝

#下載相應的jdk軟件包,而後解壓安裝,我這裏包名稱爲:jdk-7u25-linux-x64.tar.gz

tar -xzf  jdk-7u25-linux-x64.tar.gz  ;mkdir -p /usr/java/ ;mv jdk1.7.0_25/ /usr/java/

#而後配置環境變量,這樣能夠任何地方引用jdk,以下配置:

#vi /etc/profile 最後面加入如下語句:

export JAVA_HOME=/usr/java/jdk1.7.0_25

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

#source /etc/profile   #使環境變量立刻生效

#java  --version    #查看java版本,看到jdk1.7.0_25版本即表明java jdk安裝成功。

2) Tomcat安裝配置

#官方網站下載tomcat 6.0.30或者其餘版本:

wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-6/v6.0.45/bin/apache-tomcat-6.0.45.tar.gz 

tar xzf  apache-tomcat-6.0.45.tar.gz

#直接解壓就可使用,解壓完成執行:

mv apache-tomcat-6.0.45  /usr/local/tomcat

把獲得的war包直接扔到tomcat下webapps/ROOT/下,啓動tomcat,Jenkins就安裝完畢!

rm  -rf  /usr/local/tomcat/webapps/* ;

mkdir  -p /usr/local/tomcat/webapps/ROOT/;

mv jenkins.war /usr/local/tomcat/webapps/ROOT/;

 

5. Jenkins配置演示

在學習Jenkins以前咱們先來了解幾個經常使用的開發代碼、構建代碼的幾個名詞:MAKE、ANT、MAVEN、Eclipse、Jenkins

1) Make工具

Linux或者Windows最原始的編譯工具,在linux下編譯程序經常使用make(Windows下對應的工具爲nmake)。它負責組織構建的過程,負責指揮編譯器如何編譯,鏈接器如何鏈接,最後生成一個可用的文件。

2) Ant工具

Make編譯一些比較複雜的工具使用起來不靈活,語法很難理解,延伸出ant工具。

3) Maven工具

Maven工具是對ant工具的進一步改進,在make工具中,若是咱們要編譯某些源文件,首先要安裝編譯器等工具。有時候須要不一樣版本的編譯器,在java的編譯器須要不一樣的各類包的支持,若是把每一個包都下載下來,在makefile中進行配置制定,當須要的包很是多時,很難管理。

Maven像make同樣,是個構建(build)工具,它如何調用各類不一樣的編譯器鏈接器等呢?使用Maven plugin (maven 插件)。

4) Jenkins工具

Maven已經很強大了,那Jenkins是個什麼東西?

其實Maven仍是不夠強大。Maven能夠控制編譯,控制鏈接,能夠生成各類報告,能夠進行代碼測試。

但是如何控制這個流程呢? 編譯仍是先鏈接?先進行代碼測試,仍是先生成報告?可使用腳原本對maven進行控制,實現這些流程的控制。

5) Eclipse工具

 

Eclipse 是一個開放源代碼的、基於Java的可擴展開發平臺。就其自己而言,它只是一個框架和一組服務,用於經過插件組件構建開發環境。幸運的是,Eclipse 附帶了一個標準的插件集,包括Java開發工具(Java Development Kit,JDK)。

6) Maven項目對象模型POM (Project Object Model),能夠經過一小段描述信息來管理項目的構建,報告和文檔的軟件項目管理工具Maven 除了以程序構建能力爲特點以外,還提供高級項目管理工具。

7) POMMaven項目中的文件,使用XML表示,名稱叫作pom.xml。在Maven中,當談到Project的時候,不只僅是一堆包含代碼的文件。一個Project每每包含一個配置文件,包括了與開發者有關的,缺陷跟蹤系統,組織與許可,項目的URL,項目依賴,以及其餘。它包含了全部與這個項目相關的東西。事實上,在Maven世界中,project能夠什麼都沒有,甚至沒有代碼,可是必須包含pom.xml文件。

8) 因爲 Maven 的缺省構建規則有較高的可重用性,因此經常用兩三行 Maven 構建腳本就能夠構建簡單的項目。因爲 Maven 的面向項目的方法,許多 Apache Jakarta 項目發文時使用 Maven,並且公司項目採用 Maven 的比例在持續增加。

安裝JDK及MAVEN工具,並在Jenkins平臺進行設置,以下步驟

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz 

tar -xzf apache-maven-3.3.9-bin.tar.gz ;mv apache-maven-3.3.9 /usr/maven/

而後設置以下:

9) 返回首頁,第一次進入裏面沒有數據,咱們須要建立項目工程job。 

10) 點擊左上角的new job,在new job頁面須要選擇job的類型,Jenkins支持幾種類型,咱們選擇「構建一個maven項目」,Job名爲:jfedu,如圖所示:

11) 點擊OK按鈕後,進會進入詳細配置界面,詳細配置界面的配置項不少,不過不用怕,大部分使用默認配置就能夠了,下面就說說咱們須要修改的幾個地方:

12) Source Code Management

由於咱們使用SVN管理源碼,因此這裏選擇Subversion,並在Repository URL中輸入咱們的SVN地址:

 

svn://123.57.11.203:8801/edu/

輸入SVN庫的URL地址後,Jenkins會自動驗證地址,並給予提示。

 

若是須要SVN用戶名和密碼:

用戶名:xxxxx

密碼:xxxxxxxx

 

13) 配置自動構建的計劃,假設咱們想讓項目晚上8點自動構建一次,只須要在Build Triggers中選擇Build periodically,並在Schedule中輸入 0 20 * * *,我配置的是每晚8點自動構建:

 

注:Schedule的配置規則是有5個空格隔開的字符組成,從左到右分別表明:分 時 天 月 年。*表明全部,0 20 * * * 表示「在任何年任何月任何天20點0分」進行構建。

14) 配置到這裏,可能有人發如今Build配置節點,有紅色錯誤信息,提示

Jenkins needs to know where your Maven2 is installed. 
Please do so from the system configuration.

如圖所示:

 

這是由於Jenkins找不到maven的緣由,點擊"system configuration",是system configuration的maven配置中添加maven目錄就OK,以下圖:

我設置了JRE 7MAVEN的安裝目錄。

點擊左下角的SAVE按鈕,保存設置,保存好全部配置後,咱們第1個job就算是完成了。

8. Jenkins手動構建

在通過上面的配置後,回到Jenkins首頁,在首頁能夠看到剛纔添加的1job,以下圖

 

點擊某1個job後後面的"Schedule a build"圖片手動構建,點擊完後,會在左邊的Build Queue或者Build Executor Status 顯示正在構建的任務,在自動構建完後,刷新頁面,就能夠看到構建結果了,如何某個項目構建失敗,點擊項目後面的構建數字(從1開始遞增)進入項目的"Console Output "能夠查看項目構建失敗的緣由。固然咱們也能夠配置把構建失敗的結果發到郵箱。

構建完成

 

9. Jenkins腳本自動化

1)點擊工程名稱-配置-構建後操做-設置Jenkins編譯打包完後,war包存放的位置,以下圖:

 

2) 而後輸入以下配置:**/target/*.war

 

3) 如上-構建觸發器-一個構建步驟,選擇Add-post-build step-Excute shell

 

4) 而後把腳本內容寫入便可

 

代碼以下:

1 rm -rf  /root/.jenkins/workspace/jfedu/target/edu.war
2 cp /root/.jenkins/workspace/jfedu/target/edu.war  /root/.jenkins/jobs/jfedu/builds/lastSuccessfulBuild/archive/target/
3 ssh  root@121.42.183.93  'bash -x -s' < /data/sh/auto_deploy.sh
4 #for  I  in  `cat ip.txt`;do ssh  root@${I}  'bash -x -s' < /data/sh/auto_deploy.sh ;done
View Code

10. 自動部署腳本

 1 #!/bin/bash
 2 #Auto deploy Tomcat for jenkins perf
 3 #by author wugk 2016-07-06 
 4 export JAVA_HOME=/usr/java/jdk1.6.0_25
 5 TOMCAT_PID=`/usr/sbin/lsof -n -P -t -i :8081`
 6 TOMCAT_DIR="/usr/local/tomcat/"
 7 FILES="jfedu.war"
 8 DES_DIR="/export/data/tomcatRoot/ptest.jd.com/"
 9 DES_URL="http://123.57.11.203:8080/job/Ptest_Online/lastSuccessfulBuild/target"
10 BAK_DIR="/export/backup/`date +%Y%m%d-%H%M`"
11 [ -n "$TOMCAT_PID" ] && kill -9 $TOMCAT_PID
12 cd $DES_DIR
13 rm -rf $FILES
14 mkdir -p $BAK_DIR;\cp -a $DES_DIR/* $BAK_DIR/
15 rm -rf $DES_DIR/*
16 wget $DES_URL/$FILES
17 /usr/java/jdk1.6.0_25/bin/jar  -xvf  $FILES
18 ####################
19 cd $TOMCAT_DIR;rm -rf work
20 /bin/sh $TOMCAT_DIR/bin/start.sh
21 sleep 10
22 tail -n 50 $TOMCAT_DIR/logs/catalina.out
View Code

提示:若是有多臺,怎麼去部署,能夠發散思惟喲!!!能夠考慮結合底層SSH+FOR、PSSH、saltstack、Ansible工具去實現。

 

11. Jenkins插件安裝

jenkins頁面系統管理」-->「管理插件」-->"可選插件"中搜索email-ext-plugin插件選擇並安裝,也能夠點擊「高級」-而後手動上傳安裝。

 

注:也能夠手動下載插件安裝,到官網下載插件,而後將下載的插件傳到服務器jenkins根目錄下的plugins目錄~/.jenkins/plugins目錄,重啓jenkins便可

官網插件下載地址https://wiki.jenkins-ci.org/display/JENKINS/Plugins

以下咱們來安裝Email-ext-Plugin郵件插件包,安裝方法以下:

首先去Jenkins插件官網下載email-exttoken-macroemail-template

能夠搜索某個插件,輸入插件名稱便可:

分別從以下地址下載三個插件,而後上傳到Jenkins,實現安裝:

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin 

https://wiki.jenkins-ci.org/display/JENKINS/Token+Macro+Plugin 

https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+Template+Plugin 

以下圖,先安裝token插件:

而後安裝email插件

最終以下三個插件安裝成功:

安裝完成後,刷新Jenkins WEB界面便可。

安裝完email插件,打開系統管理-咱們能夠看到多了一個extended-E-mail-Notification菜單選項

如上是安裝Jenkins插件的方法,其餘GIT插件、Publish Over插件安裝方法同樣。

12. Jenkins郵件設置

Jenkins持續集成,當咱們自動打包部署完,咱們能夠發送一封郵件給相關的負責人,接下來帶你們一塊兒來看一下Jenkins持續集成郵件設置,郵件設置分爲以下幾個步驟:

構建完成後,告知構建信息及結果。主要使用到兩個插件:Email Extension PluginEmail Extension Template Plugin(上一章,咱們已經安裝完這3個插件,這裏能夠忽略不須要再次安裝)

 

常見參數以下:

SMTP server:設置郵件提供商的SMTP地址,mail.jfedu.net
Default Content Type:內容展示的格式,通常選擇HTML
Default Recipients:默認收件人
Use SMTP Authentication:使用SMTP身份驗證,點開Default user E-mail suffix下面的高級按鈕才能看到,選中。
User Name:郵件發送帳戶的用戶名。
Password:郵件發送帳戶的密碼。
SMTP portSMTP端口。

1) 首先要設置Jenkins發送郵件的發送者

2) 而後選擇Jenkins Location設置以下:(添加系統管理員郵件)

 

3) 設置發送郵件的SMTP、郵箱後綴,發送類型html、接收者或者抄送者

 

4) 設置郵件的標題

Default Subject內容以下:

構建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS

5) 設置郵件的內容

Default Content內容以下:

 1 <hr/>
 2 <h3>(本郵件是程序自動下發的,請勿回覆!)</h3><hr/>
 3 
 4 項目名稱:$PROJECT_NAME<br/><hr/>
 5 
 6 構建編號:$BUILD_NUMBER<br/><hr/>
 7 
 8 構建狀態:$BUILD_STATUS<br/><hr/>
 9 
10 觸發緣由:${CAUSE}<br/><hr/>
11 
12 構建日誌地址:<a href="${BUILD_URL}console">${BUILD_URL}console</a><br/><hr/>
13 
14 構建地址:<a href="$BUILD_URL">$BUILD_URL</a><br/><hr/>
15 
16 變動集:${JELLY_SCRIPT,template="html"}<br/>
17 <hr/>
View Code

6) 工程項目郵件設置

選擇trigger閥值

7) 構建郵件驗證

 

13. Jenkins多實例配置

在企業裏面使用Jenkins自動部署+測試平臺時,天天更新發布幾個網站版本,不頻繁,可是對於一些大型的企業來說,Jenkins就須要同時處理不少的任務,這時候就須要藉助Jenkins多個node或者咱們所說的Jenkins分佈式SLAVE,今天咱們帶你們來學習Jenkins多實例的配置;

添加Linux平臺Jenkins SLAVE配置:

1) 因爲JenkinsJava程序,添加的SLAVE客戶端服務器必須安裝Java JDK環境;

2) 建立遠程執行Jenkins任務的用戶,通常爲Jenkins用戶,工做目錄爲/home/Jenkins;

3) Jenkins服務器免祕鑰登陸Slave服務器或者經過用戶名和密碼登陸;

以下圖配置:

 

系統管理-管理節點-新建節點

而後建立SLAVE名稱並保存

以下進行配置:

添加ADD認證:

查看SLAVE狀態以下;

而後點擊www_slave節點-點擊launch salve agent調試:

而後出現下圖證實slave配置成功:

圖二:

Jenkins-master經過ssh方式來啓動slave的腳本,java –jar slave.jar,來接受master端的任務分配便可;

最後運行任務,當即構建:

配置完成後,若是你同時點擊一個JOB任務兩次,會發現只會運行一個任務呢,那須要怎麼調整呢,須要把從新配置job工程,勾選以下配置:(在必要的時候併發構建)

最終以下圖,多SLAVE+Master+併發構建

14. Jenkins整合Ansible

 

1) Ansible入門基礎

Ansible和saltstack、PSSH、puppet目前市面上一些其它的項目管理工具備很大的不一樣,它的設計初衷就是爲了更方便、快捷的進行配置管理。它易於安裝和使用、語法也很是簡單易學。你能夠用Ansible將日常複雜的配置工做變得簡單,變得更加標準化更容易控制。100、1000臺批量部署;

Ansible只須要在一臺普通的服務器上運行便可,不須要在被管控的服務器上安裝客戶端。由於它是基於SSH的,Linux服務器離不開SSH,因此Ansible不須要爲配置工做添加額外的支持。 你能夠經過命令行來使用Ansible,運行Ansible的服務器這裏俗稱「管理節點」;經過Ansible進行管理的服務器俗稱「受控節點」。

Ansible是一款極爲靈活的開源工具套件,可以大大簡化Unix管理員的自動化配置管理與流程控制方式。它利用推送方式對客戶系統加以配置,這樣全部工做均可在主服務器端完成。其命令行機制一樣很是強大,容許你們利用商業許可Web UI實現受權管理與配置。

Ansible優勢:

1) 輕量級,不須要去客戶端安裝agent,更新時,只須要在操做機上進行一次更新便可,採用SSH協議。

2) 批量任務執行能夠寫成腳本,並且不用分發到遠程就能夠執行。        

3) 使用python編寫的,維護更簡單。        

4) 支持sudo普通用戶命令。

 

2) Ansible安裝配置

Ansible 可以安裝到 Linux、BSD、Mac OS X 等平臺,Python 版本最低要求爲2.6。

CentOS直接使用yum安裝便可,安裝以前先安裝epel源碼。

rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm 

而後執行命令: yum install ansible -y 安裝便可。

 

安裝完後正式來使用,ansible默認配置文件路徑爲:

/etc/ansible:

常見的命令參數有:

Ansible中的臨時命令的執行是經過Ad-Hoc來完成,可以快速執行,並且不須要保存執行的命令,例如:

默認hosts內容能夠配置分組,咱們能夠定義各類ip及規則,內容以下:

而後配置SSH-KEYGEN免祕鑰登陸

手動批量運行命令或者腳本:(警告信息能夠忽略)

最好在Jenkins 工程裏面進行以下配置便可:

cp /root/.jenkins/workspace/www.jfedu.net/target/edu.war /var/www/html/download/

ansible www_jfedu  -m  copy -a  "src=/data/sh/auto_deploy.sh dest=/tmp/"

ansible www_jfedu  -m  shell -a  "cd /tmp ;/bin/bash auto_deploy.sh"

最終跟以前部署的Shell方式效果同樣:

相關文章
相關標籤/搜索