文章目錄
- 0. 老男孩思想-選對池塘釣美人魚
- 1. 代碼回滾方案
- 2. SonarQube
- 2.1 代碼檢查工具
- 2.2 部署sonarqube
- 2.2.1 軟件要求
- 2.2.2 安裝軟件
- 2.2.3 啟動sonar
- 2.2.4 部署插件
- 2.3 sonar檢查java代碼
- 2.3.1 創建sona項目
- 2.3.2 分析java代碼
- 2.3.3 Jenkins結合sonar檢查代碼
- 2.4 sonar檢查非java代碼
- 2.4.1 創建項目
- 2.4.2 部署SonarScanner CLI
- 2.4.3 Jenkins結合sonar檢查代碼
- 3. nexus-maven倉庫(私服)
- 3.1 部署軟件
- 3.2 頁面訪問
- 3.3 修改遠程倉庫地址
- 3.4 修改maven的配置地址
- 4. Jenkins用戶權限管理(RBAC)
- 4.1 Jenkins設置
- 4.2 RBAC配置
- 4.2.1 新增Jenkins用戶
- 4.2.2 配置權限
- 4.2.3 分配權限
- 5. Jenkins基于docker的完整流程
- 6. 思維導圖
0. 老男孩思想-選對池塘釣美人魚
找女朋友不建議找高學歷的(碩士、博士)。否則就等著人家虐你吧,累的都不知道咋死的。找寵物找智商高的,因為寵物智商最高不過3歲兒童的智商,你可以玩弄于股掌之間,若你找個智商比你還高的寵物,那你不死也會扒層皮。
男生的標配學歷是本科,女生的標配學歷是大專。
找女朋友,要找氣質好的、身材好的,不要找妖艷的。
—以上經驗來自老男孩老師的親身感悟
1. 代碼回滾方案
2. SonarQube
SonarQube 是 一個開源的靜態代碼分析平臺,用于幫助開發團隊提升代碼質量和安全性=。它能夠自動檢測代碼中的潛在問題,例如錯誤、漏洞、代碼異味和安全風險,并提供詳細的報告和分析結果。
- 官方地址:
[Code Quality, Security & Static Analysis Tool with SonarQube | Sonar](https://www.sonarsource.com/products/sonarqube/)
- 官方下載地址:
[Download SonarQube | Sonar](https://www.sonarsource.com/products/sonarqube/downloads/)
- 歷史版本:
[下載以前的 SonarQube 服務器版本 |聲納](https://www.sonarsource.com/products/sonarqube/downloads/historical-downloads/)
2.1 代碼檢查工具
使用階段 | 代碼安全檢查工具 | 說明 | 用法 |
---|---|---|---|
部署前 | Sonarqube(開源,商業) | 安全、質量檢查 | 部署前,Jenkins通過sonar命令調用 |
部署前 | OWASP Dependency-Check | 根據漏洞庫,做漏洞掃描 | Jenkins插件 |
運行中 | AppScan(商業) | 漏掃工具 | |
運行中 | awvs(商業) | 掃描業務漏洞、應用樓頂 | 部署 |
運行中 | nessus(商業) | 掃描系統漏洞 | 部署 |
運行中 | hm(河馬)(開源) | 漏掃,webshell(網站后門) | 部署軟件;二進制部署 |
運行中 | 綠盟、奇安信、云安全中心 | ||
運行中 | trivy、clair、 | 容器環境掃描 | 容器部署 |
2.2 部署sonarqube
2.2.1 軟件要求
- Sonarqube 7.7 jdk 1.8 MySQL數據庫
- Sonarqube 8.9 lts jdk 11
- sonarqube從7.9后不支持MySQL,支持PostgreSQL、PSQL、Oracle
- sonarqube基于java開發,所以需要安裝OpenJDK8版本
- sonarqube需要依賴MySQL數據庫,至少5.6版本以上
- sonarqube的小型實例至少需要4G內存,如果是大型實例需要16G
2.2.2 安裝軟件
- 軟件包和插件:
sonarqube-7.7.zip等2個文件 鏈接: https://pan.baidu.com/s/1iAcRDLDrgmqk4i4EUj91tQ?pwd=ubpp 提取碼: ubpp
# 安裝jdk
[root@devops-sonarqube ~]# yum install -y java
# 部署sonarqube
[root@devops-sonarqube ~]# mkdir -p /app/tools
[root@devops-sonarqube ~]# unzip sonarqube-7.7.zip -d /app/tools
……
[root@devops-sonarqube ~]# ln -s /app/tools/sonarqube-7.7 /app/tools/sonar
[root@devops-sonarqube ~]# cd /app/tools/sonar/conf
# sonar對MySQL版本的要求
[root@devops-sonarqube /app/tools/sonar/conf]# grep -E 'MySQL' sonar.properties
#----- MySQL >=5.6 && <8.0
# 配置普通用戶
# sonar中有elasticsearch,es需要普通用戶運行
[root@devops-sonarqube ~]# useradd sonar
[root@devops-sonarqube ~]# chown -R sonar:sonar /app/tools/sonar/
- 啟動sonar數據庫:mysql
[root@docker01 ~]# docker run -d --name sonar_db -p 3306:3306 --restart always -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=sonar -e MYSQL_USER=sonar -e MYSQL_PASSWORD=1 mysql:5.7-debian
949f44bdd19213012d9c5761d82b493bb31925dbbeaae117c3d68de47a973dc6
[root@docker01 ~]# docker ps |grep mysql
949f44bdd192 mysql:5.7-debian "docker-entrypoint.s…" 7 seconds ago Up 7 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp sonar_db
- 修改配置文件:
/app/tools/sonar/conf/sonar.properties
2.2.3 啟動sonar
[root@devops-sonarqube ~]# su - sonar -c "/app/tools/sonar/bin/linux-x86-64/sonar.sh start"
Starting SonarQube...
Started SonarQube.
[root@devops-sonarqube ~]# ss -lntup |grep -E '9000|9001'
tcp LISTEN 0 25 *:9000 *:* users:(("java",pid=8266,fd=118))
tcp LISTEN 0 128 [::ffff:127.0.0.1]:9001 *:* users:(("java",pid=8177,fd=86))
- 主機添加hosts
- 前端頁面訪問
2.2.4 部署插件
# 刪掉原有插件
[root@devops-sonarqube /app/tools/sonar/extensions/plugins]# rm *
文件,目錄已經移動到回收站:/recyle/tmp.o49otsVpDL
[root@devops-sonarqube /app/tools/sonar/extensions/plugins]# ll ~/sonarqube*gz
-rw-r--r-- 1 root root 76055738 8月 1 08:34 /root/sonarqube_7.7.plugins_new.tar.gz
[root@devops-sonarqube /app/tools/sonar/extensions/plugins]# tar xf ~/sonarqube_7.7.plugins_new.tar.gz
[root@devops-sonarqube /app/tools/sonar/extensions/plugins]# mv plugins/* .
[root@devops-sonarqube /app/tools/sonar/extensions/plugins]# rm plugins/
文件,目錄已經移動到回收站:/recyle/tmp.yxCWpFOYKu
- 重啟sonar
[root@devops-sonarqube ~]# su - sonar -c "/app/tools/sonar/bin/linux-x86-64/sonar.sh restart"
Stopping SonarQube...
SonarQube was not running.
Starting SonarQube...
Started SonarQube.
2.3 sonar檢查java代碼
2.3.1 創建sona項目
- 令牌:
a4e2ef0f0b5e4b5342bb8443de5e9bbb22d38d67
2.3.2 分析java代碼
mvn sonar:sonar \-Dsonar.projectKey=java \-Dsonar.host.url=http://sonar.oldboy.cn:9000 \-Dsonar.login=a4e2ef0f0b5e4b5342bb8443de5e9bbb22d38d67 clean package
- 做好hosts解析
- 使用sonar命令編譯代碼
2.3.3 Jenkins結合sonar檢查代碼
sonar:sonar
-Dsonar.projectName=${JOB_NAME}
-Dsonar.projectKey=${JOB_NAME}
-Dsonar.host.url=http://sonar.oldboy.cn:9000
-Dsonar.login=a4e2ef0f0b5e4b5342bb8443de5e9bbb22d38d67
clean package
2.4 sonar檢查非java代碼
2.4.1 創建項目
- 令牌:
b2ca01afe7b2e7807a6389eaee44e2591b025fc9
- sonar命令:
sonar-scanner \-Dsonar.projectKey=china \-Dsonar.sources=. \-Dsonar.host.url=http://sonar.oldboy.cn:9000 \-Dsonar.login=b2ca01afe7b2e7807a6389eaee44e2591b025fc9
2.4.2 部署SonarScanner CLI
- 軟件包:
sonar-scanner-cli-4.7.0.2747-linux.zip 鏈接: https://pan.baidu.com/s/1rTT4DbTnYLYkprCrPs8o3A?pwd=6yww 提取碼: 6yww
[root@devops-jenkins /app/tools]# unzip sonar-scanner-cli-4.7.0.2747-linux.zip
[root@devops-jenkins /app/tools]# ln -s sonar-scanner-4.7.0.2747-linux sonar-scanner
# 測試
[root@devops-jenkins /app/code/china/china-ex-main]# /app/tools/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=china -Dsonar.sources=. -Dsonar.host.url=http://sonar.oldboy.cn:9000 -Dsonar.login=b2ca01afe7b2e7807a6389eaee44e2591b025fc9
……
2.4.3 Jenkins結合sonar檢查代碼
# sonar掃描器路徑寫絕對路徑
sonar-scanner \-Dsonar.projectName=${JOB_NAME} \-Dsonar.projectKey=${JOB_NAME} \-Dsonar.sources=. \-Dsonar.host.url=http://sonar.oldboy.cn:9000 \-Dsonar.login=b2ca01afe7b2e7807a6389eaee44e2591b025fc9
3. nexus-maven倉庫(私服)
3.1 部署軟件
- 軟件包:
nexus-3.13.0-01-unix.tar.gz 鏈接: https://pan.baidu.com/s/15Ebhb7K5iro-GR3UNBnPJw?pwd=c1pp 提取碼: c1pp
[root@devops-nexus ~]# mkdir -p /app/tools
[root@devops-nexus ~]# tar xf nexus-3.13.0-01-unix.tar.gz -C /app/tools/
[root@devops-nexus ~]# ln -s /app/tools/nexus-3.13.0-01 /app/tools/nexus
[root@devops-nexus ~]# ln -s /app/tools/nexus/bin/nexus /sbin/
# 安裝jdk1.8
[root@devops-nexus ~]# yum install -y java-1.8.0-openjdk
……
- 啟動服務,nexus端口是8081
[root@devops-nexus ~]# nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user. This is NOT recommended!
WARNING: ************************************************************
Starting nexus
[root@devops-nexus ~]# ss -lntup |grep 8081
tcp LISTEN 0 50 0.0.0.0:8081 0.0.0.0:* users:(("java",pid=2673,fd=871))
- 主機添加解析
3.2 頁面訪問
3.3 修改遠程倉庫地址
- Nexus向遠程倉庫獲取本地沒有的依賴,默認是官方地址;需要修改成阿里云的下載源
https://maven.aliyun.com/nexus/content/groups/public/
3.4 修改maven的配置地址
- maven獲取依賴時,不再直接訪問阿里云,而是訪問Nexus
[root@devops-jenkins /app/tools/maven/conf]# cp settings.xml settings.xml.bak
[root@devops-jenkins /app/tools/maven/conf]# vim settings.xml
- maven的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><pluginGroups></pluginGroups><proxies></proxies><servers><server> <id>my-nexus-releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>my-nexus-snapshot</id> <username>admin</username> <password>admin123</password> </server></servers><mirrors><mirror><id>nexus</id><mirrorOf>*</mirrorOf><url>http://10.0.0.74:8081/repository/maven-public/</url></mirror></mirrors><profiles><profile><id>nexus</id><repositories><repository><id>central</id><url>http://10.0.0.74:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>central</id><url>http://10.0.0.74:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories></profile></profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>
- 編譯代碼,測試一下
4. Jenkins用戶權限管理(RBAC)
- Jenkins默認每個用戶的權限都是最?權限。
- 需要讓用戶與任務關聯(RBAC)
- RBAC:基于角色的認證
4.1 Jenkins設置
- 查看RBAC插件是否安裝
- 用戶權限策略
4.2 RBAC配置
4.2.1 新增Jenkins用戶
4.2.2 配置權限
4.2.3 分配權限
5. Jenkins基于docker的完整流程
6. 思維導圖
https://kdocs.cn/join/gpuxq6r?f=101\r\n邀請你加入共享群「老男孩教育Linux運維99期-孫克旭」一起進行文檔協作