docker compose容器部署 sonarqube+jenkins+dingtalk钉钉插件通知+中文插件 代码检测。超详细

docker hub : https://hub.docker.com/_/sonarqube

钉钉插件:https://github.com/xbmlz/sonar-dingtalk-plugin

中文包:https://github.com/xuhuisheng/sonar-l10n-zh

 sonar客户端:https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/scanners/sonarscanner/

 

 部署sonar并配置

一、提前创目录并加权。 直接容器创会报错权限不足

mkdir -p sonarqube/data    sonarqube/extensions     postgresql_data
chmod 777 sonarqube/data    sonarqube/extensions     postgresql_data

 

二、部署sonar 准备yml文件

注意:sonarqube:lts-community 镜像每次拉 可能都已经更新新版

vim docker-compose.yml
version: "3"
services:
  sonarqube:
    image: sonarqube:community           #默认拉取最新代码。 
    container_name: sonarqube
    depends_on:
      - sonarqubedb
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://sonarqubedb:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./sonarqube2/conf:/opt/sonarqube/conf
      - ./sonarqube2/data:/opt/sonarqube/data
      - ./sonarqube2/extensions:/opt/sonarqube/extensions
    ports:
      - "19000:9000"
      - "19002:9010"
    networks:
      - qita


  sonarqubedb:
    image: postgres
    container_name: sonarqubedb
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./sonarqube2/postgresql_data:/var/lib/postgresql/data
    networks:
      - qita

#钉钉通知插件 sonarqubedingding: image: xbmlz
/sonar-dingtalk-plugin container_name: sonarqubedingding restart: always ports: - "9010:9010" volumes: - /etc/localtime:/etc/localtime:ro networks: - qita networks: qita: external: true

 

三、启动sonar

docker compose -f  docker-compose.yml up -d 

 

四、设置中文

包地址在上面。 下载后运行 。 下载最新版本的,和上面sonar最新版本一般都会兼容

 翻译包拷贝到容器内 重启

 

docker cp sonar-l10n-zh-plugin-8.9.jar  sonarqube:/opt/sonarqube/lib/extensions/
docker restart sonarqube

 

五、进入sonar页面,并登录

http://you_ip:19000/    修改你的ip。 登录进去后修改账号密码 ,默认admin/admin    此处登录忽略

 

六、创建钉钉机器人

进入想告警的钉钉群  

 复制webhook  token=***的值    。 https://oapi.dingtalk.com/robot/send?access_token=********** 

安全设置

 七、配置sonar机器人

版本不一样,设置的地方是一样的

 

 名称随便,URL填 http://插件部署电脑的IP:9010/dingtalk?access_token=机器人的token&sonar_token=令牌

端口上面yml文件是什么。就写什么

 

新版本必须使用令牌

 

 

 

上方网络调用可以改成以下的

URL填 http://插件部署电脑的IP:9010/dingtalk?access_token=机器人的token&sonar_token=令牌

 

 

 

 

八、指定本机sonar ip

不然钉钉无法通知

 

 

 

 

 

 

九、提前展示效果,需要jenkins配置完 

 

 

配置jenkins

 一、准备dockerfile文件

我这边是通过jenkins去替换dockerfile相关的值。注意 下方dockerfile中RUN 后面的备注 需要删掉

后端dockerfile

FROM sonarsource/sonar-scanner-cli

#代码拷贝到容器中  123是代码库,通过jenkins自动替换
COPY  123  /opt/123

#RUN     find /opt/123  -type f -name "*.zip" -exec rm -f {} \


RUN   echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"   \
&& echo "检测开始" && echo "%%%%%%%%%%"

#777 是服务名称  通过jenkins写shell脚本替换
#需要用root运行
USER root

#安装find命令
RUN yum install -y findutils                    

#src_path 是代码库下的子模块, 搜索所有src目录。 通过sonar.sources指定src目录扫描
RUN  javahome='/opt/123/' \
&& src_path=$(find $javahome -type d -name "src" | sed 's|^\./||')   \
&& src2_path=$(echo $src_path | sed 's|src|src/main/java|g')         \
&& src3_path=$(echo $src2_path | sed 's/ /,/g')   \
&& sonar-scanner   \
  -Dsonar.projectName=777  \                            # 项目名称
  -Dsonar.projectKey=777   \                            # 项目唯一标识符
  -Dsonar.java.binaries=**/target/classes \             # 指定打包后的目录。 子模块多 所有**
  -Dsonar.sources=$src3_path    \                       # 指定需要扫描的src源码目录
  -Dsonar.projectBaseDir=$javahome          \           # 项目根目录
  -Dsonar.sourceEncoding=UTF-8       \                  # 字符集
  -Dsonar.host.url=http://192.168.1.1:19000  \          # SonarQube 服务器地址,自行修改
  -Dsonar.token=squ_*********3f538719c135e42            # 指定上面sonar用户页面创建的token。 新版本不能用login账号密码



RUN echo "检测结束" && echo "%%%%%%%%%%" \
&&  echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"  

 前端dockerfile

 #需要有node环境
FROM sonarsource/sonar-scanner-cli

#前端代码拷贝到容器中(多套代码仓库) COPY aaa /opt/aaa COPY bbb /opt/bbb COPY ccc /opt/ccc COPY ddd /opt/ddd USER root RUN echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" \ && echo "检测开始" && echo "%%%%%%%%%%" #777 是服务名称 #删除不扫描的文件 ,这里删除静态资源图片等 RUN find /opt/ -type d -name "img" -exec rm -rf {} + \ && find /opt/ -type d -name "assets" -exec rm -rf {} + WORKDIR /opt/ RUN sonar-scanner \ -Dsonar.projectName=777 \ -Dsonar.projectKey=777 \ -Dsonar.sourceEncoding=UTF-8 \ -Dsonar.host.url=http://192.168.1.1:19000 \ -Dsonar.token=squ_*********3f538719c135e42 \ -Dsonar.javascript.nodejs.version=20 \ #指定node版本 -Dsonar.nodejs.executable=/usr/bin/node \ #指定node命令位置 -Dsonar.npm.executable=/usr/bin/npm \ #指定npm命令位置 -Dsonar.modules=aaa,bbb,ccc,ddd \ #指定所有仓库名称 -Daaa.sonar.projectBaseDir=/opt/aaa \ #指定第一个仓库名称 变量跟着改 -Daaa.sonar.sources=src \ -Daaa.sonar.projectName=aaa-dev \ -Daaa.sonar.praaojectKey=aaa-dev \ -Dbbb.sonar.projectBaseDir=/opt/bbb \ #指定第二个仓库 -Dbbb.sonar.sources=src \ -Dbbb.sonar.projectName=bbb-dev \ -Dbbb.sonar.projectKey=bbb-dev \ -Dccc.sonar.projectBaseDir=/opt/ccc \ #指定第三个 -Dccc.sonar.sources=src \ -Dccc.sonar.projectName=ccc-dev \ -Dccc.sonar.projectKey=ccc-dev
#以此类推
RUN echo "检测结束" && echo "%%%%%%%%%%" \ && echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"

 

二、配置jenkins脚本

#环境准备, 创建目录 进入目录,拉下来的代码移过去
mkdir     ../build-test
rm -rf    ../build-test/*
cd        ../build-test
\mv       ../$JOB_NAME  ./

#拷贝sonar客户端工具 和上面的dockerfile文件
\cp      ../dockerfile/service/dockerfile-sonar   ./dockerfile-sonar

 

#替换dockerfile中的固定值
sed -i "s/777/testtest/g"  dockerfile-sonar      #testtest改成自己相关任务名称,sonar展示
sed -i "s/123/$JOB_NAME/g" dockerfile-sonar      #代码仓库名称

 

#构建镜像
docker build -t test:test11 -f mvnjdkfile .

 

三、查看构建效果

jenkins构建日志中会体现

 

image

 

 

尊重别人的经验。分享页面请附带此地址 。谢谢

 

posted @ 2025-02-14 10:01  mrdongdong  阅读(420)  评论(0)    收藏  举报