最新要闻
- 观天下!密密麻麻!地震后松毛虫大规模入侵土耳其:场面惊悚 令人不适
- 广东一特斯拉连撞多车冲毁店门现场视频:网友看完称刹车灯亮了 油门当刹车
- 世界热文:75岁老人中风 好友发现运动步数为0报医:最终脱离危险
- 全球首个财务自由大学诞生 美国普林斯顿大学2600亿财富养活自己
- 世界今头条!“帮忙资金”助基金保壳
- 当前聚焦:工作人员帮游客捡手机被4只幼虎围观 网友:幸亏是“幼儿园”
- 全球快看点丨董明珠:中国制造业要想成为世界级 必须在创新上下功夫
- 摄影师把iPhone塞水下拍美景 咕噜咕噜一阵冒泡 Siri:这把憋气局
- 全球速读:吴青峰发文请大家别听苏打绿的歌:母带仍被非法利用 还听是助纣为虐
- 学弈这篇文言文是什么意思
- 仅1/3美国人能轻松支付400美元应急费用:信用卡违约率激增
- 世界快讯:裁员70% 关停两个办公点:自动驾驶卡车公司Embark倒闭边缘
- 【世界新视野】想买法拍车捡漏?你可能得先准备10本驾照
- 全球速读:985高校女大学生裸辞大公司:每天活得像老鼠
- 【当前热闻】瞬狙和闪狙哪个更快_瞬狙
- 精选!台球杆什么皮头最好
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
聊一聊如何用SonarQube管理.NET代码质量
- 背景
- 搭建 sonarqube
- 如何接入?
- 总结
- 参考资料
背景
代码质量其实是一个很容易被忽略的关键点,可能有的团队会有 Code Review 这些环节来做一定程度的保障,但是这个 Code Review 会很耗费人力和时间,估计大部分团队都不会很经常的来弄,比较多的可能会是有间隔性的来几次。
这个时候就会需要引入一些工具来协助去处理这一块。
(资料图片仅供参考)
sonarqube 在这一个领域是比较不错的存在,所以今天我们就来看看如何用这个工具来管理 .NET Core 时代的 .NET 的代码质量。
搭建 sonarqube
第一步肯定是要搭建一个服务端,这里用 docker-compose 的方式来搭建,相对简单一点。
下面是 yml 文件,主要有两个内容,一个是数据库 postgres,用的是 15-alpine 版本 ,一个是 sonarqube,用的是 9-community。 postgres 主要是存储 sonarqube 的一些内容,如果不用外部数据库的话,就会用默认的 H2 数据库。
version: "3"services: postgres: image: postgres:15-alpine restart: always container_name: postgres ports: - 5432:5432 volumes: - ./pg/postgresql/:/var/lib/postgresql - ./pg/data/:/var/lib/postgresql/data environment: TZ: Asia/Shanghai POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar123456 POSTGRES_DB: sonar networks: - sonar-network sonar: image: sonarqube:9-community restart: always container_name: sonar depends_on: - postgres volumes: - ./sonarqube/extensions:/opt/sonarqube/extensions - ./sonarqube/logs:/opt/sonarqube/logs - ./sonarqube/data:/opt/sonarqube/data - ./sonarqube/conf:/opt/sonarqube/conf ports: - 9000:9000 networks: - sonar-networknetworks: sonar-network: driver: bridge
还需要修改 sonarqube 的配置文件 sonar.properties,来修改数据库。
sonar.jdbc.username=sonarsonar.jdbc.password=sonar123456sonar.jdbc.url=jdbc:postgresql://postgres:5432/sonar
这里启动后就可以看到服务端启动了,然后按需选择是否需要汉化。
如何接入?
在创建项目的时候会出现下面这些选择。
这里选择手动的方式,然后创建一个 test 项目。
创建后会让我们选择用什么方式去分析我们的代码,有结合 CI 的方式,也有手动的方式。
这里还是选择手动的方式来演示,需要先创建一个 token,直接点生成就好了。
然后就可以看到选择 .NET Core 相关的内容,也很贴心的把相关脚本都给我们了。
但是直接运行这个脚本的话,dotnet sonarscanner begin
和 dotnet build
这两步是可以成功的, dotnet sonarscanner end
这一步是会失败的,因为还需要 JAVA 的环境,还要和 sonarqube 服务端相匹配的 JDK。
为了简化这一步,老黄也是用 docker 来处理这个,下面是 Dockerfile
FROM openjdk:17-slim-bullseye# change the source, if necessary# RUN cp /etc/apt/sources.list /etc/apt/sources.list_bak \# && sed -i "s/deb.debian.org/mirrors.ustc.edu.cn/g" /etc/apt/sources.list \# && sed -i "s|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g" /etc/apt/sources.listWORKDIR /projectCOPY run.sh ./COPY nuget.config ./RUN apt-get update \ && apt-get install \ wget \ gss-ntlmssp \ -y \ && wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \ && dpkg -i packages-microsoft-prod.deb \ && rm packages-microsoft-prod.deb \ && apt-get update \ && apt-get install dotnet-sdk-3.1 dotnet-sdk-6.0 -y \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && chmod +x /project/run.shENTRYPOINT [ "/project/run.sh" ]
基于 JDK 17,然后安装 dotnet sdk,这里装了 3.1 和 6.0,也可以考虑一个版本一个镜像,最后执行 run.sh 这个脚本。
其中有一个要注意的点是 nuget.config
,因为不少公司会在内部搭建包管理,所以这一块要注意更新。
再来看看 run.sh 这个脚本
#!/bin/bashset -xPROJECT_KEY="${PROJECT_KEY:-ConsoleApplication1}"PROJECT_PATH="${PROJECT_PATH:-.}"SONAR_HOST="${HOST:-http://localhost:9000}"SONAR_LOGIN_KEY="${LOGIN_KEY:-admin}"# install the newest dotnet-sonarscannerdotnet tool install --global dotnet-sonarscannerexport PATH="$PATH:$HOME/.dotnet/tools/"# restore with nuget.configdotnet restore "${PROJECT_PATH}" --configfile /project/nuget.config# execute scannerdotnet sonarscanner begin /k:"${PROJECT_KEY}" /d:sonar.host.url="${SONAR_HOST}" /d:sonar.login="${SONAR_LOGIN_KEY}"dotnet build "${PROJECT_PATH}"dotnet sonarscanner end /d:sonar.login="${SONAR_LOGIN_KEY}"
前面半段是一些变量定义,后面半段就是从 sonarque 里面复制出来的脚本。
然后就是执行,示例直接 dotnet new 一个新的控制台程序出来测试
docker run --name dotnet-scanner -it --rm \ -v PUT_YOUR_PROJECT_DIR_HERE:/project/src \ -e PROJECT_KEY=PUT_YOUR_PROJECT_KEY_HERE \ -e PROJECT_PATH=/project/src/PUT_YOUR_PROJECT_PATH_HERE \ -e HOST=PUT_YOUR_HOST_HERE \ -e LOGIN_KEY=PUT_YOUR_KEY_HERE \ dotnet-scanner:v202302
等运行完成后,在网页端就可以看到具体的结果了。
由于是新建的控制台程序,只有一行代码,所以很多指标都是 0。
如果对代码覆盖率这一块还有要求,可以参考 https://docs.sonarqube.org/latest/analyzing-source-code/test-coverage/dotnet-test-coverage/ 集成进去。
到这里的话,一个简单的项目就算 OK 了,后续代码更新的话,重复执行这个就会更新到网页上面。
这里用的规则是默认的,不过规则这一块是可以自定义的,可以按照自己团队的风格来定义。
总结
用 sonarqube 来管理代码质量这一块还是挺不错的,结合 CICD 这些工具的话会更加合适,如果没有 CICD,搞个定时任务去定期执行也是可以的。
本文相关的示例代码:
https://github.com/catcherwong/dotnet-sonarscanner-with-docker
参考资料
- https://docs.sonarqube.org/latest/setup-and-upgrade/install-the-server/
- https://docs.sonarqube.org/9.9/analyzing-source-code/scanners/sonarscanner-for-dotnet/
-
语义分割评价指标(Dice coefficient, IoU)
语义分割任务常用的评价指标为Dicecoefficient和IoU。Dice和IoU都是用来衡量两个集合之间相似性的度量,...
来源: -
(数据库系统概论|王珊)第十章数据库恢复技术-第一、二节:事务的基本概念和数据库恢复概述
pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目...
来源: 聊一聊如何用SonarQube管理.NET代码质量
语义分割评价指标(Dice coefficient, IoU)
(数据库系统概论|王珊)第十章数据库恢复技术-第一、二节:事务的基本概念和数据库恢复概述
天天通讯!Spring Boot 实现装饰器模式,真香!
观天下!密密麻麻!地震后松毛虫大规模入侵土耳其:场面惊悚 令人不适
广东一特斯拉连撞多车冲毁店门现场视频:网友看完称刹车灯亮了 油门当刹车
世界热文:75岁老人中风 好友发现运动步数为0报医:最终脱离危险
全球首个财务自由大学诞生 美国普林斯顿大学2600亿财富养活自己
大神教你在 Linux 中查看你的时区
世界今头条!“帮忙资金”助基金保壳
当前聚焦:工作人员帮游客捡手机被4只幼虎围观 网友:幸亏是“幼儿园”
全球快看点丨董明珠:中国制造业要想成为世界级 必须在创新上下功夫
摄影师把iPhone塞水下拍美景 咕噜咕噜一阵冒泡 Siri:这把憋气局
全球速读:吴青峰发文请大家别听苏打绿的歌:母带仍被非法利用 还听是助纣为虐
学弈这篇文言文是什么意思
环球快报:读Java性能权威指南(第2版)笔记08_即时编译器中
仅1/3美国人能轻松支付400美元应急费用:信用卡违约率激增
可视化调试某个js对象的属性UI插件 class HTUI
每日速递:一进群就水群?试试这个水群拦截工具
世界快讯:裁员70% 关停两个办公点:自动驾驶卡车公司Embark倒闭边缘
【世界新视野】想买法拍车捡漏?你可能得先准备10本驾照
全球速读:985高校女大学生裸辞大公司:每天活得像老鼠
【当前热闻】瞬狙和闪狙哪个更快_瞬狙
精选!台球杆什么皮头最好
世界快消息!打开MASA Blazor的正确姿势4.1:母版页布局
全球热推荐:Study for Go ! Chapter three - Function
day02-项目实现01
全球速读:【奶奶看了都会】ChatGPT3.5接入企业微信,可连续对话
将外部参数传入awk命令的方法汇总
【热闻】Asp.net core mapcontrollers 背后干了些啥
思科交换机的密码策略与端口安全设置
当前关注:Mac OS 打开pycharm立即闪退,报错initial heap size set to a larger value than the max
“一日三次”的药 到底该怎么吃?你可能一直都错了
比亚迪百万豪车!实拍仰望U8原地掉头:这圈儿真圆
环球关注:微软Edge拯救低清老视频 秒变高清!三代N卡、A卡都能用
快看:棉锦防火布
环球即时看!EF7DbContext池
天天时讯:DotNet 5.0 部署 Docker 注意
男子高烧近41度 体温计贴脸狂飙:近期谨防甲流 病死率很高
老人捡到手机不会接听错过四十多通电话 最终成功归还
反诈老陈自曝2022年收入133万:缴税近40万 捐赠84万+
国家二级保护动物有哪些
任意Exe转ShellCode?
快报:一手卖掉《古墓丽影》:SE宣布总裁松田洋介辞职
每日速看!纪念上映20周年:《指环王:王者无敌》将重映4小时加长版
理想L7本月开启交付 50万以内第二排舒适度最好的SUV
全球信息:AMD显卡驱动罕见Bug:Windows都给搞崩了
精彩看点:老牛嚼电线被击倒 网友:应该是母牛 因为公牛不漏电
环球看点!奥斯卡掌掴事件后续
【读书】《成就上瘾:把成事当成一种习惯》
json转golang结构
婚变?前亚视高层与澳门名媛太太近一年未见
焦点播报:员工增长近万人!AMD去年研发支出同比大幅上涨
小米有品219元:平仄普洱生熟茶饼礼盒99元大促
每日热闻!胡令能是哪里人_胡令能简介
手工耿发明新刑具“忏悔辅助器”:让你的脑袋自动撞墙
世界观点:登陆Steam国区:暗黑Like游戏《火炬之光:无限》PC版或将手游同步推出
女子地铁上手机外放收“罚单” 南京地铁:车厢内禁喧哗
第六章 应用层
python文件的高级应用
1. 简单版
群晖NAS大促:四盘位DS420+历史低价
每日速看!Twitter被曝12月营收骤降40%:广告商抽身成主要原因
【全球播资讯】node.js学习技巧
速递!撑伞也是雨中人什么意思_撑伞也是雨中人这句话什么意思
Intel或将开发“视频DLSS”同款超分辨率技术:最低仅需10代酷睿
天天信息:MASA Framework源码解读-01 MASAFacotry工厂设计(一个接口多个实现的最佳姿势)
环球通讯!(数据库系统概论|王珊)第九章关系查询与关系优化:习题
天天看点:侠盗猎车手圣安地列斯攻略
每日热议!稳了!索尼PS4/PS5之父操刀新一代PS6主机:发布时间及首发大作曝光
当前消息!三星Galaxy S23 Ultra又出问题:S Pen被指出现随机断连
全球短讯!Codeforces 1785 E Infinite Game 题解 (图论,自动机,dp)
数字信号处理流程
播报:P8大佬的 62条SQL优化策略,太牛X了!! 收藏起来有大用!!!
学会了Java 8 Lambda表达式,简单而实用
天天最资讯丨修复 Ubuntu 中的 “Key is stored in legacy trusted.gpg keyring” 问题
数码相机卖不动:2023年1月销量大跌36%!单反惨烈
世界今日讯!长安深蓝全新中型SUV S7亮相:仪表盘“消失”
传大超转职普莱斯上尉
环球快播:美国一架飞机在飞行中突然强烈颠簸 竟致1人死亡
一口气58首歌 主办方因为周杰伦多唱被罚钱!周董回应:哥无所谓
环球热消息:抖店个体和企业开店费用_开店费用
世界关注:成都皮肤科医院排名第一_成都皮肤科医院qq
每日看点!硬挺不厚 穿着不热!放克纯棉T恤大促:20.1元包邮
售价13.99万元起 本田型格HATCHBACK正式上市
辣眼睛?网红“安福路小公主”首度回应质疑:给自己外貌打90分 对恶评不在意
【环球播资讯】(数据库系统概论|王珊)第九章关系查询处理和关系优化-第四节:查询优化之物理优化
直播电商名词解释
超百Gbps容量!中星26号卫星成功定点:我国自研卫星平台
全球微动态丨防缩水可机洗 GXG男士针织衫:89元手慢无
Java实战(第二版)读后总结与感想
201球!姆巴佩加冕队史射手王 24岁就成第一人 2.2亿投皇马?
日系车走下神坛?本田中国2月销量大跌三成 已连跌6月
世界看点:国家老年大学正式揭牌!超40万门课程 50周岁以上可以报名
全球自动驾驶公司排名公布 特斯拉再次垫底
环球看点!大熊猫走姿神似《狂飙》高启盛 动物园回应:走路“带风”性格豪放
人脸识别还要蹲车外看摄像头?小鹏致歉:已下架第三方应用
环球观速讯丨上汽奥迪员工内购价最高优惠16万 客服:若倒卖一查到底
当前消息!谈谈 WMTS 中的 TileMatrix 与 ScaleDenominator
当前滚动:《街霸6》嘉米伸懒腰 又一次引发网友二创热潮