一、Overview
繼續 DevOps 實施的相關內容,在上一篇的博客中,完成了對於工具鏈中使用到的軟件所需的運行環境的配置,在這一篇的博客中,將聚焦於我們使用到的兩個主要的軟件:Jenkins 與 SonarQube 在 Windows 服務器上的部署安裝,為后續 DevOps 的實施,構建軟件基礎
二、Contents
三、Step by Step
3.1、前言
在 Jenkins 與 SonarQube 的版本選擇上,這里我選擇的都是最新的 LTS 版本,也就是長期支持版本,如果你沒有什么特定的需求的話,建議不要選擇過於古老的軟件版本
這里請重點關注 SonarQube 的版本問題,對於自動化代碼檢查的數據,SonarQube 支持持久化到常見的數據庫中(默認使用的是 H2 數據庫),然而 8.x 之后的版本只支持持久化到 Oracle、SQL Server 以及 PostgreSQL,嗯,同 Gitlab 一樣,沒有 MySQL
因此,如果你需要持久化數據到 MySQL 數據庫,最后一個能選擇的版本則是 7.7 版本(電梯直達),並且這個版本只支持 MySQL 5.6、5.7,考慮到后續已經不再支持 MySQL 數據庫的緣故,請謹慎考慮是否一定要采用該版本
3.2、Jenkins
3.2.1、程序安裝
打開 Jenkins 官網,找到下載頁面(https://www.jenkins.io/download/),選擇最新的 LTS 版本下載,針對 Windows 平台,可以通過 war 包運行,在 docker 中運行,以及通過 msi 安裝包安裝之后,作為一個 Windows 服務運行
作為一個需要持續運行的服務,這里我選擇通過 msi 方式的來完成程序的部署
雙擊 msi 安裝文件,配置軟件的安裝路徑,對於這種基礎的軟件服務,建議還是放在默認的位置
因為 Jenkins 在安裝之后,是會作為一個獨立的 Windows 服務的,如果你需要使用域賬戶或本地賬戶作為服務的運行方來運行該服務的話,這里需要進行配置賬戶、密碼
Jenkins 默認使用 8080 端口,可以點擊下方的 Test Port 按鈕來測試當前設定的端口是否已經被占用
在上一篇中有提到 Jenkins 是基於 Java 進行開發的,在軟件的安裝過程中,安裝程序默認會帶出來我們配置的 Java SDK 信息,當然,你也可以在這里針對 Jenkins 設置不同的 Java SDK
完成所需運行環境的配置之后,將 Jenkins 服務所使用的 8080 端口添加到防火牆的白名單中,從而允許別的機器可以訪問到該服務
當配置完成之后,點擊 Install 等待安裝完成即可,當安裝向導提示安裝完成時就可以通過瀏覽器訪問 Jenkins
3.2.2、基礎配置
打開瀏覽器,按照頁面上的提示,我們需要找到位於指定路徑上的密碼,復制到頁面上的輸入框,來完成 Jenkins 的解鎖,從而繼續后續的操作
解鎖之后,Jenkins 會提示你安裝一些必要的插件,這里如果你因為網絡問題沒有安裝成功或者壓根沒有彈出這個頁面,也沒有關系,后續可以在程序中手動的選擇需要安裝的插件
等待插件的安裝完成 or 直接跳過插件的安裝,創建一個管理員賬戶,用來管理我們的 Jenkins 系統,點擊下一步,會需要我們配置一個 Jenkins URL,這個地址采用默認的地址即可,這里一定要注意,如果你調整了該 URL 的配置,后續一定要通過 Web 服務器進行反向代理,否則后續會出現各種問題
點擊保存並完成之后,基本的 Jenkins 運行環境就安裝配置完成了,當然,為了實現我們的需求,還需要后續在此基礎上,安裝各種所需的插件,從而實現構建流水線來完成持續集成的功能
3.3、SonarQube
3.3.1、程序安裝
同 Jenkins 一樣,SonarQube 同樣選擇最新的 LTS 版本進行下載了(電梯直達)
SonarQube 下載完成的是一個壓縮包,解壓壓縮包,找到 bin 目錄,里面列出了在不同操作系統運行程序的方式,因為我們是在 Windows 平台,所以這里選擇 windows-x86-64
文件夾。同樣的,作為一個需要常駐的服務,這里最好也將應用作為 Windows 服務進行運行
右擊 InstallNTService.bat
選擇以管理員身份運行,再使用管理員身份運行 StartNTService.bat
即可
打開瀏覽器,SonarQube 默認使用 9000 端口,等待一段時間,如果可以看到如下的頁面,則代表應用已經安裝成功,點擊右上角的 Log in,輸入默認的賬戶、密碼即可登錄到系統中(默認的賬戶、密碼都是 admin)
PS:如果 9000 端口已經被占用了,可以找到 conf 文件下的 sonar.properties 文件修改 sonar.web.port
配置然后重啟服務即可
3.3.2、數據持久化
對於自動化的代碼檢查數據,是具有一定的價值的,因為目前數據還是存儲在 SonarQube 內置的 H2 數據庫中,為了便於后續的使用,這里選擇持久化到 SQL Server 數據庫中
PS:請關注你使用的 SonarQube 所支持的數據庫版本信息
新建一個數據庫,這里必須調整數據庫的排序規則為 CS(case-sensitive,區分大小寫)、AS(accent-sensitive,區分重低音),例如這里我選擇的排序規則為 Chinese_PRC_CS_AS
數據庫創建之后,需要執行如下的 SQL 語句,確保當前庫的 is_read_committed_snapshot_on
屬性設置為 true,這里的 sonar 就是我新建的數據庫名稱
-- 查看 is_read_committed_snapshot_on 是否啟用
SELECT is_read_committed_snapshot_on FROM sys.databases WHERE name='sonar';
-- 打開 is_read_committed_snapshot_on
ALTER DATABASE sonar SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
數據庫設置完成之后,我們需要下載 Microsoft SQL JDBC Driver 7.2.2 package 這個 SQL Server 的 JDBC 驅動到本地,這里選擇下載壓縮包
找到下載之后的壓縮包解壓,選擇 auth 路徑下的 x64 文件夾,獲取到這個 64 位的 sqljdbc_auth.dll
文件,拷貝到 SonarQube 的路徑下,這里我在 \extensions\jdbc-driver
路徑下新建了一個 mssql 文件夾用來存放這個 dll 文件
驅動下載完成后,找到 conf 文件下的 sonar.properties 文件,修改數據庫連接信息,重新啟動 SonarQube 服務,等待數據庫表的創建完成,嗯,這個過程比較慢,耐心等待
等待應用的重新啟動完成,與 Jenkins 相同,我們可以安裝各種插件來豐富 SonarQube,這里我們可以在登錄系統后,點擊 Administration
菜單,在 Marketplace
中,下載所需的插件,例如這里可以下載中文的語言包,重啟之后,系統就變成了中文
同樣的,針對服務器無法連接外網的同學,我們可以從網絡上找到需要的插件進行下載,然后放到程序運行路徑下的 \extensions\plugins
文件夾中,重啟服務即可
3.4、總結
自此,Jenkins 和 SonarQube 就已經安裝配置完成了,當然,為了實現我們的需求,在實際使用時 Jenkins 還需要安裝一些必須的插件,在下一章中,就可以通過與 Gitlab 進行串接,完成 .NET 應用的持續集成工作