SonarSource简介
代码质量是软件发明时出现的问题。代码质量差会导致各种问题: 团队速度低、应用程序退役、生产崩溃、公司声誉不佳..。在 SonarSource, 我们提供了解决方案, 以提高维修性, 可靠性和安全性。性问题
这通常被称为技术债务。与可维护性相关的问题在我们的产品中被命名为 "代码气味"。从本质上说, 软件预计会随着时间的推移而改变, 这意味着今天编写的代码将在明天更新。在代码库中进行此类更改的能力、成本和时间直接与其可维护性级别相关。换言之, 低可维护性意味着开发团队的低速。可维护性包括模块化、理解、可变性、可测试性和可重用等许多概念。它不采取关键问题的形式, 而是数以千计的小问题与jia做法的结果。
SonarSource简介
具有 Artifactory 和 Sonarqube 集成的连续交付准备 Gradle 项目当玩弄持续集成/交付/部署的概念时, 我在 Gradle 构建以及如何将它们集成到这些概念中而苦苦挣扎。Gradle 在构建工具环境中越来越重要, 因此我创建了一个关于如何使用它的模板或原型。我选择了一个场景, 我看到了 Maven 和其他工具已经实现了:
推动风投转向中央风投将更改标记为特定 id 并将其推回中央 VCS使用单元测试执行生成执行声纳分析执行 artifactory 上载此链使您能够不断地将每个更改设置标记、单元测试、分析并上载到您的工件存储库, 以备部署。简而言之, 这是 (从我的角度来看) 持续交货的精神。
环境:
Gradle 3.5 (通过项目的 Gradle 包装)Artifactory: 5.2. 1-OSS, 运行在 http://localhost:8081/artifactorySonarqube: 6.3.1, 跑在 http://localhost:9000注意: 在这种情况下, Sonarqube 和 Artifactory 将由管理员用户使用。在实际生产环境中, 必须将其更改为更安全的方式
首先, 我在 Artifactory 中添加了一个本地 (m2-compatible) 和两个远程存储库:
"库-释放-本地" 是为了保存我自己的工件 (这就是为什么它被称为 "本地")"插件-gradle-org" 指向远程回购 "https:///m2/" (这是 gradle 插件所必需的)"repo1-maven-org" 指向远程回购 "http://repo1./maven2/" (这是项目的所有其他依赖项所必需的)此外, 我创建了一个虚拟的回购 "释放" 包含所有 3 mentionend 回购。这使得从一个位置获取所有发布的库更容易。
该项目本身并不真正重要的这篇文章。我认为这是一个标准的 java 项目, 遵循 Maven/Gradle 的惯例。更有趣的部分是 Gradle 文件:
gradle/包装/gradle 包装。生成. gradle凭据. 属性gradle. 属性设置. gradle
Ansible SonarQube 升级的角色
你可能知道, 并希望使用 SonarQube。这是一个伟大的工具, 是积极的发展和改善。这是伟大的, 如果你是一个开发使用 SonarQube。但是, 如果您碰巧管理 SonarQube 实例, 则由于升级指南由11步骤组成, 因此不断升级非常麻烦。
停止旧的 SonarQube 服务器
下载并解压新的 SonarQube 分布在一个新鲜的目录, 让我们说 NEW_SONARQUBE_HOME
使用默认的 H2 数据库启动它, 并使用更新中心安装您需要的插件
手动安装任何自定义插件
停止新服务器
更新声纳的内容. 属性和包装. 配置文件位于 NEW_SONARQUBE_HOME/配置目录中, 其内容与 OLD_SONARQUBE_HOME/配置目录中的相关文件 (web 服务器 URL、数据库设置等) 有关。不复制-粘贴旧文件
如果使用了自定义 JDBC 驱动程序, 请将其复制到 NEW_SONARQUBE_HOME/扩展/jdbc 驱动程序/<dialect>
备份数据库
删除数据/es 目录
启动新的 web 服务器
复制 http://localhost:9000/setup (用您自己的 URL 替换 "localhost:9000") 来浏览并按照安装说明进行操作
这是一个太多的步骤, 手动执行。因此, 我决定通过为它编写一个 Ansible 的角色来实现自动化。
初始设置
在我开始编写 Ansible 剧本之前, 我需要找到一种方法来测试我的代码。所以我开始与流浪汉旋转了一个虚拟机, 并提供了一个简单的脚本。这是需要有类似的环境, 以我们的实际 SonarQube 生产实例。我能够增量地构建我的 Ansible 剧本并在这个 VM 上测试它。很快我就明白了, 与流浪汉一起工作会减慢我的速度, 因为我需要重置环境, 而不是初的预期。所以我决定考虑泊坞窗。
用于测试的泊坞窗
我找到了正式的 SonarQube 泊坞窗图像, 但无法使用, 因为我们的 SonarQube 实例安装在 CentOS 和官fang图像使用不同的基础图像。另外, 我需要自定义特定的 SonarQube 版本我想开始。因此, 我创建了我们自己的 Dockerfile 与 CentOS 6 基地和 Ansible 安装。
此泊坞窗映像不需要启动 SonarQube, 因为我只是想验证是否进行了正确的文件更改, 而我的 Ansible 手册没有错误。升级的第yi步之一就是关闭服务器。
我将我的剧本装入容器, 并在该容器内运行 Ansible, 对该本地环境进行了更改。
当前脚本的路径
TESTS_DIR = $ (cd "$ (dirname" $ {BASH_SOURCE [0]} ")" & & 密码 "
# 命令测试剧本
TEST_COMMAND = "cd/行动 & & ansible-剧本 $ @
-我 ' 本地主机 '-c
升级-声纳 database.yml "
# 运行容器安装行动为卷
泊坞 run-v "$ TESTS_DIR/.。/行动/:/行动 "
"声纳-升级-测试"/"垃圾/bash-c" $ {TEST_COMMAND} "
在泊坞窗中运行我的剧本大大减少了反馈回路, 所以我决定泊坞窗是走的路。你可以看看我所有的脚本在 GitHub
Ansible 角色
我一步一步地往前走, 我到达了一个点, 一切似乎都在工作, 我有一个非常有用的 Ansible 的角色在我的手中。它尚未发布到 Ansible Galaxy, 但您可以在 GitHub 的 SonarQube 升级 Ansible 角色项目下找到源文件和文档。
当前 Ansible 角色通过在当前位置旁边创建新安装来升级 SonarQube。这提供了回滚的方法 (如果需要)。
此时, 角色执行以下任务:
确保特定的根用户存在于声纳安装
在所有安装所在的目录中创建声纳. sh
确保 SonarQube 服务存在
停止 SonarQube
下载新版本
备份数据库
下载和安装插件
将自定义配置应用于新实例
确保删除数据/es
重新 SonarQube 服务启动新版本
开始 SonarQube
手动步骤
这个过程仍然需要几个手动步骤。
在运行升级手册之前, 应手动确保在升级过程中要安装的插件列表是xin的。您可以从 SonarQube 的管理视图中获得xin支持的版本号。
根据 SonarQube 的建议, 此 Ansible 角色不仅复制以前安装的配置, 而且使用带有变量的模板来为新实例创建配置。这意味着在执行升级之前, 开发人员可以将模板和基本配置与新的 SonarQube 下载进行比较。虽然这是一个手动步骤, 但与以前的操作相比, 它更容易, 因为可以使用 IDE 而不仅仅是从命令行中的 diff 工具进行比较。
这两个步骤都需要后续的手动升级, 我认为这些升级准备活动。
SonarSource
JProfiler既可作为独立应用程序,也可用作Eclipse,NetBeans和IntelliJ IDEA和Orcale JDeveloper软件开发环境的插件。
它也可作为Adobes Coldfusion和Glassfish应用服务器集成的一部分。
巴什
terminalBash是一个UNIX shell或命令语言解释器,为GNU项目编写,作为Bourne shell的免费软件替代。
它已经在相当长的一段时间内,并于1989年发布,并且作为GNU操作系统的shell被广泛分发,作为Linux和Mac OS X上的默认shell。它的受欢迎程度意味着被移植到Microsoft Windows并通过各种终端仿zhen应用程序到Android。
基本上Bash用作命令处理器,通常在文本窗口中运行,并允许导致操作的类型命令。 Bash可以从文件读取各种命令,并支持文件通配符,管道,文档,命令替换,条件测试和迭代的变量和控制结构。
它特别有用,因为它允许使用Bash脚本自动执行某些任务。
Sonarqube