GitLab、Jenkins 、SonarQube、Nexus 搭建 CI/CD、代码质量检查

本贴最后更新于 1797 天前,其中的信息可能已经时移世异

devOps0001.jpg

🐞DevOps 开发工程师?🌞DevOps 运维工程师?🚀DevOps 自动化持续交付工程师?🗿DevOps 主管?

安装说明

我在 Ubuntu 18.04.2 LTS 下安装以上软件进行演示

Gitlab 展示

我本地安装版本为 11.5.1
,配置文件地址 /etc/gitlab/gitlab.rb
devOps0002.jpg

开源项目 Jeesite

jeesite 作为演示项目,推送到自己搭建的 GitLab 私人仓储中 Jeesite 项目地址: https://github.com/thinkgem/jeesite.git

git remote remove origin # 删掉原来git源
git remote add origin 'http://192.168.0.222/root/jeesite.git' # 添加新的源
git push --set-upstream origin master # 推送

devOps0003.jpg

GitLab Auto DevOps

本地安装的这个版本已经自动开启了 CI/CD 功能,但是需要安装 Runner 服务器,不然 Pipelines 处于 stuck 状态
GitLab Runner 安装推荐 清华大学镜像Runner 常用命令

gitlab-runner register
gitlab-runner status
gitlab-runner list

CI/CD 详细信息科查看 GitLab 官网 continuous-integration
devOps0004.jpg

Jenkins 展示

启动错误解决

  1. journalctl -xe

     Job for jenkins.service failed because the control process exited with error code.
     See "systemctl status jenkins.service" and "journalctl -xe" for details.
     解决
     gedit /etc/init.d/jenkins 手动配置JAVA_HOME
     export JAVA_HOME=/usr/local/jdk1.8.0_172
     PATH=/bin:/usr/bin:/sbin:/usr/sbin:$JAVA_HOME/bin
    
  2. systemctl daemon-reload

    Warning: The unit file, source configuration file or drop-ins of jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
    解决
    systemctl daemon-reload    
    

启动成功后,浏览器访问

默认端口 8080,我本地改成了 8081,位置 /etc/default/jenkins
启动:sudo service jenkins start
devOps0005.jpg

成功登陆后界面
devOps0006.jpg

SonarQube 展示

错误解决,配置 MySQL,访问

  • es 不能用 root 用户启动,新建用户 sonar

     adduser sonar
     chown -R sonar:sonar sonarqube-7.7
     su sonar
     ./sonar.sh start
    
  • 默认用的是 H2 数据库,修改配置为 MySQL 数据库

     sonar.jdbc.username=sonar
     sonar.jdbc.password=Sonar@123
     sonar.jdbc.url=jdbc:mysql://127.0.0.1:3507/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    
  • 默认端口 9000 账号密码 admin/admin
    devOps0007.jpg
    可安装 Chinese Pack 汉化插件进行汉化,汉化后界面
    devOps0008.jpg

插件安装

  • Checkstyle
  • Chinese Pack
  • Findbugs
  • PMD

测试 Sonar 的基本使用

  • 新建项目-按步骤提示操作
    devOps0009.jpg

  • 选择 Java Maven 项目
    devOps0010.jpg

  • Jeesite 项目文件夹下 执行一下命令

      #执行如果出错 可查看 logs/web.log
      #我运行时报错,修改了MySQL实例参数 max_allowed_packet = 100M
    
       mvn sonar:sonar -Dsonar.projectKey=jeesite -Dsonar.host.url=http://localhost:9000  -Dsonar.login=7d86763a5f1610deacec545b08759f89768e6ea3
    
  • 执行成功后输出
    devOps0011.jpg

  • 查看 SonarQube 检查结果
    devOps0012.jpg

  • 详情页
    devOps0013.jpg

IDEA 集成

  1. 安装 SonarLint 插件,成功后重启 IDEA
    devOps0014.jpg

  2. 配置 SonarQube 服务
    devOps0015.jpg

  3. SonarQube 生成令牌
    devOps0016.jpg

  4. 写入 IDEA
    devOps0017.jpg

  5. 配置 SonarLint Project Settings
    devOps0018.jpg

  6. IDEA 中会出现 SonarLint 扩展栏
    devOps0019.jpg

Jenkins 插件安装、基础配置

插件安装

  • Maven Integration
  • Gitlab Merge Request Builder
  • GitLab Logo
  • Gitlab Hook
  • SonarQube Scanner for Jenkins
  • Checkstyle
  • Findbugs
  • PMD
  • Build Pipeline

任务配置,构建

  • 新建任务
    devOps0020.jpg

  • jeesite-配置-源码管理
    devOps0021.jpg

  • 系统管理-全局工具配置

devOps0022.jpg

devOps0023.jpg

  • jeesite-配置-Build

devOps0024.jpg

  • 立即构建
    devOps0025.jpg
  • 查看构建输出,Git changes
    devOps0026.jpg
  • 构建失败信息,稍后在使用 GitLab Webhooks 时解决此问题,重新构建
    devOps0027.jpg

GitLab Webhooks

Jenkins 配置

  1. 获取 Gitlab Access Token
    devOps0028.jpg
  2. Jenkins-系统管理-系统配置
    devOps0029.jpg
  3. jeesite-配置-Build Triggers
    devOps0030.jpg

GitLab 配置

  • Url is blocked: Requests to localhost are not allowed
    devOps0031.jpg
  • 新增 Webhooks
    devOps0032.jpg
  • Test Push Events
    devOps0033.jpg
  • 查看 Jenkins 面板
    devOps0034.jpg

Jenkins SonarQube

Jenkins 配置

  • 系统配置

    1. SonarQube 生成令牌
      devOps0035.jpg
    2. Jenkins-系统管理-系统设置-SonarQube servers
      devOps0036.jpg
  • 全局配置
    Jenkins-系统管理-全局工具配置-SonarQube Scanner
    devOps0037.jpg

  • jeesite-配置-新建构建后操作步骤
    devOps0038.jpg

  • 立即构建
    devOps0039.jpg

  • SonarQube 分析中
    devOps0040.jpg

  • 构建结束
    devOps0041.jpg

SonarQube 面板

  • 后台分析任务
    devOps0042.jpg
  • 分析完成
    devOps0043.jpg

Nexus 搭建使用

Nexus 安装启动

  • Nexus 配置 JDK 变量
    devOps0044.jpg
  • 默认端口 8081,已被 Jenkins 占用,修改 Nexus 的端口号
    文件位置 /nexus-3.16.1/etc/nexus-default.properties
    devOps0045.jpg
  • adduser nexus 然后运行 ./nexus run
    默认账号/密码 admin/admin123
    devOps0046.jpg
  • run-as-a-service
    参看官方文档 run-as-a-service

修改 Jeesite POM 文件

  • distributionManagement 标签
<!--项目分发信息,在执行mvn deploy后表示要发布的位置 -->
<distributionManagement>
   <repository>
      <id>releases</id>
      <name>Nexus Release Repository</name>
      <url>http://192.168.0.222:8087/nexus/content/repositories/releases</url>
      <uniqueVersion>true</uniqueVersion>
   </repository>
   <snapshotRepository>
      <id>snapshots</id>
      <name>Nexus Snapshot Repository</name>
      <url>http://192.168.0.222:8087/nexus/content/repositories/snapshots</url>
      </snapshotRepository>
</distributionManagement>
  • repositories 标签
<!-- 私服仓储配置 -->
<repositories>
   <repository>
      <id>nexus</id>
      <url>http://192.168.0.222:8087/nexus/content/groups/public/</url>
      <releases>
         <enabled>true</enabled>
      </releases>
     <snapshots>
         <enabled>true</enabled>
      </snapshots>
   </repository>
</repositories>
  • pluginRepositories 标签
<!-- Maven插件仓储配置 -->
<pluginRepositories>
   <pluginRepository>
      <id>framework</id>
      <url>http://192.168.0.222:8087/nexus/content/groups/public/</url>
      <releases>
         <enabled>true</enabled>
      </releases>
      <snapshots>
         <enabled>true</enabled>
      </snapshots>
   </pluginRepository>
</pluginRepositories>

完.....

  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖
  • SonarQube
    4 引用 • 11 回帖
  • Nexus
    13 引用 • 20 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • bambi2016

    好东西,学习了

  • 其他回帖
  • 88250

    我非常佩服图文并茂一步一步写心得教程的人,这种工匠精神非常赞!

    1 回复
  • ericshen90

    如果全部换成 docker 部署,流程会简化很多,为楼主 👍

  • someone
    作者

    👍 carry on

    该回帖因偏离主题而被折叠
    1 操作
    14032 在 2019-10-31 20:31:43 折叠了该回帖
  • 查看全部回帖