软件系统开发定制Gitlab集成Sonarqube实现自动检测代码并发送报告给提交者

1、GitLab-Runner安装

(1)在Admin面板 -- >Runners,查看-Runner安装方式

 (2)下载安装

  1. # Download the binary for your system
  2. sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
  3. # Give it permissions to execute
  4. sudo chmod +x /usr/local/bin/gitlab-runner
  5. # Create a GitLab CI user
  6. sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
  7. # Install and run as service
  8. sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
  9. sudo gitlab-runner start

(3)命令注册

sudo gitlab-runner register --url http://192.168.44.136/ --registration-token hiSDonwf--4gtjqvcbMb

 (4)返回gitlab页面,软件系统开发定制可以看到刚注册的runner。

2、软件系统开发定制在项目根目录创建.gitlab-ci.yml文件

 配置 .gitlab-ci.yml 文件内容:

  1. stages:
  2. - sonarqube_scan
  3. - sendmail
  4. sonarqube_scan_job:
  5. stage: sonarqube_scan
  6. script:
  7. - mvn clean package
  8. - sonar-scanner -Dsonar.projectName=$CI_PROJECT_NAME -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.language=java -Dsonar.host.url=http://192.168.44.137:9000 -Dsonar.login=admin -Dsonar.password=abc123! -Dsonar.sources=src -Dsonar.java.binaries=target/classes -Dsonar.java.test.binaries=target/test-classes -Dsonar.ws.timeout=30 -Dsonar.sources=src -Dsonar.sourceEncoding=UTF-8 -Dsonar.java.binaries=target/classes -Dsonar.java.test.binaries=target/test-classes -Dsonar.java.surefire.report=target/surefire-reports
  9. tags:
  10. - demo
  11. when: always
  12. sendmail_job:
  13. stage: sendmail
  14. script:
  15. - echo $GITLAB_USER_EMAIL
  16. - echo $CI_PROJECT_NAME
  17. - echo $CI_COMMIT_REF_NAME
  18. - python3 /opt/sonarqube_api.py $CI_PROJECT_NAME $CI_COMMIT_REF_NAME $GITLAB_USER_EMAIL
  19. tags:
  20. - demo
sonarqube_api.py代码如下:
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. import requests,json,sys,time
  4. import smtplib
  5. from email.mime.text import MIMEText
  6. from email.header import Header
  7. from_addr='543395404@qq.com' #邮件发送账号
  8. qqCode='lejuimybvccobehh' #授权码
  9. smtp_server='smtp.qq.com'
  10. smtp_port=465
  11. def getSonarinfo(component):
  12. sonar_url="http://192.168.44.137:9000/api/measures/component?component={0}&metricKeys=bugs,vulnerabilities,code_smells,ncloc".format(component,)
  13. print(sonar_url)
  14. sonar_token ="d5519a4e9018084b98ba39d8f9cd82bee0142505"
  15. session = requests.Session()
  16. session.auth = sonar_token,''
  17. call = getattr(session, 'get')
  18. res = call(sonar_url)
  19. binary = res.content
  20. result = json.loads(binary)
  21. result_dict = {}
  22. for info_dict in result["component"]["measures"]:
  23. result_dict[info_dict["metric"]] = info_dict["value"]
  24. #print(result_dict)
  25. return result_dict
  26. def sendmail(to_addrs,mail_msg):
  27. stmp=smtplib.SMTP_SSL(smtp_server,smtp_port)
  28. stmp.login(from_addr,qqCode)
  29. message = MIMEText(mail_msg, 'html', 'utf-8')
  30. message['From'] = Header("管理员", 'utf-8')
  31. message['To'] = Header("Me", 'utf-8')
  32. subject = 'Gitlab代码安全检测结果'
  33. message['Subject'] = Header(subject, 'utf-8')
  34. try:
  35. stmp.sendmail(from_addr, to_addrs, message.as_string())
  36. except Exception as e:
  37. print ('邮件发送失败--' + str(e))
  38. print ('邮件发送成功')
  39. if __name__ == '__main__':
  40. project = sys.argv[1]
  41. branch = sys.argv[2]
  42. user_email = sys.argv[3]
  43. time.sleep(10)
  44. sonarqube_data = getSonarinfo(component=project,)
  45. project_url = "http://192.168.44.137:9000/dashboard?id={0}".format(project,)
  46. print(sonarqube_data)
  47. html_text = """
  48. <!DOCTYPE html>
  49. <html lang="en">
  50. <head>
  51. <title></title>
  52. <meta charset="utf-8">
  53. </head>
  54. <body>
  55. <div class="page" style="margin-left: 30px">
  56. <h3>{user_email}, 你好!</h3>
  57. <h3> 本次提交代码检查结果如下:</h3>
  58. <h3> 项目名称:{project} </h3>
  59. <h3> 分支:{branch} </h3>
  60. <h3>一、总体情况</h3>
  61. <ul>
  62. <li style="font-weight:bold;">
  63. 本次扫描代码行数: &nbsp; <span style="color:blue">{lines} </span>,
  64. bugs: &nbsp;<span style="color:red">{bugs}</span>,
  65. Vulnerabilities: &nbsp;<span style="color:red">{vulnerabilities}</span>,
  66. Code Smells: &nbsp; <span style="color:red">{code_smells}</span>
  67. </li>
  68. <li style="font-weight:bold;margin-top: 10px;">
  69. URL地址:&nbsp;
  70. <a style="font-weight:bold;"
  71. href={project_url}>{project_url}
  72. </a>
  73. </li>
  74. </ul>
  75. </div>
  76. </body>
  77. </html>
  78. """.format(user_email=user_email,project=project,branch=branch,lines=sonarqube_data["ncloc"],bugs=sonarqube_data["bugs"],vulnerabilities=sonarqube_data["vulnerabilities"],code_smells=sonarqube_data["code_smells"],project_url=project_url)
  79. #print(html_text)
  80. sendmail(to_addrs=user_email,mail_msg=html_text)

 3、实现效果

(1)模拟用户提交代码,新建测试文件填写测试字符,然后commit提交。

(2)在GitLab,CI/CD-->Pipelines,可以查看运行状态,点击进入可查看详情。

(3)完成后,用户邮箱收到代码检测报告。

 (4)在可以查看到对应的项目检测情况。

参考链接:

Gitlab集成Sonarqube自动检测代码并发送报告给提交者

https://www.cnblogs.com/Sunzz/p/13731675.html

https://blog.csdn.net/a49963775222/article/details/110120319

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发