• docker 部署jenkins + sonarqube + postgresql 代码扫描


    前言

     docker部署

    错误1

     解决1:

    问题2:

    解决2: 

     配置sonarqube

    先来安装一个汉化插件吧

    问题3

     整合Sonar和gitlab

     安装Gitlab-runner,获取gitlab-Token

    进入gitlab后,选择runner,进行相应的Token获取。

     安装gitlab-runner

    让我们来个git项目测试吧

    手动添加项目

     创建完成后请在页面等待; 让我们上传下git的代码进行debug吧


    前言

    项目管理是困难的,所以需要借助一些工具去规范代码,扫描出代码潜在的缺陷。这方便SonarQube非常优秀,我们先介绍一下SonarQube检查功能:1,不遵守代码标准(checkstyle)
    2,潜在缺陷(空指针)
    3,糟糕的复杂度(难以理解)
    4,重复(通用的方法需要归纳封装)
    5,糟糕的注释
    7,糟糕的设计(耦合度检查)

     docker部署

    1. docker pull jenkinsci/blueocean
    2. docker run \
    3. -d \
    4. --name myjenkins \
    5. -p 8080:8080 \
    6. -p 50000:50000 \
    7. -v /data/jenkins-data:/var/jenkins_home \
    8. -v /var/run/docker.sock:/var/run/docker.sock \
    9. -v /usr/bin/git:/usr/local/git \
    10. -v /usr/bin/mvn:/usr/local/mvn \
    11. -v /etc/localtime:/etc/localtime \
    12. docker.io/jenkinsci/blueocean
    13. docker pull sonarqube:9.6.1-community
    14. vim docker-compose.yaml
    15. version: "3.1"
    16. services:
    17. db:
    18. image: postgres
    19. container_name: db
    20. ports:
    21. - 5432:5432
    22. networks:
    23. - sonarnet
    24. environment:
    25. POSTGRES_USER: sonar
    26. POSTGRES_PASSWORD: sonar
    27. volumes:
    28. - ./pg_db:/var/lib/postgresql
    29. - ./pg_data:/var/lib/postgresql/data
    30. privileged: true
    31. sonarqube:
    32. image: sonarqube:9.6.1-community
    33. container_name: sonarqube
    34. depends_on:
    35. - db
    36. ports:
    37. - 9000:9000
    38. networks:
    39. - sonarnet
    40. environment:
    41. SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
    42. SONAR_JDBC_USERNAME: sonar
    43. SONAR_JDBC_PASSWORD: sonar
    44. volumes:
    45. - ./logs:/opt/sonarqube/logs
    46. - ./data:/opt/sonarqube/data
    47. - ./extensions:/opt/sonarqube/extensions
    48. privileged: true
    49. networks:
    50. sonarnet:
    51. driver: bridge

    错误1

    [root@localhost sonarqube]# docker logs -f sonarqube

    09:43:55.666 [main] WARN org.sonar.application.config.AppSettingsLoaderImpl - Configuration file not found: /opt/sonarqube/conf/sonar.properties

    2022.10.12 09:43:55 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp

    2022.10.12 09:43:55 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on [HTTP: 127.0.0.1:9001, TCP: 127.0.0.1:43874]

    2022.10.12 09:43:55 INFO  app[][o.s.a.ProcessLauncherImpl] Launch process[ELASTICSEARCH] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch

    could not find java in ES_JAVA_HOME at /usr/lib/jvm/java-11-openjdk/bin/java

    2022.10.12 09:43:55 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]: 1

    2022.10.12 09:43:55 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running

    2022.10.12 09:43:55 INFO  app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped

    2022.10.12 09:43:55 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped

    [root@localhost sonarqube]# docker logs -f db

    ls: cannot access '/docker-entrypoint-initdb.d/': Operation not permitted

    ls: cannot access '/docker-entrypoint-initdb.d/': Operation not permitted

    ls: cannot access '/docker-entrypoint-initdb.d/': Operation not permitted

     解决1:

    1如果是docker run 需要 加上参数 --privileged=true
    2如果是docker-compose.yaml 需要加上 privileged: true

    错误原因:权限不足的问题引起的

    接着访问:http://localhost:9000/ 就可以了,默认管理员用户和密码为:admin/admin。

    问题2:

    解决2: 

    sonar自带数据库,但是会被提示

    嵌入式数据库应仅用于评估目的、嵌入式数据库无法扩展,不支持升级到SonarQube的较新版本,也不支持将数据从中迁移到其他数据库引擎。

    以上错误原因是我的yaml 有问题,问题已修复

     

    改完需 将目录与docker实例全部删除重新做

    cd /data/sonarqube

    docker stop db sonarqube

    docker rm -f  db sonarqube

    rm  -rf data extensions logs pg_d*

    docker-compose up -d

    然后登陆页面去看,错误提示消失

    docker ps

    CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                                              NAMES

    641eea952d57        sonarqube:9.6.1-community       "/opt/sonarqube/bi..."   5 seconds ago       Up 4 seconds        0.0.0.0:9000->9000/tcp                             sonarqube

    99c631eb5b0d        postgres                        "docker-entrypoint..."   6 seconds ago       Up 5 seconds        0.0.0.0:5432->5432/tcp                             db

    1884515515a6        docker.io/jenkinsci/blueocean   "/sbin/tini -- /us..."   23 hours ago        Up 23 hours         0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp   myjenkins

     配置sonarqube

    先来安装一个汉化插件吧

    SonarQube提供了强大的插件管理功能,以中文语言包为示例,讲解如何安装插件:

    登录成功后,选择Administration ——> Marketplace ——> Plugins,在搜索框输入Chinese就可以选择安装了

    问题3

    插件页面能搜到插件,但是没有install按钮; 需要选择上面的声明阅读后,才能出现install的按钮。【如果不在部署的那台机器上安装, 会提示联系管理员安装】

     

     同时安装findbug插件,用于任务跟踪

    当状态显示为install pending时,说明插件安装完成,点击restart server即可生效

     整合Sonar和gitlab

     安装Gitlab-runner,获取gitlab-Token

    进入gitlab后,选择runner,进行相应的Token获取。

     安装gitlab-runner

    1. # 拉取镜像
    2. docker pull gitlab/gitlab-runner
    3. # 创建容器映射目录
    4. mkdir -p /data/gitlab-runner/config
    5. # 创建容器并运行
    6. docker run -d \
    7. --name gitlab-runner \
    8. --restart always \
    9. -v /data/gitlab-runner/config:/etc/gitlab-runner \
    10. -v /var/run/docker.sock:/var/run/docker.sock \
    11. gitlab/gitlab-runner
    12. 配置gitlab-runner相应的参数(用上图中url与token):
    13. docker exec -it gitlab-runner gitlab-runner register -n \
    14. --url http://git.yoyi.tv/ \
    15. --registration-token DmxqxgWsoEpGynLUrGgj \
    16. --executor docker \
    17. --description "Docker Runner" \
    18. --docker-image "sonarsource/sonar-scanner-cli:latest" \
    19. --docker-volumes /var/run/docker.sock:/var/run/docker.sock
    20. 配置完成后,config下会生成配置文件

    让我们来个git项目测试吧

    手动添加项目

    是否需要集成自己喜欢的CI,使用gitlab进行持续集成和持续部署--》选择代码编码--》按照提示在git中创建文件sonar-project.properties   .gitlab-ci.yml  与CI/CD

     

     

     创建完成后请在页面等待; 让我们上传下git的代码进行debug吧

     等待CI/CD进行

     查看sonaroube手动创建的项目

    可以点进各bugs等中查询详情,这样就完成了;

     

     

  • 相关阅读:
    Retentive Network: A Successor to Transformer for Large Language Models
    Python、C、C扩展、Cython 差异对比,98%的人都不知道
    Hive DDL操作出现卡住现象源码分析与解决方法
    卷积神经网络特征融合,两个神经网络同时训练
    Telegram 引入了国产小程序容器技术
    前端技能树,面试复习第 50 天—— Vue3.0 基础 | Vue3 有什么更新 | Composition API
    Linux-缓冲区(简单理解)
    (PTA乙级)1045 快速排序 (单调栈思想)
    模型层及ORM介绍
    SpringCloud框架(一):环境搭建 生产和消费 RestTemplate,底层源码解读
  • 原文地址:https://blog.csdn.net/zhangxueleishamo/article/details/127321549