如何在构建docker镜像时执行SonarQube扫描.NET Core应用
前言
SonarQube是一款静态代码质量分析工具,它常用于检测代码中的Bug、漏洞和代码异味,并且能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告。
一般情况下,我们在Jenkins管道中配置SonarQube,在编译过程时执行扫描。
在本文中,我们将介绍不使用Jenkins,通过编写Dockerfile,以便在构建docker镜像时,同时执行SonarQube代码扫描。
Dockerfile
我们把Dockerfile分成多个步骤,下面来一步步讲解:
1.定义编译环境
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
WORKDIR /app
将编译环境和最后的运行环境分开。
2.定义SonarQube参数
ENV SONAR_URL "http://xxx:9000"
ENV SONAR_TOKEN xxx
ENV SONAR_PROJECT xxx
参数包含SonarQube服务器地址和Token,这个和Jenkins配置一致。
项目名称SONAR_PROJECT
对应SonarQube服务器上的配置。
3.安装Java
RUN apt-get update && apt-get install -y openjdk-11-jre
这是运行SonarQube必须的。
4.安装dotnet命令行工具
RUN dotnet tool install --global dotnet-sonarscanner --version 5.3.1ENV PATH="${PATH}:/root/.dotnet/tools"
这是SonarQube扫描.NET Core程序必须的。
5.启动扫描
RUN dotnet sonarscanner begin \/k:"$SONAR_PROJECT" \/d:sonar.host.url="$SONAR_URL" \/d:sonar.login="$SONAR_TOKEN"
dotnet-sonarscanner详细参数可参见:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/
6.编译应用
COPY *.csproj .
RUN dotnet restoreCOPY . .RUN dotnet publish --output /publish/
复制文件,恢复Nuget包,编译应用程序。
7.结束扫描
RUN dotnet sonarscanner end /d:sonar.login="$SONAR_TOKEN"
结束扫码并上传SonarQube扫描结果。
8.运行应用
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build-env /publish .
ENTRYPOINT ["dotnet", "xxx.dll"]
从SDK镜像复制编译输出,然后执行运行命令。
结论
最后,只需执行docker build命令即可生成镜像,并在构建过程中运行SonarQube扫描:
docker build .
想了解更多内容,请关注我的个人公众号”My IO“
如何在构建docker镜像时执行SonarQube扫描.NET Core应用相关推荐
- 构建docker镜像时ERROR: http://dl-cdn.alpinelinux.org/alpine/v3.12/main: network error
1.先试试这个 构建docker镜像时fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz超时_yan ...
- 构建Docker镜像时处理'Configuring tzdata'交互输入
在Dockerfile中安装deb软件包时,某些软件将tzdata作为依赖项安装. tzdata会以交互方式提醒用户选择使用位置. Configuring tzdata---------------- ...
- 通过Dockerfile构建Docker镜像
Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添 ...
- 构建Docker镜像指南,含实战案例
[Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...
- 在内网中使用maven_maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)-Go语言中文社区...
在上一章<maven构建docker镜像三部曲之二:编码和构建镜像>的实战中,我们将spring boot的web工程构建成docker镜像并在本地启动容器成功,今天我们把docker-m ...
- 【Spring boot 实战】使用Maven插件构建Docker镜像
本文主要介绍如何使用Maven插件将SpringBoot应用打包为Docker镜像,并上传到私有镜像仓库Docker Registry的过程. 使用Maven构建本地Docker镜像 我们以项目spr ...
- 打包应用和构建Docker镜像(docker在windows上)
在构建Docker时编译应用 一般有两种方法在构建镜像时进行打包应用.第一种方法就是使用基本的镜像,该镜像包括应用平台和构建工具,因此在Dockerfile中,复制源代码到镜像中并在构建镜像时编译ap ...
- Spring Boot 2.3.x 分层构建 Docker 镜像实战
目录 一.什么是镜像分层 二.SpringBoot 2.3.x 新增对分层的支持 三.创建测试的 SpringBoot 应用 1.Maven 中引入相关依赖和插件 2.创建测试的 Controller ...
- 多阶段构建Docker镜像
在Docker 17.05及更高的版本中支持支持一种全新的构建镜像模式:多阶段构建: 多阶段构建Docker镜像的最大好处是使构建出来的镜像变得更小: 目前常见的两个构建镜像的方式为: 1.直接使用某 ...
最新文章
- 交换机工作原理、MAC地址表、路由器工作原理详解
- python学习第一天 -----2019年4月15日
- 批量创建10个系统帐号tianda01-tianda10并设置密码
- 使用Lambda在AWS云上使用Java
- 2018杭电多校第二场1006(容斥原理,组合数学)
- 设计模式学习笔记(六:责任链模式)
- Oracle基础学习(四) 游标
- shell脚本编写笔记
- stdafx.h简介
- BarTender对单个二维码/文本添加多个域(数据库字段)/嵌入的数据,并对数据添加后缀等处理;扩展更多域
- i3cpu驱动xp_Intel英特尔Core i3/Core i5/Core i7系列CPU核芯显卡驱动
- 新浪微博批量删除功能
- Contiki学习笔记——Cooja启动失败
- c语言进程伪装,易语言程序伪装软件
- 学习Python数据分析,需要几个阶段?
- cobra是什么鬼?
- Vue页面实现打印功能
- java .class文件为什么以CAFEBABE开头?
- python manage.py runserver报错
- ov5645 mipi 驱动