jekins自動化部署(linux測試環境和生產環境)

實施背景

    咱們是作產品研發的,產品研發的迭代週期短,發佈頻繁。大多數公司都採用了持續集成的方式。然而創業型公司起步階段根本就沒有時間去作這些事情。只有後面再去補這些坑,我如今就是補坑的。linux

    項目組之前代碼管理比較混亂,幾個環境都是開發在部署,並且每次都是手動增量部署,費時費力還容易出問題,要麼沒部署完,要麼部署錯誤,要麼少部署了一臺機器或少重啓了一個服務,效率至關低下。爲了實現咱們公司的自動化部署我先規範了公司的代碼管理,梳理了各個項目的主幹和分支,制定了一些約定,分離出各類環境下代碼的存儲方式和提交方式。web

    基礎工做完成之後呢我先要搭建自動化構建和發佈的環境,而後在測試環境試運行(公司測試比較初級,只會功能測試和業務測試基本不懂技術,全部發布的事情都得開發來幹)。windows

    一、安裝配置jekins,maven,jdk,svn。

    安裝和配置參考jenkins+tomcat+maven+svn實現自動化構建部署,這篇是windows的安裝方式,linux安裝流程差很少,請自行解決(我也是百度解決的,安裝jekins的時候可能你們會遇到和windows啓動後界面不同,沒有啓動頁直接進入到登錄頁讓你登錄了,此時的默認用戶名是admin,密碼是從jenkins的文件裏面查找的,和windows目錄結構相似)tomcat

   在jenkins+tomcat+maven+svn實現自動化構建部署中我是直接採用maven編譯之後發佈到tomcat容器,須要對tomcat進行配置。編譯後的war包是藉助tomcat提供的文件上傳服務來上傳war包的,上傳後放到了webapp下,tomcat自動從新加載應用,屢次發佈後可能會引發tomcat內存溢出(若是你的tomcat內存是默認配置沒有優化很容易溢出)。那種方式就不適合如今的生產環境,測試環境能勉強知足。由於生產環境是隻有一份發佈文件,多個tomcat指向同一個文件目錄。安全

    因此咱們必須藉助其餘插件將編譯後的文件發佈到服務器上,你們用得最多的是publish over ssh。因此咱們也用這個。服務器

    二、在jekins中安裝publish over ssh插件(參考jenkins+tomcat+maven+svn實現自動化構建部署)中安裝插件方式

    三、配置ssh

    進入系統管理--系統設置找到Publish over SSHapp

參數說明:運維

  • 公共配置 
    Passphrase:密碼(key的密碼。若是有設置--下方username對應的密碼) 
    Path to key:key文件(私鑰)的路徑 
    Key:將私鑰複製到這個框中 
    Disable exec:禁止運行命令 
    注意:通常來講,咱們會採用同每個SSH Server單獨配置的方式,所以公共配置部分通常不進行設置ssh

  • 私有配置 
    SSH Server Name:標識的名字,可隨便取 
    HostName:須要鏈接ssh的主機名或IP地址 
    Username:SSH鏈接所使用的用戶名 
    Remote Directory:用SSH鏈接後的遠程根目錄,這個目錄是必須存在的,Jenkins不會自動建立目錄。Jenkins會將文件遠程複製到該目錄。(注意:SSH鏈接的用戶須要有權限才能夠建立、刪除、移動文件及文件夾) 
    Use password authentication, or use a different key:使用密碼認證或密鑰認證webapp

  • 私有配置的高級 
    Port:SSH鏈接端口號(默認爲22) 
    Timeout (ms):鏈接超時的時間,單位以毫秒計算 
    Disable exec:禁止exec執行命令 
    Test Configuration:測試配置是否成功 

    四、在項目配置中--構建後操做中配置具體的發佈內容和執行命令

        

    參數說明:

SSH Server Name:選擇系統設置中已添加的SSH服務器 
Transfer Set Source files:須要上傳到應用服務器的文件(注意:相對於工做空間的路徑,可填寫多個,默認用逗號分隔) 
Remove prefix:去掉前綴(只能指定Transfer Set Source files中的目錄) 
Remote directory:可選的目標文件夾。若是文件夾不存在,會建立文件夾。 
Exec command:在遠程服務器將要執行的命令。在遠程SSH傳輸執行後,才執行這裏的腳本命令 
高級選項: 
Exclude files:排除的文件(在傳輸目錄的時較有用,使用通配符,例如:/*.log,/*.tmp,*.txt/) 
Pattern separator:分隔符(配置Transfer Set Source files的分隔符) 
No default excludes:禁止默認的排除規則 
Make empty dirs:此選項會更改插件的默認行爲。默認行爲是匹配該文件是否存在,若是存在則建立目錄存放。選中此選項會直接建立一個目錄存放文件,即便是空目錄。 
Flatten files:只上傳文件,不建立目錄(除了遠程目錄) 
Exec timeout (ms):運行腳本的超時時間(毫秒) 
Exec in pty:模擬一個終端執行腳本 
Add Transfer Set:增長一個傳輸配置 
Remote directory is a date format:遠程目錄創建帶日期的文件夾(須要在Remote directory中配置日期格式),具體格式參考下表:

Remote directory Directories created
‘qa-approved/’yyyyMMddHHmmss qa-approved/20101107154555
‘builds/’yyyy/MM/dd/’build-${BUILD_NUMBER}’ builds/2010/11/07/build-456 (if the build was number 456)
yyyy_MM/’build’-EEE-d-HHmmss 2010_11/build-Sun-7-154555
yyyy-MM-dd_HH-mm-ss 2010-11-07_15-45-55

第二種啓動步驟:在構建後操做中,選擇Send build artifacts over SSH

注:Transfer Set Source files和Exec command可只填寫一個

    五、上傳完畢後重啓全部tomcat服務

    這裏的重啓能夠直接調用服務端的重啓腳本

如上圖中Exec command 參數中的sh /home/admin/restartAllTomcat.sh執行重啓操做便可。這裏的命令根據本身的須要進行添加,或是所有寫到腳本中也能夠。

    可能會遇到的坑:

    一、jenkins安裝插件後須要重啓,不重啓會找不到對應的配置項;

    二、若是你的服務器有嚴格的權限結構,尤爲是生產環境,可讓運維開一個有具備全部操做權限的帳號。不然上傳後,沒有copy或是執行腳本的權限則會失敗。

    三、注意ssh的兩個配置,用戶帳號和密碼、端口的配置要注意。若是用的是普通帳號必定要指向該帳號具備權限的目錄(我是將全部要操做的目錄權限配置賦給一個用戶組,而後在該用戶組中新加了一個用戶)

    可改進的地方

    一、jenkins可配置嚴格的安全機制,同時管理開發、測試、生產三個環境的全部系統的發佈。

    二、代碼方面要創建規範的管理制度,主幹、分支、標籤的合理使用,讓測試環境和生產環境直接從svn上check 編譯後發佈。避免手動發佈帶來的沒必要要的問題。

    三、生產環境下的集羣中,全部應用統一指向一個發發布目錄,避免維護多個相同的發佈目錄帶來的混亂

相關文章
相關標籤/搜索