day072-代码检查工具-Sonar与maven私服-Nexus

文章目录

  • [0. 老男孩思想-选对池塘钓美人鱼](#0. 老男孩思想-选对池塘钓美人鱼)
  • [1. 代码回滚方案](#1. 代码回滚方案)
  • [2. SonarQube](#2. SonarQube)
    • [2.1 代码检查工具](#2.1 代码检查工具)
    • [2.2 部署sonarqube](#2.2 部署sonarqube)
      • [2.2.1 软件要求](#2.2.1 软件要求)
      • [2.2.2 安装软件](#2.2.2 安装软件)
      • [2.2.3 启动sonar](#2.2.3 启动sonar)
      • [2.2.4 部署插件](#2.2.4 部署插件)
    • [2.3 sonar检查java代码](#2.3 sonar检查java代码)
      • [2.3.1 创建sona项目](#2.3.1 创建sona项目)
      • [2.3.2 分析java代码](#2.3.2 分析java代码)
      • [2.3.3 Jenkins结合sonar检查代码](#2.3.3 Jenkins结合sonar检查代码)
    • [2.4 sonar检查非java代码](#2.4 sonar检查非java代码)
      • [2.4.1 创建项目](#2.4.1 创建项目)
      • [2.4.2 部署SonarScanner CLI](#2.4.2 部署SonarScanner CLI)
      • [2.4.3 Jenkins结合sonar检查代码](#2.4.3 Jenkins结合sonar检查代码)
  • [3. nexus-maven仓库(私服)](#3. nexus-maven仓库(私服))
    • [3.1 部署软件](#3.1 部署软件)
    • [3.2 页面访问](#3.2 页面访问)
    • [3.3 修改远程仓库地址](#3.3 修改远程仓库地址)
    • [3.4 修改maven的配置地址](#3.4 修改maven的配置地址)
  • [4. Jenkins用户权限管理(RBAC)](#4. Jenkins用户权限管理(RBAC))
    • [4.1 Jenkins设置](#4.1 Jenkins设置)
    • [4.2 RBAC配置](#4.2 RBAC配置)
      • [4.2.1 新增Jenkins用户](#4.2.1 新增Jenkins用户)
      • [4.2.2 配置权限](#4.2.2 配置权限)
      • [4.2.3 分配权限](#4.2.3 分配权限)
  • [5. Jenkins基于docker的完整流程](#5. Jenkins基于docker的完整流程)
  • [6. 思维导图](#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

  1. sonarqube基于java开发,所以需要安装OpenJDK8版本
  2. sonarqube需要依赖MySQL数据库,至少5.6版本以上
  3. sonarqube的小型实例至少需要4G内存,如果是大型实例需要16G

2.2.2 安装软件

  • 软件包和插件:sonarqube-7.7.zip等2个文件 链接: https://pan.baidu.com/s/1iAcRDLDrgmqk4i4EUj91tQ?pwd=ubpp 提取码: ubpp
shell 复制代码
# 安装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
shell 复制代码
[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

shell 复制代码
[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 部署插件

shell 复制代码
# 删掉原有插件
[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
shell 复制代码
[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代码

shell 复制代码
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检查代码

shell 复制代码
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命令:
shell 复制代码
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
shell 复制代码
[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检查代码

shell 复制代码
# 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
shell 复制代码
[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
shell 复制代码
[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
shell 复制代码
[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 复制代码
<?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期-孙克旭」一起进行文档协作