当前位置:   article > 正文

【Testops学习积累之二】Jenkins Pipeline中Git打包、Sonar扫描静态代码实践操作过程记录_pipeline 里需要写git检出吗

pipeline 里需要写git检出吗

步骤1:jenkins服务器中,下载git和部署,并在jenkins中安装git插件,并在系统管理--全局工具配置中配置git路径(如下图)

 

步骤2:jenkins服务器中,安装和部署mysql(自行百度,也可以采用docker 容器部署),并启动

参考资料:https://www.cnblogs.com/yoyotl/p/5752437.html

 

步骤3:docker 安装和运行SonarQube server

(1):在docker 远程库中下载SonarQube server容器(命令:docker pull sonarqube)

(2):docker运行sonarqube容器

命令:

~: docker run -d -p 9000:9000 -p 9092:9092 --restart=always  -e SONARQUBE_JDBC_USERNAME=数据库用户名 -e SONARQUBE_JDBC_PASSWORD=数据库密码 -e SONARQUBE_JDBC_URL='jdbc:mysql://ip:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false' --name sonarqube  sonarqube

(3):将sonarqube容器对外访问端口,添加到防火墙中.

命令:

~:firewall-cmd --zone=public --add-port=9000/tcp --permanent

~:firewall-cmd --zone=public --add-port=9092/tcp --permanent

~:  firewall-cmd --reload

(4):jenkins中安装sonar相关插件(Sonar Quality Gates PluginSonarQube Scanner for Jenkins),并在系统管理--系统设置--SonarQube servers中,配置路径、SonarQube servers的访问地址、token(注:token配置,见问题1)

注:

1、sonar首次启动时,有点慢,而且有可能出现失败,如果出现无法请求,可以多次刷新浏览器试试,如还不行,可以telnet端口试试或者查看一下sonar server的日志  

 

步骤4:jenkins服务器中,SonarQube Scanner安装和配置

(1):手工下载(注意兼容SonarQube server版本问题),并解压,配置环境变量【命令1:vi /etc/profile(如下图,保存后)  命令2:source /etc/profile(重启环境变量)】:

    下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

(2):jenkins中系统管理--全局工具配置--Sonar Scanner中,配置路径

 

步骤5:jenkins Pipeline项目创建和脚本编写

  1. 创建流水线项目(自行百度,或者参考我上一篇博客)
  2. Git打包和sonar扫描代码编写,当前采用直接Pipeline script,没有采用Jenkinsfile文件方式,代码如下:
  1. def getHost(){
  2. def remote = [:]
  3. remote.name = 'server02'
  4. //远程部署服务器
  5. remote.host = '192.168.0.67'
  6. remote.user = 'root'
  7. remote.port = 22
  8. remote.password = '123456'
  9. remote.allowAnyHosts = true
  10. return remote
  11. }
  12. pipeline {
  13. agent any
  14. environment{
  15. def server = ''
  16. }
  17. stages {
  18. stage('gitcheckout') {
  19. steps {
  20. echo 'This is a gitcheckout step'
  21. checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '31cd5e49-9019-4a26-8325-9989ae9d6289', url: 'http://ip/Develop/zd_api.git']]])
  22. }
  23. }
  24. stage('sonar') {
  25. steps {
  26. echo 'This is a sonar step'
  27. withSonarQubeEnv('sonar') {
  28. //sonar-scanner部署路径下shell运行配置扫描项目信息
  29. sh "/usr/local/sonar/sonar-scanner3.3.0.1492/bin/sonar-scanner -X "+
  30. "-Dsonar.host.url=${SONAR_HOST_URL} " +
  31. "-Dsonar.language=php " +
  32. "-Dsonar.projectKey=zd " +
  33. "-Dsonar.projectName=zd " +
  34. "-Dsonar.projectVersion=$BUILD_NUMBER " +
  35. "-Dsonar.sources=. " +
  36. "-Dsonar.sourceEncoding=UTF-8 "
  37. }
  38. }
  39. }
  40. stage("QualityGate") {
  41. steps {
  42. echo 'QualityGate'
  43. /*
  44. script {
  45. timeout(time: 1, unit: "HOURS") { // 防止获取回调出现异常情况,设置超时时间
  46. def qg = waitForQualityGate('jenkins') //利用sonar webhook功能通知pipeline代码检测结果,未通过质量阈,pipeline将会fail
  47. //注意:这里waitForQualityGate()中的参数也要与之前SonarQube servers中Name的配置相同
  48. if (qg.status != 'OK') {
  49. error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}"
  50. }
  51. }
  52. }
  53. */
  54. }
  55. }
  56. stage('init-server'){
  57. steps {
  58. script {
  59. server = getHost()
  60. }
  61. }
  62. }
  63. stage('remote server pull image') {
  64. steps {
  65. script {
  66. //远程连接服务器
  67. sshCommand remote: server, command: """
  68. //获取镜像ID为192.168.0.68:5000/tomcat_jdk7
  69. image_name='docker images|grep -i 192.168.0.68:5000/tomcat_jdk7|awk '{print \$1}'';
  70. if [ \$image_name ];then
  71. docker rmi \$image_name;
  72. fi;
  73. //192.168.0.68:5000/tomcat_jdk7镜像ID不存在,就从私库服务器拉取
  74. docker pull 192.168.0.68:5000/tomcat_jdk7:latest;
  75. """
  76. }
  77. }
  78. }
  79. stage('remote server docker run'){
  80. steps {
  81. script {
  82. sshCommand remote: server, command: """
  83. //获取镜像name为test1
  84. container_name=`docker ps -a -f name=test1 -q`;
  85. if [ \$container_name ];then
  86. docker rm --force \$container_name;
  87. fi;
  88. //镜像name为test1不存在,就远程运行镜像
  89. docker run -d -p 8081:8080 --name test1 192.168.0.68:5000/tomcat_jdk7:latest;
  90. """
  91. }
  92. }
  93. }
  94. }
  95. }

注:1、在jenkins项目-配置-流水线中,有一个“流水线语法”,可以根据配置,自动生成Pipeline script,到时copy出来就可以直接用,无需手写。

 

问题1:jenkins系统配置中配置SonarQube servers时,遇到添加凭证中Secret和id输入什么值的问题(网上很少有资料显示)。

解决方法:凭证中Secret和id都是为sonar服务中配置的是token值,获取方法,很简单,百度搜索即可。

 

问题2:SonarQube Scanner扫描项目时,如果扫描项目内容较多时,容易出现上报失败

解决方法:

步骤1:在linux系统中,找到mysql的my.cnf配置文件(默认安装mysql的,一般在/etc路径下),将max_allowed_packet值改到事宜大小。

步骤2:重启mysql(命令:service mysqld restart)

步骤3:重启sonar sever(如果sonar是容器,执行命令:docker restart容器id/name)

 

问题3:docker容器中,出现ipv4 forwarding is disabled. networking will not work

解决方法:https://www.cnblogs.com/atuotuo/p/7092700.html

 

问题4:jenkins Pipeline 使用的centos版本、jdk版本、jenkins版本问题

1、Centos版本为7.2以上(最好是最新版本)

2、jenkins建议安装最新版本,且jdk安装jdk8

 

参考资料:

1、http://192.168.0.69:8080/jenkins/job/test/pipeline-syntax/globals(此地址,是jenkins内部地址,安装好Pipeline插件后,就可以查看了)

2、https://blog.csdn.net/weixin_40816738/article/details/90111803

3、https://blog.csdn.net/qq_36663951/article/details/82115086 

4、https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-jenkins/  (此地址是官方地址,有多个方式进行sonar操作)

5、https://www.cnblogs.com/cay83/p/7537850.html

6、https://www.cnblogs.com/luolizhi/p/5697021.html  (此地址中有sonar 扫描不通语言方式配置方式借鉴)

7、https://www.58jb.com/html/184.html (pipeline实现多个代码分支打包)

8、https://my.oschina.net/keking/blog/3019389

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/237195
推荐阅读
相关标签
  

闽ICP备14008679号