軟件安裝配置》》》
Gitea:
Gitea 的首要目標(biāo)是創(chuàng)建一個(gè)極易安裝,運(yùn)行非常快速三幻,安裝和使用體驗(yàn)良好的自建 Git 服務(wù)则北。項(xiàng)目采用 Go 作為后端語言蹋宦,只要生成一個(gè)可執(zhí)行程序即可。
它是跨平臺(tái)的咒锻,支持 Linux冷冗、macOS 和 Windows 以及各種架構(gòu),除了 x86惑艇,amd64蒿辙,還包括 ARM 和 PowerPC。
1.安裝git
centos 安裝git
yum install git
RHEL和衍生產(chǎn)品通常會(huì)發(fā)布較舊版本的git滨巴。您可以下載tarball并從源代碼進(jìn)行構(gòu)建思灌,也可以使用第三方存儲(chǔ)庫(例如IUS社區(qū)項(xiàng)目)來獲取git的最新版本。
CentOS 安裝最新版本 Git
https://www.cnblogs.com/jhxxb/p/10571227.html
2.docker 搭建 gitea
pull gitea鏡像
docker pull gitea/gitea
創(chuàng)建一個(gè)本地可以掛載到容器的目錄
mkdir -p /home/gitea
加上權(quán)限
chmod -R 777 gitea
初次執(zhí)行 run gitea恭取,注意這里 gitea 是前臺(tái)啟動(dòng)泰偿,啟動(dòng)后 command + C 退出就好了
宿主機(jī) 10022 映射到 gitea 容器的 22 ssh 端口
宿主機(jī) 10082 映射到 gitea 容器的 3000 http 端口
docker run -d --name gitea --restart=always -p 10022:22 -p 10082:3000 -v /home/gitea:/data gitea/gitea
SonarQube:
Sonar(SonarQube)是一個(gè)開源平臺(tái),用于管理源代碼的質(zhì)量蜈垮。Sonar 不只是一個(gè)質(zhì)量數(shù)據(jù)報(bào)告工具耗跛,更是代碼質(zhì)量管理平臺(tái)裕照。支持的語言包括:Java、PHP调塌、C#晋南、C、Cobol羔砾、PL/SQL负间、Flex 等。
主要特點(diǎn):
代碼覆蓋:通過單元測試姜凄,將會(huì)顯示哪行代碼被選中
改善編碼規(guī)則
搜尋編碼規(guī)則:按照名字政溃,插件,激活級(jí)別和類別進(jìn)行查詢
項(xiàng)目搜尋:按照項(xiàng)目的名字進(jìn)行查詢
對比數(shù)據(jù):比較同一張表中的任何測量的趨勢
注意:sonar服務(wù)器至少需要2G的內(nèi)存才能有效運(yùn)行
拉取鏡像态秧,默認(rèn)都是從 DockerHub 拉取
1 拉取數(shù)據(jù)庫
docker pull postgres
2 拉取sonarqube
docker pull sonarqube
3 啟動(dòng)postgresql
docker run --name db -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres
4 啟動(dòng) sonarqube
docker run --name sq --link db -e SONARQUBE_JDBC_URL=jdbc:postgresql://IP:5432/sonar -p 9000:9000 -d sonarqube
5 打開 http://localhost:9000/, 點(diǎn)擊 "Log in"
登錄賬號(hào):admin 密碼:admin
報(bào)錯(cuò)語句:
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改文件
vi /etc/sysctl.conf
修改本地文件的內(nèi)存大小值
vm.max_map_count = 655360
SonarQube 是以工程為單位進(jìn)行掃描管理的玩祟,第一步需要點(diǎn)擊 A 前面的 + 號(hào),創(chuàng)建一個(gè)新工程:
生成sonar的token
可以搜索chinese Pack屿聋,安裝中文語言包空扎,安裝成功后,重啟sonarqube服務(wù)润讥,再次訪問http://localhost:9000/转锈,即可看到中文界面
IDEA 集成(maven): https://blog.csdn.net/wojiushiwo945you/article/details/100699885
gradle: https://www.cnblogs.com/wangfg/p/12331745.html
mvn sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login=559fa7b02af13e181f0a39444ee17b71acdf2724 -Dsonar.java.binaries=target/sonar
gradle clean build sonarqube
Jenkins :
Jenkins 的前身是 Hudson 是一個(gè)可擴(kuò)展的持續(xù)集成引擎。Jenkins 是一款開源 CI&CD 軟件楚殿,用于自動(dòng)化各種任務(wù)撮慨,包括構(gòu)建、測試和部署軟件脆粥。Jenkins 支持各種運(yùn)行方式砌溺,可通過系統(tǒng)包、Docker 或者通過一個(gè)獨(dú)立的 Java 程序变隔。
主要特色功能:
- 流水線
- 多種類型的計(jì)算節(jié)點(diǎn)支持(SSH规伐、JNLP等)
- 豐富的插件擴(kuò)展機(jī)制
1 下載Jenkins官方鏡像
docker pull jenkins/jenkins
2 啟動(dòng)
docker run -d -p 80:8080 -p 50000:50000 -v jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins docker.io/jenkins/jenkins
-d
后臺(tái)運(yùn)行鏡像-p 80:8080
將鏡像的8080端口映射到服務(wù)器的80端口-p 50000:50000
將鏡像的50000端口映射到服務(wù)器的50000端口-v jenkins:/var/jenkins_home
/var/jenkins_home
目錄為jenkins工作目錄,>我們將硬盤上的一個(gè)目錄掛載到這個(gè)位置匣缘,方便后續(xù)更新鏡像后繼續(xù)使用原來的工作目錄猖闪。-v /etc/localtime:/etc/localtime
讓容器使用和服務(wù)器同樣的時(shí)間設(shè)置。--name jenkins
給容器起一個(gè)別名
3 查看
docker ps |grep jenkins
5配置Jenkins
在瀏覽器輸入http://ip進(jìn)入Jenkins登錄頁面肌厨。頁面會(huì)提示你到服務(wù)器的指定位置獲取初始化密碼培慌。
docker exec jenkins tail /var/jenkins_home/secrets/initialAdminPassword
在頁面輸入密碼,點(diǎn)擊Continue柑爸,進(jìn)入插件安裝頁面吵护。我們點(diǎn)擊左邊的Install suggested plugins,安裝推薦插件就好。
安裝中文插件
1.點(diǎn)擊Manage Jenkins
2.打開Available點(diǎn)擊馅而,輸入Localization: Chinese (Simplified)祥诽,查找。
3.安裝后點(diǎn)擊restart
安裝SonarQube插件
因?yàn)槲覀兪怯肑enkins做為后臺(tái)的持續(xù)掃描調(diào)度服務(wù)用爪,所以需要安裝SonarQube Scanner For Jenkins插件
搭建自動(dòng)化持續(xù)代碼掃描質(zhì)量平臺(tái)》》》
SonarQube主要工作流程:
1.開發(fā)人員使用開發(fā)工具(IDE)上傳代碼到GitLab(源代碼管理器)原押;
2.Jenkins(CI系統(tǒng))SCM自動(dòng)拉取代碼到到編譯服務(wù)器胁镐;
3.Sonar Scanners掃描該代碼檢查質(zhì)量,將分析結(jié)果推送到SonarQube平臺(tái)偎血,進(jìn)而持久化數(shù)據(jù)庫存儲(chǔ);
4.開發(fā)&測試人員可以使用IDE插件來同步SonarQube結(jié)果(java和js版本等)并可以實(shí)時(shí)在線分析分析
5.管理員可以通過Web訪問SonarQube質(zhì)量平臺(tái)盯漂,項(xiàng)目代碼質(zhì)量趨勢一目了然
關(guān)于Jenkins的配置:
在 Jenkins 項(xiàng)目構(gòu)建過程中加入SonarScanner進(jìn)行代碼分析颇玷,首先需要在Jenkins工程的構(gòu)建環(huán)境標(biāo)簽頁中勾選"Prepare SonarQube Scanner evironment"
配置SonarQube Scanner
構(gòu)建步驟
- Task to run: 輸入 scan,即分析代碼就缆;
- JDK :選擇 SonarQube Scanner 使用的 JDK(注意這里必須是 JDK 不能是 JRE)帖渠;
- Path to project properties : 這里可以指定一個(gè)sonar-project.properties 文件,如果不指定的話會(huì)使用項(xiàng)目默認(rèn)的 properties文件竭宰;
- Analysis properties: 這里需要輸入一些配置參數(shù)用來傳遞給 SonarQube空郊,這里的參數(shù)優(yōu)先級(jí)高于sonar-project.properties文件里面的參數(shù),所以可以在這里來配置所有的參數(shù)以替代
sonar-project.properties
文件切揭,下面列出了一些參數(shù)狞甚,sonar.language指定了要分析的開發(fā)語言(特定的開發(fā)語言對應(yīng)了特定的規(guī)則),sonar.sources定義了需要分析的源代碼位置(示例中的.所指示的是當(dāng)前 Jenkins項(xiàng)目的目錄)廓旬,sonar.java.binaries 定義了需要分析代碼的編譯后文件位置; - Additional arguments 輸入框中可以輸入一些附加的參數(shù),示例中的-X 意思是進(jìn)入SonarQube Scanner的Debug 模式僻澎,這樣會(huì)輸出更多的日志信息辛辨;
- JVM Options 可以輸入在執(zhí)行 SonarQube Scanner是需要的JVM參數(shù)。
關(guān)于質(zhì)量閥狀態(tài)關(guān)聯(lián)編譯結(jié)果
Jenkins支持每當(dāng)代碼分析無法滿足SonarQube的質(zhì)量標(biāo)準(zhǔn)時(shí)励背,即工程構(gòu)建失敗春霍,Jenkins需要安裝Quality Gates Plugin
另外,在項(xiàng)目工程中需要增加“構(gòu)建后操作”叶眉,不過此插件好像有個(gè)缺陷终畅,Project key輸入框不支持${variable}形式
小團(tuán)隊(duì)持續(xù)代碼掃描方案
DevOps 模式
1. 在TAPD中的操作
首先在流水線設(shè)置中找到Jenkins
然后下載插件,并點(diǎn)擊新增服務(wù)
記錄Webhook竟闪,一會(huì)兒要用
2. 在Jenkins中的操作
在系統(tǒng)管理中找到插件管理
選擇剛才下載的插件离福,安裝,重啟
點(diǎn)擊用戶名炼蛤,選擇設(shè)置妖爷,添加API Token,記得復(fù)制
插件配置
在系統(tǒng)管理中找到TAPD
- Jenkins名稱隨便搞
- 訪問地址就是當(dāng)前Jenkins的url
-
API Token
就是剛才的API Token -
Webhook
和Secrect Token
就是在TAPD平臺(tái)中的內(nèi)容
3. 配置成功!
如果配置成功的話絮识,就可以在TAPD平臺(tái)流水線配置中的“關(guān)聯(lián)已有服務(wù)”中找到自己的流水線啦
及時(shí)反饋機(jī)制:Jenkins的Montor view插件+釘釘群通知+Email通知
Git 工作流程
協(xié)作必須有一個(gè)規(guī)范的工作流程绿聘,讓大家有效地合作,使得項(xiàng)目井井有條地發(fā)展下去次舌。
三種廣泛使用的工作流程:
Git flow
Github flow
Gitlab flow
都采用"功能驅(qū)動(dòng)式開發(fā)"(Feature-driven development熄攘,簡稱FDD)。
它指的是彼念,需求是開發(fā)的起點(diǎn)挪圾,先有需求再有功能分支(feature branch)或者補(bǔ)丁分支(hotfix branch)。完成開發(fā)后逐沙,該分支就合并到主分支哲思,然后被刪除。
首先吩案,項(xiàng)目存在兩個(gè)長期分支棚赔。
主分支master
開發(fā)分支develop
前者用于存放對外發(fā)布的版本,任何時(shí)候在這個(gè)分支拿到的徘郭,都是穩(wěn)定的分布版靠益;后者用于日常開發(fā),存放最新的開發(fā)版残揉。
其次胧后,項(xiàng)目存在三種短期分支。
功能分支(feature branch)
補(bǔ)丁分支(hotfix branch)
預(yù)發(fā)分支(release branch)
一旦完成開發(fā)冲甘,它們就會(huì)被合并進(jìn)develop或master绩卤,然后被刪除。
Gitlab flow
對于"持續(xù)發(fā)布"的項(xiàng)目江醇,建議在master分支以外濒憋,再建立不同的環(huán)境分支。比如陶夜,"開發(fā)環(huán)境"的分支是master凛驮,"預(yù)發(fā)環(huán)境"的分支是pre-production,"生產(chǎn)環(huán)境"的分支是production条辟。
開發(fā)分支是預(yù)發(fā)分支的"上游"黔夭,預(yù)發(fā)分支又是生產(chǎn)分支的"上游"。代碼的變化羽嫡,必須由"上游"向"下游"發(fā)展本姥。比如,生產(chǎn)環(huán)境出現(xiàn)了bug杭棵,這時(shí)就要新建一個(gè)功能分支婚惫,先把它合并到master,確認(rèn)沒有問題,再cherry-pick到pre-production先舷,這一步也沒有問題艰管,才進(jìn)入production。
只有緊急情況蒋川,才允許跳過上游牲芋,直接合并到下游分支。
Squash 多個(gè)commit
為了便于他人閱讀你的提交捺球,也便于cherry-pick
或撤銷代碼變化缸浦,在發(fā)起Pull Request之前,應(yīng)該把多個(gè)commit合并成一個(gè)懒构。(前提是餐济,該分支只有你一個(gè)人開發(fā)耘擂,且沒有跟master
合并過胆剧。)
這可以采用rebase
命令附帶的squash
操作,具體方法請參考《Git 使用規(guī)范流程》醉冤。