❶ 如何使用docker+jenkins實現自動化集成
Docker 介紹
Docker
號稱是下一代的虛擬機,它在啟動和創建速度、性能、移植性等方面均優於傳統虛擬機。Docker 是 PaaS 提供商 dotCloud
開源的一個基於 LXC 的高級容器引擎。它能夠讓開發者打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux
機器上,也可以實現虛擬化。目前,通過 Boot2Docker 已能使 Docker 運行在 Windows 和 OS X 中。Docker
容器完全使用沙箱機制,相互之間沒有任何介面。Docker 幾乎沒有性能開銷,可以很容易地在機器和數據中心中運行。最重要的是,
他們不依賴於任何語言、框架或系統。
Docker 在其網站上明確地提到的 Docker 的典型應用場景如下:
對應用進行自動打包和部署
創建輕量、私有的 PAAS 環境
自動化測試和持續整合與部署
部署和擴展 Web 應用、資料庫和後端服務
在自動化測試領域,Docker 大有取代傳統虛擬機技術的趨勢,原因如下:
自動化測試依賴的是測試所需要的應用,而並非整個操作系統。因此,傳統的虛擬機技術存在資源浪費。
Docker 構建於 LXC 之上。藉助 LXC 輕量級的特性,相比於目前的虛擬機技術,Docker 啟動更快、資源佔用更小。
Docker 比虛擬機輕量、靈活,便於管理。
Docker 標准化的構建方法 (Dockerfile) 和良好的 REST API,使得自動測試和持續集成/部署能夠很好的集成進來。
回頁首
Sahi 介紹
Sahi 是一個開源的 Web UI 自動化測試框架。盡管它的知名度不及 Selenium,用戶群也不及 Selenium 龐大,但它確有它獨特的魅力,例如:
基於上下文的頁面元素識別機制。
隱式頁面載入響應等待機制。
良好的瀏覽器支持。
優秀的跨瀏覽器錄制回放調試工具 Sahi Controller。
這些特性都大大地加快了自動化測試腳本的開發速度,並降低了維護成本。
Sahi
通過一個用 java 編寫的代理伺服器,將用戶的腳本轉換為 JavaScript 後注入往返的 HTTP
請求及響應中,從而驅動瀏覽器事件。編程語言方面,除 Sahi 腳本(其本質是一個 JavaScript 庫)以外,還支持 Java 和
Ruby。Sahi 有開源和收費兩個版本。雖然收費版本提供了很多開源版本不具備的高級特性,不過開源版本已經能夠滿足大部分的功能要求。點此查看開源版本與收費版本的差異。點此查看Sahi 與其他 Web 自動化測試框架的對比。
回頁首
Jenkins 介紹
Jenkins
是一種開源的基於 Java 開發的持續集成工具,前身稱作 Hudson。Jenkins
提供了用於監控持續重復工作的軟體平台。它支持豐富的插件,用戶可以按照需求進行選擇安裝和配置,以實現生成執行狀態表格,自動部署、更新自動化測試包等
高級功能。本文將要介紹 Jenkins 的 Docker 插件,它能夠動態地創建 Docker 容器作為 Jenkins Slave
節點,並在執行任務後,自動關閉容器。另外,它還支持一些額外功能,比如當構建任務成功完成後自動將容器保存為鏡像、自動將鏡像上傳到資源庫等。
回頁首
實例演示
該實例演示如何製作一個運行 Sahi 的鏡像以及如何在 Jenkins 上配置 Docker 插件以運行 Sahi 測試腳本。
准備 Docker 鏡像
本實例需要准備三個鏡像:一個運行 Jenkins,一個運行 Subversion,另外一個運行 Sahi。
首先,製作運行 Sahi 的鏡像。Docker Hub 是一個用於分享 Docker 鏡像的資源庫。目前,該資源庫還沒有運行 Sahi 的鏡像,所以必須自己創建 Dockerfile 來構建鏡像。下圖是用來製作 Sahi 鏡像的目錄。
圖 1. 製作 Sahi 鏡像的目錄
下圖是 Dockerfile 的文件內容。
圖 2. Dockerfile文件內容
整個過程大體分為八個步驟:
指定基礎鏡像
我們使用的是 evarga/jenkins-slave。該鏡像基於 Ubuntu,安裝了 SSH 服務,並創建了用戶 Jenkins。
替換系統默認更新源。把系統更新源替換為 163 的,後面的軟體安裝速度會比較快一些。
安裝必要的軟體(不包括 Oracle Java 和
Sahi):Firefox, Unzip 以及 Xvfb。刪除 Open JDK 是為了後面安裝 Oracle Java 做准備。Firefox
不用多說,因為該鏡像用於 Web UI 自動化測試,所以安裝了最新版本的 Firefox。安裝 Unzip 是因為後面安裝 Sahi
需要用到它。Xvfb(X virtual framebuffer)是一個 X11
顯示伺服器的實現。它不是將圖形在屏幕上顯示出來,而是在內存中運行所有的圖形操作。對客戶端來說,除了無法看到真正的圖形顯示,沒有其他分別。一般稱這
種運行方式為 headless。
安裝 Oracle Java 8。理論上 Sahi 應當也支持 Open JDK,所以安裝 Oracle Java 不是必須的。
安裝 Sahi。上傳了 zip 文件後,用 Unzip 解壓,Sahi 是基於 Java 的,所以解壓後即已安裝好 Sahi。之後,替換了幾個文件,它們的作用如下:
Userdata.properties
userdata.properties 中有個屬性叫
proxy_alert.disabled,默認值為 false。用戶第一次啟動 Sahi Dashboard
的時候,會彈出一個如下圖所示的對話框。用戶勾選了「Do no show this message again」並點擊 Continue
按鈕之後,Sahi 修改該屬性值為 true。之後就不會在跳出這個對話框了。由於用 headless 的方式運行 Sahi
無法點擊該對話框,所以必須事先用一個已將該屬性設置為 true 的文件替換 Sahi 默認的 userdata.properties。
圖 3. Sahi 代理問題對話框
sahi_example_com
這是一個證書文件。用戶第一次在 Sahi Dashboard
中打開 Firefox 時的頁面如下圖所示。用戶需要點擊 SSL Manager 鏈接手動接受 SSL 證書。此時,文件
sahi_example_com 被生成到 userdata/certs 目錄下。之後,就不需要再進行該操作了。所以,復制的
sahi_example_com 目的也是為了自動完成這步需要在圖形界面下才能完成的操作。
圖 4. Sahi 啟動頁
圖 5. SSLManager 的非信任連接頁面
browser_types.xml
替換該文件是為了使 Sahi 以 headless
的方式工作。在該文件中,事先添加了一個名字為 firefox-xvfb 的瀏覽器配置信息。之後,測試腳本就可以指向該瀏覽器運行。具體配置 Sahi 和 Xvfb 的步驟參考。
添加 init.sh 文件
init.sh 文件用於啟動 Xvfb 和 Sahi。其內容如下。
圖 6. init.sh 文件內容
「sleep 5」是因為 Sahi 啟動需要一點時間,若立即運行測試腳本會導致失敗。
修改許可權
最終運行的容器是作為 Jenkins Slave 節點用
Jenkins 用戶運行,因此將整個/usr/local 目錄及子目錄的所有人修改為 Jenkins,並給 Shell
文件添加執行許可權。Jenkins 用戶是在基礎鏡像 evarga/jenkins-slave 中創建的,所以在這個 Dockerfile
里沒有創建 Jenkins 用戶的語句。
指定默認執行的命令
CMD ["/usr/sbin/sshd","-D"] – 該語句令鏡像默認啟動 SSH 服務。事實上,這條語句也可以不添加,因為 evarga/jenkins-slave 的 Dockerfile 中已包含該語句。
一
切就緒之後,在該目錄中執行「docker build -t shenrui/sahi –rm=true」。命令成功執行後,通過「docker
images」應當可以查看到名為「shenrui/sahi」的鏡像。該鏡像已經上傳到 Docker Hub,有需要的讀者可以自行拉取。
Sahi
鏡像構建好之後,接下來准備 Jenkins 容器。Docker Hub 上已有官方的 Jenkins 鏡像,直接用命令「docker pull
jenkins」拉取。在 Docker 主機上,創建一個目錄(例如,/data/jenkins_home),並修改許可權(chmod
777)以便 Jenkins 容器能讀寫該目錄,然後用命令「docker run -d -t --name myjenkins -p
8080:8080 -v /data/jenkins_home:/var/jenkins_home jenkins」啟動。此時,打開
http://<Docker Host IP>:8080 應當可以看到 Jenkins 的管理頁面。
同樣地,直接拉取 Docker Hub 的 Subversion
的鏡像(docker pull bsboiko/subversion)。不過,還需要做進一步的配置。步驟如下:
用命令「docker run -i -t bsboiko/subversion /bin/bash」以交互的方式啟動 Subversion 容器。
在容器中創建目錄 /var/svn/repos(mkdir -p
/var/svn/repos),並基於該目錄創建 Subversion 資源庫(svnadmin create
/var/svn/repos)。
在資源庫目錄下的 svnserve.conf
文件中刪除「password-db = passwd」前面的注釋符 #,並在 passwd 文件中添加一行「shenrui =
password」。
用命令「docker commit <container id> mysvn」把上面所做的修改保存下來創建一個新鏡像 mysvn。
最後,用命令「docker run -t -d -p
3690:3690 --name mysvn mysvn svnserve -d --foreground -r
/var/svn/repos」啟動 mysvn 容器。啟動時,添加容器到主機的埠映射「-p 3690:3690」以便之後直接通過主機 IP
提交測試腳本。
至此,Docker 上有兩個正在運行的容器(docker ps),名字分別是 myjenkins 和 mysvn。
❷ Jenkins+Rancher自動化部署
本文主要記錄Jenkins+Rancher+k8s自動化部署相關配置說明,不涉及rancher和jenkins安裝部署,包含java server項目、WAR項目、前端VUE項目部署配置介紹。
伺服器環境信息:
需要在安裝jenkins服務上部署下面相應的軟體,請注意軟體版本,如已經安裝相關軟體,可跳過此章節。
需要安裝rancher-cli,並且使用jenkins用戶預先登錄rancher平台:命令參考:
--token:這個用戶的token建議設置為永不過期,在rancher管理端 -> api&key > 添加。
建議安裝阿里鏡像,提高編譯速度:
jenkins啟動用戶需要添加到docker組中:
項目主要是java和vue開發的,所以需要安裝Maven Integration plugin插件。
spring boot或者spring cloud自帶容器,以及其它服務類型的java後端應用部署。
1、填寫項目名稱,選擇"構建一個maven項目"
點擊下面"OK"按鈕
2、填寫項目描述信息
3、輸入項目地址,並選擇用戶憑證
本文通過conding.net作為代碼管理平台,點擊"Add"添加自己賬號憑證(輸入coding.net平台登陸賬號密碼即可)。
4、配置maven編譯腳本
5、編寫rancher部署腳本
Dockerfile參數說明:FROM:選擇基礎鏡像包,該項目是用java語言開發需要jdk1.8所以選擇openjdk:8ADD:將bRule-deploy-1.0.0.tar.gz文件解壓並上傳到鏡像的brule目錄EXPOSE:容器內部啟動2002埠,根據自身項目填寫指定埠,多個埠填寫多行EXPOSE標簽ENTRYPOINT:容器啟動時執行的命令,執行多條命令使用&&拼接,命令行中帶&需要加上轉移符\&,使用tail -fn監聽應用日誌,以便容器日誌查看。
用於創建docker鏡像,就好比創建一個已經安裝並且配置好了應用程序的操作系統鏡像。
參數說明:192.168.100.21:5000:為本地docker鏡像伺服器地址brule:latest:應用名稱,根據自身項目名稱修改
利用上面創建好的操作系統鏡像啟動一個vmware虛擬機,創建k8s容器。
參數說明:brule:應用名稱,根據自身項目名稱修改,應用名稱規范?(.?)*image:剛才創建的docker鏡像containerPort:容器啟動埠,多個埠使用多行containerPort標簽聲明,埠限制在【30000-32000】
前面vmware虛擬機創建好後,怎麼能讓別人訪問?這個時候就需要創建一個網路服務,用於打通路由器與vmware本地虛擬機的網路。
參數說明:brule:應用名稱,根據自身項目名稱修改port:容器啟動埠nodePort:對外提供服務埠,外部機器訪問
將上面配置好的shell腳本復制到Post Steps -> 執行shell文本域中,並點擊"保存" -> "立即構建"即可部署。
1、進入剛才創建好的jenkins任務,點擊立即構建
2、點擊左下角構建任務,選擇"Console Output",查看構建日誌
3、登錄rancher管理平台,查看構建好的應用
基於J2EE項目的war包部署,前面操作都一致,只是shell部署腳本稍有不同,這里主要詳細說明rancher部署腳本。
Dockerfile參數說明:FROM:選擇基礎鏡像包,war統一使用tomcat容器部署,tomcat:8.5-jre8-slimADD:將operation.war文件解壓並上傳到鏡像的/usr/local/tomcat/webapps/目錄EXPOSE:容器內部啟動8080埠,根據自身項目填寫指定埠,多個埠填寫多行EXPOSE標簽
這里不需要配置ENTRYPOINT標簽,因為tomcat鏡像包中已經有了。
用於創建docker鏡像,就好比創建一個已經安裝並且配置好了應用程序的操作系統鏡像。
參數說明:192.168.100.21:5000:為本地docker鏡像伺服器地址operation:latest:應用名稱,根據自身項目名稱修改
利用上面創建好的操作系統鏡像啟動一個vmware虛擬機,創建k8s容器。
參數說明:operation:應用名稱,根據自身項目名稱修改image:剛才創建的docker鏡像containerPort:容器啟動埠,多個埠使用多行containerPort標簽聲明,埠限制在【30000-32000】
前面vmware虛擬機創建好後,怎麼能讓別人訪問?這個時候就需要創建一個網路服務,用於打通路由器與vmware本地虛擬機的網路。
參數說明:operation:應用名稱,根據自身項目名稱修改port:容器啟動埠nodePort:對外提供服務埠,外部機器訪問
將上面配置好的shell腳本復制到Post Steps -> 執行shell文本域中,並點擊"保存" -> "立即構建"即可部署。
基於webpack構建的VUE項目部署,前面操作都一致,只是shell部署腳本稍有不同,這里主要詳細說明rancher部署腳本。
Dockerfile參數說明:FROM:選擇基礎鏡像包,前端統一使用tomcat容器部署,tomcat:8.5-jre8-slimCOPY:將/dist目錄上傳到鏡像的/usr/local/tomcat/webapps/fastquery/目錄EXPOSE:容器內部啟動8080埠,根據自身項目填寫指定埠,多個埠填寫多行EXPOSE標簽
這里不需要配置ENTRYPOINT標簽,因為tomcat鏡像包中已經有了。
用於創建docker鏡像,就好比創建一個已經安裝並且配置好了應用程序的操作系統鏡像。
參數說明:192.168.100.21:5000:為本地docker鏡像伺服器地址operation:latest:應用名稱,根據自身項目名稱修改
利用上面創建好的操作系統鏡像啟動一個vmware虛擬機,創建k8s容器。
前面vmware虛擬機創建好後,怎麼能讓別人訪問?這個時候就需要創建一個網路服務,用於打通路由器與vmware本地虛擬機的網路。
參數說明:shutcm-fastquery-web:應用名稱,根據自身項目名稱修改port:容器啟動埠nodePort:對外提供服務埠,外部機器訪問
將上面配置好的shell腳本復制到Post Steps -> 執行shell文本域中,並點擊"保存" -> "立即構建"即可部署。
❸ 敏捷之路 C++ (一) jenkins配置-VS工程自動編譯基本配置
Windows安裝Jenkins主要有兩種方式
關於安裝這塊官方資料齊全就不浪費時間了。
接下來啟動 jenkins並按照默認設置一路下一步就行了。
成功啟動jenkins並檢查確認jenkins工作區無誤後就可以開始配置jenkins以及自動編譯VS項目的相關環境了。
建議: 所有需要安裝的工具例如git,python,svn等盡量不要安裝在Program Files中,自己重新指定一個沒有許可權問題,純英文無特殊符號及空格等的路徑。
接下來安裝插件
首先是使用vs項目必不可少的MSBuild插件
以及多源項目需要的Multiple SCMs plugin
如果你需要郵件通知則安裝Email Extension Plugin
建議安裝一個你的工程所需版本的Visual Studio
一方面MSBUILD可以直接用,另一方面如果自動編譯出問題 可以使用VS打開你的項目進行調試
通常一個相對比較大的多項目工程,如果不是一直嚴格按照標准配置,很難保證獲取工程可以成功編譯建議從以下幾個角度檢查
配置好了工程可以從遠端克隆一個新的直接編譯試一下。可以成功編譯就可以配置jenkins項目了。
添加賬號密碼時有時候第一次添加的會無效,那就再添加一次並選擇第二個。通常就可以了。
❹ 請問Jenkins如何配置自動或定時編譯
打開job的配置界面,在構建觸發器欄下有Poll SCM(定時檢查源碼變更並構建)和Build periodically(周期進行項目構建,不關心源碼是否變更)選擇,打開它們後面的問號,有很明確的介紹和實例