ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【持续集成】docker 搭建基于 Jenkins SonarQube 的持续集成环境

2022-01-10 09:32:00  阅读:280  来源: 互联网

标签:集成 sonarqube SonarQube GitLab Jenkins sonar jenkins docker


文章目录

持续集成目标

  • 流水线 Java 示例:http://192.168.0.111/root/sonar-maven-multimodule。
  • 构建和部署流程自动化(TBD)
  • 单元测试自动化 (TBD)
  • 集成代码分析服务 (完成)
  • 验收测试自动化(TBD)
  • 发布自动化(TBD)

环境搭建

通过 dokcer 安装 SonarQube

参考文档

  • 问题1:给 Elasticsearch 分配内存的配置问题
    解决方法为在宿主机执行:sysctl -w vm.max_map_count=262144(临时修改重启失效)
    永久修改: vim /etc/sysctl.conf,vm.max_map_count=262144。

  • 安装中文支持插件:应用市场查找 chinese

  • docker-compose up -d

  • 访问地址:http://192.168.0.111:9000/

docker-compose.yml

version: "3"

services:
  sonarqube:
    image: sonarqube:9.2.4-community
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
    ports:
      - "9000:9000"
  db:
    image: postgres:12
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

Sonar 配置

  1. 修改默认用户名密码
  2. Java 代码分析 jdk 版本 11

mvn clean verify sonar:sonar -D"sonar.projectKey=maven-basic" -D"sonar.host.url=http://192.168.0.111:9000" -D"sonar.login=39b3bd857f2520c8fa964f7bd66afeb7c9c670d3"

Sonar 集成 Gitlab

  • Authenticate with GitLab - Sign in to SonarQube with your GitLab credentials.
  • Import your GitLab projects
  • Analyze projects with GitLab CI/CD
  • Report your Quality Gate status to your merge requests

docker 安装 Jenkins

  1. 在 docker-compose.yml 中添加:
jenkins:
    image: 'jenkins/jenkins:lts'
    container_name: jenkins
    restart: always
    ports:
      - '9002:8080'
      - '9003:50000'
    volumes:
      - '/srv/devops/jenkins_home:/var/jenkins_home'
  1. 执行:
chown -R 1000:1000 jenkins_home
docker-compose up -d jenkins
  1. 访问: http://192.168.0.111:9002
  2. 获得初始密码:cat jenkins_home/secrets/initialAdminPassword

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jX30tYCp-1641777275276)(…/assets/img/jenkins.png)]

sonar 集成 Jenkins

  1. Jenkins 中安装插件

    GitLab plugin for Jenkins - version 1.5.13 or later
    SonarQube Scanner plugin for Jenkins - version 2.11 or later

  2. 通过菜单:Jenkins Dashboard > Manage Jenkins > Manage Plugins 搜索并安装 SonarQube Scanner plugin.

  3. 通过 Jenkins Dashboard > Manage Credentials, 点击凭据域列表中的 Global 链接.

  4. 点击添加凭据 (credentials) 按钮,填写:

    类型: Secret Text
    范围: Global
    Secret: 需要在 SonarQube 中 User > My Account > Security 生成 token.

  5. 在 Jenkins 中通过菜单 Dashboard > Manage Jenkins > Configure System 找到 SonarQube Servers section 配置:

    勾选:Environment variables Enable injection of SonarQube server configuration as build environment variables
    Name: SonarQube 实例名.
    Server URL: SonarQube 实例 URL: http://192.168.0.111:9000. (localhost:9000 测试失败)
    Credentials: 选择第四步设置的凭据.

在 sonar 中配置项目通过 Jenkins 分析项目

  1. 在 sonarqube 中从 gitlab 导入项目:http://192.168.0.111/root/sonar-maven-multimodule

  2. 在 sonarqube 中添加项目并进行代码分析配置。注意:此处中文翻译有问题

  3. 在 jenkins 中添加流水线项目,在构建触发器(Build Triggers)下

  4. 勾选 Build when a change is pushed to GitLab. 记录 webhook URL,在GitLab中配置Webhook时使用。
    webhook URL:http://192.168.0.111:9002/project/sonar-maven-multimodule

  5. Enabled GitLab triggers 中选择 Push events.

  6. 点击高级Advanced…按钮,打开高级设置,找到 Secret token 段点击生成按钮记录Token, 配置 GitLab webhook 需要
    Token: f5b9fe1dda0eef5f57cc14f43f38ec3b

  7. 在流水线 Pipeline 设置中,确认下面的配置:(找不到?注意:流水线类型的Item才有)

    定义 Definition: Pipeline script from SCM
    配置管理工具 SCM: 在 Branches to build 填写项目主分支名 “*/main” ,仅构建一个主分支
    脚本路径 Script Path: Jenkinsfile

  8. 在 gitlab 仓库中创建 GitLab Webhook,在 Push 操作时触发 Jenkins 任务。

    在对应GitLab 仓库的 ‘设置>WebHooks’ 菜单下, 填写第 4 步及第 6 步生成的 URL 及 token.
    URL: Enter the URL you wrote down in the previous step.
    Secret Token: Enter the generated token you wrote down in the previous step.
    在触发源Trigger中确认勾选: 推送事件 (Push events), 点击添加按钮保存Webhook。

  9. 在项目中添加文件 Jenkinsfile 并提交:

        node {
        stage('SCM') {
            checkout scm
        }
        stage('SonarQube Analysis') {
            def mvn = tool 'Default Maven';
            withSonarQubeEnv() {
            sh "${mvn}/bin/mvn clean verify sonar:sonar -Dsonar.projectKey=root_sonar-maven-multimodule_AX44TXvC5VAHAZFrS7Vg"
            }
        }
        }
    
  10. 在 Jenkins 中 Dashboard > Global Tool Configuration 下 Maven installations 段,添加一个名为 Default Maven 的 mvn 工具。

docker 部署的 Jenkins 无法使用docker的问题

参考:https://blog.csdn.net/kikajack/article/details/79806520

services:
  jenkins-compose:
    image: jenkins
    privileged: true
    user: root
    ports:
     - "8088:8080"
     - "50000:50000"
    volumes:
     - /var/run/docker.sock:/var/run/docker.sock
     - /usr/bin/docker:/usr/bin/docker
     - /usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7
     - /home/demo/jenkins-compose:/var/jenkins_home

测试 docker 流水线

pipeline {
    agent { docker { image 'maven:3.8.4-openjdk-11-slim' } }
    stages {
        stage('build') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}

标签:集成,sonarqube,SonarQube,GitLab,Jenkins,sonar,jenkins,docker
来源: https://blog.csdn.net/LifeRiver/article/details/122403466

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有