持續集成

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

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


持續集成之Jenkins

Jenkins是基於Java開發的一種持續集成工具,用於監控持續重複的工作,功能包括:

1、持續的軟件版本發佈/測試項目。

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


安裝部署Jenkins:https://www.unixhot.com/article/55 

在Jenkins安裝插件有時候由於網絡的原因需要手動去下載hpi的插件https://updates.jenkins-ci.org/download/plugins/ 在web界面上傳到服務器上。

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


將安裝Jenkins服務器上的公鑰部署在gitlab上,在Jenkins上部署本機的私鑰,並在新建的Jenkins項目中添加對應的gitlab倉庫鏈接,這樣在啓動項目時,Jenkin會自動從gitlab上下拉代碼,默認是放在

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


持續代碼質量管理-Sonar

https://www.unixhot.com/article/56 

Sonar 是一個用於代碼質量管理的開放平臺。通過插件機制,Sonar可以集成不同的測試工具,代碼分析工具和持續集成工具。

Sonar的官方下載站點: https://www.sonarqube.org/downloads/ 

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

在第一次啓動時,會比較慢,在後臺sonar會自動同步數據庫。

在啓動之後使用默認的賬號密碼admin登錄。

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


使用Sonar實現代碼分析

Sonar在github上有一些代碼示例,可以幫助我們測試各種主流的代碼https://github.com/SonarSource/sonar-examples  通過下載這些代碼示例,可以完成多已有代碼類型的測試示範。

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

wKioL1hh4EThbK-1AAD7Vl7HXeM884.jpg

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

http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner 


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

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

#----- Default SonarQube server
sonar.host.url=   #配置sonar的主機訪問URL
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
#----- Global database settings (not used for SonarQube 5.2+)
sonar.jdbc.username=sonar    #連接sonar數據庫的賬號
sonar.jdbc.password=sonar    #連接sonar數據庫的密碼

#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8

關聯上之後,我們就可以直接對實例代碼進行測試了。可以查看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來測試:

[root@localhost php-sonar-runner-unit-tests]# cd src/
[root@localhost src]# ll
total 8
drwxr-xr-x. 2 root root   22 Dec  1 20:06 Foo
-rw-r--r--. 1 root root 5559 Dec  1 20:06 Math.php
# /usr/local/sonar-scanner/bin/sonar-scanner

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

wKioL1hh7RvDWhEfAADrtSvHu6c966.jpg

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


Jenkens與Sonar集成

在Jenkens中集成Sonar需要安裝Sonar插件。

wKiom1hiBzajdbf2AADLSHF6fLk496.jpg


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

wKiom1hiHrqB0wEqAAB1AlMh5wg971.jpg

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

wKiom1hiIZeT9mkWAACj8leQwNg043.jpg

在創建的項目中,添加構建sonar的配置信息:

wKiom1hiIkWh95GoAAC226KwHyM721.jpg


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


wKiom1hiI7ey0U-PAAD2pS1jMjs176.jpg


SonarQube的跳轉結果:

wKioL1hiJHXQ4DL2AADBWERN7iA358.jpg

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


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

wKioL1hiK4iim6bVAABnak8M_6k107.jpg


此處需要對部署的服務器做SSH-KEY認證,在Jenkins主機上添加Jenkens賬號的ssh sudo權限,並禁用默認的requiretty:

jenkins   ALL=(ALL)     NOPASSWD: /usr/bin/ssh
#Defaults    requiretty


持續部署

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

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

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

wKioL1hiQiOAxBuhAAB9j4Fk3UU046.jpg

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

wKioL1hiQv-Rn12dAAA-RuvO4_k257.jpg



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

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

wKiom1hiSROjhzVfAACiSkIU8DA301.jpg


設置pipeline視圖:

wKioL1hiSjvCEOgiAACK3i0Dy88283.jpg

配置起始項目:

wKiom1hiSoSAkls0AACkBbqdr8s704.jpg


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

wKioL1hiSqOzw7FPAADN6T73W4c922.jpg



Jenkins與Gitlab集成

要在Jenkins中集成gitlab,需要安裝gitlab Hook 插件,爲了驗證操作,需要安裝Build Authorization Token Root 插件。

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

先生成一個隨機的Token:

# openssl  rand -hex 10
c71bfc71b32d3c4785c5

在起始的Jenkins項目創建遠程觸發,關聯gitlab信息:

wKioL1hiX6PSoMw3AADro3vgCOY859.jpg

保存之後,將提示中給出的URL和生成的token配置到gitlab上。在gitlab的webhooks中配置如下信息:

wKiom1hiYLOQgl7HAACxI8zxrQc676.jpg


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

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章