前言

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应用相关推荐

  1. 构建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 ...

  2. 构建Docker镜像时处理'Configuring tzdata'交互输入

    在Dockerfile中安装deb软件包时,某些软件将tzdata作为依赖项安装. tzdata会以交互方式提醒用户选择使用位置. Configuring tzdata---------------- ...

  3. 通过Dockerfile构建Docker镜像

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添 ...

  4. 构建Docker镜像指南,含实战案例

    [Docker那些事]系列文章 Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT指令的区别 构建Docker镜像指南,含实战 ...

  5. 在内网中使用maven_maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)-Go语言中文社区...

    在上一章<maven构建docker镜像三部曲之二:编码和构建镜像>的实战中,我们将spring boot的web工程构建成docker镜像并在本地启动容器成功,今天我们把docker-m ...

  6. 【Spring boot 实战】使用Maven插件构建Docker镜像

    本文主要介绍如何使用Maven插件将SpringBoot应用打包为Docker镜像,并上传到私有镜像仓库Docker Registry的过程. 使用Maven构建本地Docker镜像 我们以项目spr ...

  7. 打包应用和构建Docker镜像(docker在windows上)

    在构建Docker时编译应用 一般有两种方法在构建镜像时进行打包应用.第一种方法就是使用基本的镜像,该镜像包括应用平台和构建工具,因此在Dockerfile中,复制源代码到镜像中并在构建镜像时编译ap ...

  8. Spring Boot 2.3.x 分层构建 Docker 镜像实战

    目录 一.什么是镜像分层 二.SpringBoot 2.3.x 新增对分层的支持 三.创建测试的 SpringBoot 应用 1.Maven 中引入相关依赖和插件 2.创建测试的 Controller ...

  9. 多阶段构建Docker镜像

    在Docker 17.05及更高的版本中支持支持一种全新的构建镜像模式:多阶段构建: 多阶段构建Docker镜像的最大好处是使构建出来的镜像变得更小: 目前常见的两个构建镜像的方式为: 1.直接使用某 ...

最新文章

  1. 交换机工作原理、MAC地址表、路由器工作原理详解
  2. python学习第一天 -----2019年4月15日
  3. 批量创建10个系统帐号tianda01-tianda10并设置密码
  4. 使用Lambda在AWS云上使用Java
  5. 2018杭电多校第二场1006(容斥原理,组合数学)
  6. 设计模式学习笔记(六:责任链模式)
  7. Oracle基础学习(四) 游标
  8. shell脚本编写笔记
  9. stdafx.h简介
  10. BarTender对单个二维码/文本添加多个域(数据库字段)/嵌入的数据,并对数据添加后缀等处理;扩展更多域
  11. i3cpu驱动xp_Intel英特尔Core i3/Core i5/Core i7系列CPU核芯显卡驱动
  12. 新浪微博批量删除功能
  13. Contiki学习笔记——Cooja启动失败
  14. c语言进程伪装,易语言程序伪装软件
  15. 学习Python数据分析,需要几个阶段?
  16. cobra是什么鬼?
  17. Vue页面实现打印功能
  18. java .class文件为什么以CAFEBABE开头?
  19. python manage.py runserver报错
  20. ov5645 mipi 驱动

热门文章

  1. javascript中Date对象的初始化方法
  2. Cognos TM1_10.1.1服务端配置
  3. routine tortoisesvn operations-1
  4. 使用Treeview模拟操作系统的文件系统
  5. php验证码函数 使用imagestring() imagefttext()设置字体大小
  6. cookies和session区别
  7. NYOJ746 整数划分
  8. 关于8位AD_DA转换芯片的采样率问题
  9. android获取手机机型、厂商、deviceID基本信息
  10. Linux - 命令