个人老板给我推送了这篇文章,以后我成为了顶级码农!

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~java

本文来自 云计算教程系列,由 穿鞋跑得快编译。

介绍

代码质量是特定代码片断的有用性和可维护性的近似值。质量代码将使维护和扩展应用程序的任务变得更加容易。它有助于确保在未来进行必要的更改时引入更少的漏洞。mysql

SonarQube是一个开源工具,能够帮助进行代码质量分析和报告。它会扫描用户的源代码,查找潜在的错误,漏洞和可维护性问题,而后在报告中显示结果,方便用户识别应用程序中的潜在问题。linux

SonarQube工具包含两个子应用程序:分析引擎,它安装在开发人员的机器上,以及一个用于记录保存和报告的集中式服务器。单个SonarQube服务器实例能够支持多个扫描程序,使用户能够统一集中来自许多开发人员的代码质量报告。nginx

在本教程中,用户经过配置SonarQube服务器和扫描程序来分析并建立代码及质量报告。以后可使用SonarQube工具扫描机器,对用户的机器进行测试。git

准备

在开始阅读本教程以前,你须要遵循如下内容:github

第一步 - 准备安装

在安装SonarQube以前,咱们须要执行几个步骤。因为SonarQube是一个将做为服务运行的Java应用程序,而且由于以root用户身份运行服务确定不理想,咱们将专门建立另外一个系统用户来运行SonarQube服务。而后咱们将建立安装目录并设置其权限并为SonarQube建立一个MySQL数据库和用户。web

首先,建立一个sonarqube用户:sql

$ sudo adduser --system --no-create-home --group --disabled-login sonarqube

咱们只会使用此用户来运行SonarQube服务,所以咱们建立了一个没法直接登陆服务器的系统用户。数据库

接下来,建立保存SonarQube文件的目录:后端

$ sudo mkdir /opt/sonarqube

建立目录后,更新权限,以便用户可以读取和写入此目录中的文件:

$ sudo chown -R sonarqube:sonarqube /opt/sonarqube

SonarQube版本以压缩格式打包,所以unzip会使用用户的软件包管理器安装该实用程序,以便用户能够提取分发文件:

$ sudo apt-get install unzip

接下来,咱们须要建立为SonarQube使用的数据库和凭据。做为root用户登陆MySQL服务器:

$ mysql -u root -p

建立SonarQube数据库:

mysql> CREATE DATABASE sonarqube;
mysql> EXIT;

建立SonarQube用于访问数据库的凭据。

mysql> CREATE USER sonarqube@'localhost' IDENTIFIED BY 'some_secure_password';
mysql> GRANT ALL ON sonarqube.* to sonarqube@'localhost';

授予权限,以便新建立的用户能够更改SonarQube数据库:

mysql> GRANT ALL ON sonarqube.* to sonarqube@'localhost';

而后更改应用权限并退出MySQL控制台:

mysql> FLUSH PRIVILEGES;
mysql> EXIT;

当咱们已经有了用户和目录,便可下载并安装SonarQube。

第二步 - 下载和安装SonarQube

首先将当前工做目录更改成SonarQube安装目录:

$ cd /opt/sonarqube

而后,转到SonarQube下载页面并获取SonarQube 7.0的下载连接。SonarQube有两个版本能够在页面上下载,但在这个特定的教程中咱们将使用SonarQube 7.0。

获取连接后,下载文件:

$ sudo wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.0.zip

而后解压缩文件:

$ sudo unzip sonarqube-7.0.zip

文件解压缩后,删除下载的zip文件,由于你再也不须要它:

$ sudo rm sonarqube-7.0.zip

当全部文件都已到位,便可配置SonarQube。

第三步 - 配置SonarQube服务器

咱们须要在SonarQube配置文件中编辑一些内容。即:

  • 咱们须要指定SonarQube服务器用户名和密码用于数据库链接。
  • 咱们还须要告诉SonarQube将MySQL用于咱们的后端数据库。
  • 咱们将告诉SonarQube以服务器模式运行以提升性能。
  • 咱们还会告诉SonarQube只监听本地网络地址,由于咱们将使用反向代理。

首先打开SonarQube配置文件:

$ sudo nano sonarqube-7.0/conf/sonar.properties

将SonarQube用于访问数据库的用户名和密码更改成用户在MySQL建立的用户名和密码:

...

    sonar.jdbc.username=sonarqube
    sonar.jdbc.password=some_secure_password
    
    ...

而后,告诉SonarQube使用MySQL做为数据库驱动程序:

...

    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

    ...

最后,告诉SonarQube以服务器模式运行,只收听本地地址:

...

    sonar.web.host=127.0.0.1
    sonar.web.javaAdditionalOpts=-server

更新这些字段后,保存并关闭该文件。

接下来,咱们将SonarQube服务器配置为做为服务运行,以便在服务器从新启动时自动启动。

建立服务文件:

$ sudo nano /etc/systemd/system/sonarqube.service

将如下内容添加到文件中,该文件指定SonarQube服务应如何启动和中止:

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking

 
ExecStart=/opt/sonarqube/sonarqube-7.0/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/sonarqube-7.0/bin/linux-x86-64/sonar.sh stop

 
User=sonarqube
Group=sonarqube
Restart=always

[Install]
WantedBy=multi-user.target

关闭并保存文件,而后启动SonarQube服务:

$ sudo service sonarqube start

检查SonarQube服务的状态以确保它已启动并按预期运行:

$ service sonarqube status

若是服务已成功启动,你将会看到一条与此相似的“Active”行:

● sonarqube.service - SonarQube service
   Loaded: loaded (/etc/systemd/system/sonarqube.service; enabled; vendor preset
   Active: active (running) since Sun 2018-03-04 01:29:44 UTC; 1 months 14 days

接下来,将SonarQube服务配置为在引导时自动启动:

$ sudo systemctl enable sonarqube

与大多数其余Java应用程序同样,SonarQube将须要一些时间来初始化。初始化过程完成后,您就能够继续下一步了。

第四步 - 配置反向代理

咱们已经运行了SonarQube服务器,如今是时候配置Nginx了,它将是咱们的SonarQube实例的反向代理和HTTPS终结器。

首先为站点建立一个新的Nginx配置文件:

$ sudo nano /etc/nginx/sites-enabled/sonarqube

添加此配置,以便Nginx可以将传入流量路由到SonarQube:

server {
    listen 80;
    server_name sonarqube.example.com;

    location / {
        proxy_pass http://127.0.0.1:9000;
    }
}

保存并关闭文件。

接下来,确保你的配置文件没有任何的语法错误:

$ sudo nginx -t

若是看到错误,修复它们并输入sudo nginx -t命令再次运行。一旦没有错误,重启Nginx:

$ sudo service nginx restart

要进行快速测试,能够在浏览器中访问http://sonarqube.example.com。打开后你将看到SonarQube界面的欢迎语。

如今咱们已经完成了设置反向代理,咱们能够继续保护咱们的SonarQube服务器。

第五步 - 保护SonarQube

SonarQube附带了一个默认的管理员用户名和密码管理员。此默认密码不安全,所以咱们但愿将其更新为更安全的安全作法。

首先访问安装的URL,而后使用默认凭据登陆。

登陆后,单击“ 管理”选项卡,从下拉列表中选择“ 安全性 ”,而后选择“ 用户”

img

在此处,单击“管理员”账户行右侧的小齿轮,而后单击“更改密码”。务必将密码更改成易容易记忆但难以猜想的内容。

如今建立一个普通用户,你可使用该用户建立项目并从同一页面向服务器提交分析结果。单击页面右上角的“ 建立用户” 按钮:

img

而后经过单击“标记”列中的按钮并为此标记指定名称,为特定用户建立标记。稍后在调用代码扫描程序时须要此令牌,所以请务必将其写在安全的地方。

最后,你可能会注意到SonarQube实例对全世界都是开放的,任何人均可以查看分析结果和源代码。 此设置很是不安全,所以咱们将SonarQube配置为仅容许登陆用户访问界面。在同一管理选项卡中,单击配置,而后单击左窗格中的安全性。翻转此页面上的开关以要求用户身份验证。

img

如今咱们已经完成了服务器的设置,让咱们设置扫描仪。

第六步 - 设置代码扫描程序

SonarQube的代码扫描程序是一个单独的程序包,您能够将其安装在与运行SonarQube服务器的计算机不一样的计算机上,例如本地开发工做站或连续交付服务器。

在本教程中,咱们将在托管SonarQube服务器的同一台服务器上安装代码扫描程序。

首先为扫描程序建立一个目录并切换到新目录:

$ sudo mkdir /opt/sonarscanner
$ cd /opt/sonarscanner

而后使用wget下载适用于Linux的SonarQube扫描仪:

$ sudo wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip

解压缩扫描程序,而后删除zip存档文件:

$ sudo unzip sonar-scanner-cli-3.0.3.778-linux.zip
$ sudo rm sonar-scanner-cli-3.0.3.778-linux.zip

以后,咱们须要修改一些设置以使扫描程序与咱们安装的服务器合做。打开配置文件进行编辑:

$ sudo nano sonar-scanner-3.0.3.778-linux/conf/sonar-scanner.properties

首先,告诉扫描仪应该在哪里提交代码分析结果。取消注释开头的行sonar.host.url并将其设置为SonarQube服务器的URL:

/opt/sonarscanner/sonar-scanner-3.0.3.778-linux/conf/sonar.properties
    sonar.host.url=https://sonarqube.example.com

保存并关闭文件。如今使扫描仪二进制可执行:

$ sudo chmod +x sonar-scanner-3.0.3.778-linux/bin/sonar-scanner

而后建立一个符号连接,以便用户能够在不指定路径的状况下调用扫描程序:

$ sudo ln -s /opt/sonarscanner/sonar-scanner-3.0.3.778-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner

设置了扫描仪,咱们就能够运行第一次代码扫描了。

第七步 - 运行测试扫描

在主目录中建立一个新的工做目录,而后切换到该目录:

$ cd ~
$ mkdir sonar-test && cd sonar-test

下载示例项目:

$ wget https://github.com/SonarSource/sonar-scanning-examples/archive/master.zip

解压缩项目并删除存档文件:

$ unzip master.zip
$ rm master.zip

接下来,切换到示例项目目录:

$ cd sonar-scanning-examples-master/sonarqube-scanner

运行扫描程序,将先前建立的令牌传递给它:

$ sonar-scanner -D sonar.login=your_token_here

扫描完成后,您将在控制台上看到相似的内容:

INFO: Task total time: 9.834 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 14.076s
INFO: Final Memory: 47M/112M
INFO: ------------------------------------------------------------------------

示例项目的报告如今将在SonarQube仪表板上,以下所示:

img

当已确认SonarQube服务器和扫描仪都按预期工做,您就可让SonarQube分析您的代码。

将项目转移到服务器,或按照第六步中的步骤在工做站上安装和配置SonarQube扫描仪,并将其配置为指向SonarQube服务器。

而后,在项目的根目录中,建立一个SonarQube配置文件:

$ nano sonar-project.properties

您将使用此文件向SonarQube介绍有关项目的一些信息:

首先,定义项目密钥,该项目密钥是项目的惟一ID。您可使用任何您喜欢的内容,但此ID对于SonarQube实例必须是惟一的:

sonar-project.properties
    # Unique ID for this project
    sonar.projectKey=foobar:hello-world

    ...

而后,指定项目名称和版本,以便SonarQube可以在仪表板中显示此信息:

sonar-project.properties
    ...

    sonar.projectName=Hello World Project
    sonar.projectVersion=1.0

    ...

最后,告诉SonarQube在哪里查找代码文件。请注意,这与配置文件所在的目录有关。将其设置为当前目录:

sonar-project.properties
    # Path is relative to the sonar-project.properties file. Replace "" by "/" on Windows.
    sonar.sources=.

关闭并保存文件。

您已准备好对本身的代码运行代码质量分析。再次运行

sonar-scanner,传递你的令牌:

$ sonar-scanner -D sonar.login=your_token_here

扫描完成后,您将看到与此相似的摘要:

INFO: Task total time: 5.417 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 9.659s
INFO: Final Memory: 39M/112M
INFO: ------------------------------------------------------------------------

项目的代码质量报告将出如今SonarQube界面上。

结论

在本教程中,您已设置SonarQube服务器和扫描程序以进行代码质量分析。如今,只需运行扫描,SonarQube将告诉您可能存在的问题确保代码易于维护!

使用SonarQube维护代码质量的同时,数据安全也很重要,若是您的服务器是在生产环境使用, 建议您直接使用云关系型数据库,云关系型数据库让您在云中轻松部署、管理和扩展的关系型数据库,提供安全可靠、伸缩灵活的按需云数据库服务。腾讯云关系型数据库提供 MySQL、SQL Server、MariaDB、PostgreSQL 数据库引擎,并针对数据库引擎的性能进行了优化。云关系型数据库是一种高度可用的托管服务,提供容灾、备份、恢复、监控、迁移等数据库运维全套解决方案,可将您从耗时的数据库管理任务中解放出来,让您有更多时间专一于您的应用和业务。

更多Linux教程请前往腾讯云+社区学习更多知识。

问答
MongoDB的利弊?
相关阅读
Redis云端架构深刻浅出
腾讯云数据库回档解决方案
世界杯黑马出没,莫斯科没有眼泪
云学院 · 课程推荐 | 腾讯专项技术测试组长,结合8年经验为你细说冷热分离法则

此文已由做者受权腾讯云+社区发布,更多原文请点击

搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

海量技术实践经验,尽在云加社区

相关文章
相关标签/搜索