天天看點

持續內建

持續內建主要用于頻繁将代碼內建到主幹的場景。這樣的好處是可以快速的發現代碼的錯誤,而且可以防止分支大幅度的偏離主幹,造成主幹難以內建。持續內建的目的是在保證産品品質的同時讓産品快速疊代。

持續內建包含持續傳遞和持續部署,其實是一個自動化部署的流程。将整個技術生态流程自動化,如今DevOps理念已經大行其道。整合整個技術部門是DevOps的核心,可以預見,未來運維将是一個消失的崗位,但是就目前國内的整個行業來看,還會存在3到5年的調整時間,如果你是一個運維人員,将重點放在調整企業組織架構,将開發、運維、測試一體化,順勢而為,才是明智之選。

持續內建之Jenkins

1、持續的軟體版本釋出/測試項目。

2、監控外部調用執行的工作。

如果需要使用gitlab,要安裝gitlab-plugin 和gitlab-hook的插件。

将安裝Jenkins伺服器上的公鑰部署在gitlab上,在Jenkins上部署本機的私鑰,并在建立的Jenkins項目中添加對應的gitlab倉庫連結,這樣在啟動項目時,Jenkin會自動從gitlab上下拉代碼,預設是放在

/var/lib/jenkins/workspace/auto-deploy目錄下。

持續代碼品質管理-Sonar

Sonar 是一個用于代碼品質管理的開放平台。通過插件機制,Sonar可以內建不同的測試工具,代碼分析工具和持續內建工具。

這裡需要注意,如果是安裝的sonar5.6.4以上版本,需要安裝mysql5.6及以上版本才可以。

在第一次啟動時,會比較慢,在背景sonar會自動同步資料庫。

在啟動之後使用預設的賬号密碼admin登入。

sonar也是通過管理一系列的插件來工作的,預設插件的安裝路徑在/usr/local/sonarqube/extensions/plugins 。

使用Sonar實作代碼分析

在進行代碼測試之前,需要安裝對應的語言插件和安裝sonar-scanner插件。語言插件可以直接從WEB管理界面進行搜尋安裝,如圖:

<a href="http://s2.51cto.com/wyfs02/M01/8C/15/wKioL1hh4EThbK-1AAD7Vl7HXeM884.jpg" target="_blank"></a>

Sonar-Scanner可以直接從官方下載下傳:

Sonar-scanner可以直接使用,但是在使用前需要與sonar進行關聯,修改配置檔案:

/usr/local/sonar-scanner/conf/sonar-scanner.properties 

1

2

3

4

5

6

7

8

9

10

<code>#----- Default SonarQube server</code>

<code>sonar.host.url=   </code><code>#配置sonar的主機通路URL</code>

<code>#----- Default source code encoding</code>

<code>sonar.sourceEncoding=UTF-8</code>

<code>#----- Global database settings (not used for SonarQube 5.2+)</code>

<code>sonar.jdbc.username=sonar    </code><code>#連接配接sonar資料庫的賬号</code>

<code>sonar.jdbc.password=sonar    </code><code>#連接配接sonar資料庫的密碼</code>

<code>#----- MySQL</code>

<code>sonar.jdbc.url=jdbc:mysql:</code><code>//localhost</code><code>:3306</code><code>/sonar</code><code>?useUnicode=</code><code>true</code><code>&amp;amp;characterEncoding=utf8</code>

關聯上之後,我們就可以直接對執行個體代碼進行測試了。可以檢視sonar-example的使用方法

/software/sonar-examples/projects/languages/php/php-sonar-runner-unit-tests/README.md 

在sonar-project.properties檔案中記錄了測試檔案的在WEB界面的顯示屬性,包含名稱,版本,字元集等資訊。

/software/sonar-examples/projects/languages/php/php-sonar-runner-unit-tests/sonar-project.properties

進入scr目錄,直接利用sonar-scanner來測試:

<code>[root@localhost php-sonar-runner-unit-tests]</code><code># cd src/</code>

<code>[root@localhost src]</code><code># ll</code>

<code>total 8</code>

<code>drwxr-xr-x. 2 root root   22 Dec  1 20:06 Foo</code>

<code>-rw-r--r--. 1 root root 5559 Dec  1 20:06 Math.php</code>

<code># /usr/local/sonar-scanner/bin/sonar-scanner</code>

此時會傳回一系列的檢查結果,可以通過web界面來檢視管理:

<a href="http://s4.51cto.com/wyfs02/M01/8C/16/wKioL1hh7RvDWhEfAADrtSvHu6c966.jpg" target="_blank"></a>

在實際應用中,通過Jenkins來擷取代碼,通過Sonar對代碼進行測試。

Jenkens與Sonar內建

在Jenkens中內建Sonar需要安裝Sonar插件。

<a href="http://s2.51cto.com/wyfs02/M00/8C/1A/wKiom1hiBzajdbf2AADLSHF6fLk496.jpg" target="_blank"></a>

在Jenkins上設定全局的sonar-scanner路徑,在 Global Tools Configuration:

<a href="http://s4.51cto.com/wyfs02/M02/8C/1C/wKiom1hiHrqB0wEqAAB1AlMh5wg971.jpg" target="_blank"></a>

同時在系統配置中,配置sonar服務:

<a href="http://s5.51cto.com/wyfs02/M02/8C/1D/wKiom1hiIZeT9mkWAACj8leQwNg043.jpg" target="_blank"></a>

在建立的項目中,添加建構sonar的配置資訊:

<a href="http://s3.51cto.com/wyfs02/M01/8C/1D/wKiom1hiIkWh95GoAAC226KwHyM721.jpg" target="_blank"></a>

配置完之後就可以對代碼進行建構了,此時會自動生成一個SonarQube的快捷連結,點選此連結就能直接跳轉到SonarQube的界面,顯示建構後的,對代碼品質檢測的結果:

<a href="http://s3.51cto.com/wyfs02/M01/8C/1D/wKiom1hiI7ey0U-PAAD2pS1jMjs176.jpg" target="_blank"></a>

SonarQube的跳轉結果:

<a href="http://s2.51cto.com/wyfs02/M00/8C/19/wKioL1hiJHXQ4DL2AADBWERN7iA358.jpg" target="_blank"></a>

這樣在Jenkens調用Sonar進行代碼品質檢測的功能就實作了。

如果要實作自動化的部署,可以在Jenkens中配置另一個項目,通過建構此項目,調用一個自動化的腳本來實作上線部署的功能。

<a href="http://s2.51cto.com/wyfs02/M01/8C/19/wKioL1hiK4iim6bVAABnak8M_6k107.jpg" target="_blank"></a>

此處需要對部署的伺服器做SSH-KEY認證,在Jenkins主機上添加Jenkens賬号的ssh sudo權限,并禁用預設的requiretty:

<code>jenkins   ALL=(ALL)     NOPASSWD: </code><code>/usr/bin/ssh</code>

<code>#Defaults    requiretty</code>

持續部署

如果将自動化測試和自動化部署結合起來,就可以構成一整套自動化的流程,Jenkens可以幫我們實作。

在實作這個功能之前,需要安裝Parameterized Trigger plugin插件來觸發一系列的操作。

比如,當我們對代碼品質檢測完成之後,就可以自動調用部署腳本進行代碼部署操作:

<a href="http://s1.51cto.com/wyfs02/M02/8C/1A/wKioL1hiQiOAxBuhAAB9j4Fk3UU046.jpg" target="_blank"></a>

執行建構,目前的demo2項目完成之後會自動執行demo-deploy項目:

<a href="http://s2.51cto.com/wyfs02/M01/8C/1A/wKioL1hiQv-Rn12dAAA-RuvO4_k257.jpg" target="_blank"></a>

讓代碼從開發到部署像流水線一樣進行,可以給整個流程布局一個視圖效果,這樣更容易檢視和運作不同的項目。

需要安裝Build Pipeline Plugin,在配置上起始項目和pipeline的視圖:

<a href="http://s4.51cto.com/wyfs02/M02/8C/1E/wKiom1hiSROjhzVfAACiSkIU8DA301.jpg" target="_blank"></a>

設定pipeline視圖:

<a href="http://s1.51cto.com/wyfs02/M02/8C/1A/wKioL1hiSjvCEOgiAACK3i0Dy88283.jpg" target="_blank"></a>

配置起始項目:

<a href="http://s4.51cto.com/wyfs02/M00/8C/1E/wKiom1hiSoSAkls0AACkBbqdr8s704.jpg" target="_blank"></a>

最終的展現視圖,可以直接在視圖中對需要建構的項目進行操作:

<a href="http://s5.51cto.com/wyfs02/M00/8C/1A/wKioL1hiSqOzw7FPAADN6T73W4c922.jpg" target="_blank"></a>

Jenkins與Gitlab內建

要在Jenkins中內建gitlab,需要安裝gitlab Hook 插件,為了驗證操作,需要安裝Build Authorization Token Root 插件。

建立一系列的觸發條件之後,當本地代碼push到gitlab的時候,就會自動進行代碼驗證和測試,測試完成自動部署代碼到預生産環境,實作整個流程的自動化。

先生成一個随機的Token:

<code># openssl  rand -hex 10</code>

<code>c71bfc71b32d3c4785c5</code>

在起始的Jenkins項目建立遠端觸發,關聯gitlab資訊:

<a href="http://s5.51cto.com/wyfs02/M02/8C/1B/wKioL1hiX6PSoMw3AADro3vgCOY859.jpg" target="_blank"></a>

儲存之後,将提示中給出的URL和生成的token配置到gitlab上。在gitlab的webhooks中配置如下資訊:

<a href="http://s3.51cto.com/wyfs02/M01/8C/1E/wKiom1hiYLOQgl7HAACxI8zxrQc676.jpg" target="_blank"></a>

配置完成之後,在gitlab上可以點選test按鈕進行測試。

這樣在向gitlab push代碼時,就會觸發demo2項目的操作,demo2本身再觸發其它項目操作,完成整個代碼部署的流程。

 本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1886666