Framework項目持續集成(jenkins)及集合SonarQube



Framework項目持續集成及集合SonarQube - 前言

個人博客原文地址:http://book.levy.net.cn/doc/devops/jenkins_sonar.html

本文主要記錄在windows平台部署 jenkins 服務和 sonar 服務,然后實現持續集成和代碼質量管理的一套服務。

jenkins是一款開源的提供友好操作界面的持續集成交付工具,主要用於持續構建、測試、發布軟件項目。且能通過郵件、釘釘等通知最終構建結果,支持常用版本控制工具GIT/SVN。

sonarqube是一款開源的提供友好操作界面的代碼質量管理工具。通過插件機制,Sonar 可以集成不同的測試工具,代碼分析工具,以及持續集成工具。

而兩者結合起來使用,大概步驟就是 代碼提交 - sonar質量監控 - jenkins集成部署 - 測試 - 生產使用

CI/CD是什么 -- jenkins

CI的英文名稱是Continuous Integration,中文翻譯為:持續集成。

CD可對應多個英文名稱,持續交付Continuous Delivery和持續部署Continuous Deployment

主要是將代碼分成幾個環境來管理,如 開發環境 - 測試環境 - 生產環境 ,一般來說,在開發人員代碼提交后,(盡快的進行代碼質量檢測 - sonar),馬上使用jenkins進行構建、單元測試。根據測試結果判斷是否發布測試環境,跑自動化測試流程或者人工測試相關功能,進行回歸測試,檢查正確性和穩定性等。然后再集成到生產環境 的工作模式。

什么是sonarqube?什么是CodeReview?

什么是sonarqube?

Sonar (SonarQube)是一個開源平台,用於管理源代碼的質量。 Sonar 不只是一個質量數據報告工具,更是代碼質量管理平台。支持多種語言的代碼質量管理與檢測

SonarQube®是一種自動代碼審查工具,用於檢測代碼中的錯誤,漏洞和代碼異味。可以與jenkins集成,或手動執行,以便在項目分支和拉取請求之間進行連續的代碼檢查

檢測結果存儲於數據庫,支持多種數據庫(新版不再支持mysql),然后通過UI展示出來結果

什么是CodeReview?為什么要這樣做?

CodeReview簡單來說就是由有經驗、對業務熟悉的老前輩進行檢查代碼,查看代碼漏洞的的一種流程。從而提高項目健壯性,減少錯誤及使代碼簡潔易懂。

通常情況下,由於項目開發進度太趕,沒時間進行代碼審查,從而導致出現一些低級錯誤,這樣會導致用戶體驗很差,進而可能流失客戶。而為了提高開發速度及效率,還要保證代碼質量,就可以使用sonar來自動檢測,然后檢測完成后在網頁上查看檢測結果,再進行修復。雖不能從業務上來保證正確性,但能通過這種途徑減少代碼上的直接錯誤。

工具安裝

要使用這一套環境,得先安裝好JDK,本文記錄使用的都是最新版的工具,因此請安裝 JDK 11來保證服務可用。且配置好環境變量。

jenkins安裝

可從官網 https://www.jenkins.io/download/ 上下載相應的安裝包,或war包,對應去操作使用,可能下載會比較慢,文末有提供安裝包版本 2.253。

雙擊運行安裝包,安裝時會讓你進行選擇使用端口號,安裝完成后,不要着急去訪問服務,先將插件源給替換掉,以保證光速下載推薦插件。

更換插件源

配置地址:C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins.jenkins 我的是這個,提供參考

或者修改 hudson.model.UpdateCenter 中的地址

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

然后修改updates 文件夾中的 default.json 文件

修改后到服務中重啟jenkins服務。 或者docker restart jenkins 重新啟動服務 修改完,有時候會被重置回去,發現下載插件很慢的時候,就檢查下,重新替換吧

jenkins初始化及插件安裝

這里就不配圖了,畢竟都是簡單的操作步驟。

  1. 打開 localhost:端口 地址,復制本地地址到地址欄獲取密碼並填寫

  2. 點擊第一個安裝推薦插件后,開始安裝推薦的插件。這時候你會感受到光速下載插件。

  3. 安裝完成后,點擊繼續,創建一個新的管理員賬戶

  4. 點擊完成,相當於jenkins服務就安裝完成了。

msbuild 和 nuget下載

文末有提供相關工具

msbuild工具,下載地址:https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16

nuget下載地址:https://www.nuget.org/downloads

插件安裝

點擊左邊Manage Jenkins按鈕,在plugin中安裝如下插件,除推薦插件外,

  • Publish Over SSH

  • DingTalk

  • SonarQube Scanner

  • push over ssh

  • MSBuild

插件配置

點擊左邊Manage Jenkins按鈕,點擊 Configure System

集成sonarqube,配置這里的token,添加時選secret text,需要在下面安裝的sonar服務中獲取,相關截圖如下

釘釘通知的配置

push over ssh的配置,由於windows不支持ssh,可自行安裝相關軟件來支持,這里使用的是PowerShellServer2020。在文末中有提供

Extended E-mail Notification 郵件通知配置,自行網上查找jenkins 郵件通知 會有很多的。

點擊左邊Manage Jenkins按鈕,點擊 Global Tool Configuration

配置好jdk和git,服務器得准備git環境

再把framework生成 和 掃描插件配置好

sonarqube安裝

服務器要求只要要2核4G,不然可能會安裝不成功。

在SonarQube的下載頁面:https://www.sonarqube.org/downloads/,下載需要的版本。下載完成后,解壓后可直接使用,文末有提供安裝包和相關需要使用到的工具。

需要使用到的目錄或文件就是

  • bin目錄下 對應平台 的StartSonar.bat

  • conf,配置文件

  • extensions\jdbc-driver\oracle 用於放置連接數據庫工具

  • logs 日志文件目錄,錯誤時查看錯誤的地方

  • web UI文件夾目錄

數據庫創建及處理

先在SqlServer數據中新建對應數據庫 Sonar,然后做相應修改

-- 查看排序策略
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'Sonar';
-- 更改排序策略
ALTER DATABASE Sonar  
COLLATE Chinese_PRC_CS_AS ; 

--***鎖 無法更改  查詢連接用戶 
select spid
from master.dbo.sysprocesses
where dbid=db_id('Sonar')
-- 殺死連接進程
kill 53

-- 排序規則必須區分大小寫(CS)和區分重音(AS)。
-- READ_COMMITED_SNAPSHOT 必須在SonarQube數據庫上設置。
SELECT is_read_committed_snapshot_on FROM sys.databases WHERE name='Sonar';

ALTER DATABASE Sonar SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;

-- 開啟了區分大小寫后 注意數據庫名稱等的大小寫

上面兩個數據庫調整是必須的。

官方文檔地址:https://docs.sonarqube.org/latest/setup/install-server/

再創建相關的用戶,並設置密碼。

需要使用到的插件准備

當然這里也需要jdk 11,需要先行安裝。

msbuild掃描插件下載地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/

Microsoft SQL JDBC驅動程序下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=57782 下載完成后,將下載的exe放到extensions\jdbc-driver\oracle下。

配置文件更改

conf下的sonar.properties文件,由於這里使用的sqlserver,因此這里是對SqlServer做的調整,

# 數據庫
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:sqlserver://IP:端口;databaseName=Sonar

# web端口
sonar.web.port=9000

若系統中有多個jdk版本,則修改wrapper.conf

wrapper.java.command=C:\Program Files\Java\jdk-11.0.8\bin\java

然后運行 C:\DevOps\sonarqube-8.4.1.35646\bin\windows-x86-64\StartSonar.bat ,會自動生成數據庫表文件,運行成功后,訪問http://localhost:9000

可在 administration -- Market 然后搜索Chinese 安裝,安裝完成后需要重啟服務,界面上也會出現重啟按鈕。

需要將這兩個配置打開

jenkins 集成 sonarqube

在前面的服務啟動后,相關配置配置好,新建項目流程

在jenkins服務中,點擊 new item,輸入一個項目名字,然后選擇Freestyle project

相關操作步驟截圖

項目描述及構建日志處理

配置git服務,及設置每30分鍾輪詢,當輪詢到有新代碼提交時就進行構建。

設置構建環境,構建前刪除,和構建日志輸出時間,及構建時,先進行還原項目

設置構建掃描,和項目構建環境

構建完成后,通過SSH推送到服務器,推送完成后,會執行 Exec command中的命令,一般都是通過某個命令將上傳的文件移動覆蓋發布的文件。

命令大致就是xcopy /s C:\jenkins\"PowerShell Server 2020"\sftproot\demo_new\* C:\product\Web /Y。前面的是PowerShellServer2020的sftproot安裝/上傳路徑,后面的是發布文件路徑

可在高級設置中,設置忽略文件。格式如 **/Web*.config,**/Release/assets/,images/

項目截圖。

這是掃描一個大項目的結果,有一些問題,項目越大,掃描時間也會越長哦

特別說明。如果出現構建失敗,提示msbuild找不到項目文件的話,可以嘗試把jenkins的配置文件config.xml中的工作路徑給修改下,把目錄放到外層試試。

我這里改成了這個,就正常工作了。<workspaceDir>C:/DevOps/workspace/${ITEM_FULL_NAME}</workspaceDir>

docker中安裝相關服務 yml

由於本項目是framework,在linux中沒法生成。所以這個就沒做后文了,

拉取相關鏡像后,在yml所在文件目錄,執行命令啟動服務

服務器安裝Docker-Compose太慢,可以通過本地安裝好后,上傳服務器。

Docker-Compose簡介安裝使用

version: '3'
services: 
  postgres:    
    image: postgres  
    restart: always
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - /data/postgres/postgresql/:/var/lib/postgresql
      - /data/postgres/data/:/var/lib/postgresql/data
    environment:
      TZ: Asia/Shanghai    
      POSTGRES_USER: sonar   
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonar
    networks: 
      - sonar-network
  sonar:
    image: sonarqube
    restart: always 
    container_name: sonarqube
    depends_on:
      - postgres
    volumes:
      - /data/sonarqube/extensions:/opt/sonarqube/extensions
      - /data/sonarqube/logs:/opt/sonarqube/logs
      - /data/sonarqube/data:/opt/sonarqube/data
      - /data/sonarqube/conf:/opt/sonarqube/conf
    ports:
      - 9000:9000
    environment:
      SONARQUBE.JDBC.USERNAME: sonar
      SONARQUBE.JDBC.PASSWORD: sonar
      SONARQUBE.JDBC.URL: jdbc:postgresql://postgres:5432/sonar
    networks: 
      - sonar-network
networks:
  sonar-network:
    driver: bridge

配置解釋:

version: '3': 表示使用第三代語法來構建 docker-compose.yaml 文件。

services: 用來表示 compose 需要啟動的服務,上面的配置文件中服務分別為:sonar、mysql

Image:指定下載鏡像版本

container_name: 指定容器名稱

environment: 此節點下的信息會當作環境變量傳入容器,例如mysql 服務配置了數據庫、密碼和權限信息。

ports: 表示對外開放的端口

volumes: 加載本地目錄下的配置文件到容器目標地址下

restart: always 表示如果服務啟動不成功會一直嘗試。

depends_on:配置依賴服務,表示需要先啟動 depends_on 下面的服務后,再啟動本服務。

links:與depends_on相對應,depends_on控制啟動順序,links控制容器連接問題。值為"服務名:別名"或者直接使用服務名

command: 執行內部命令

networks:加入指定網絡,用同一個網絡。

相關工具包

鏈接: https://pan.baidu.com/s/13fJS4rDQTmi1fsy1HVrdxQ 提取碼: cd41

個人博客原文地址:http://book.levy.net.cn/doc/devops/jenkins_sonar.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM