持续集成交付CICD:GitLabCI 实现Sonarqube代码扫描

目录

一、实验

1.GitLabCI 代码扫描

二、问题

1.GitLab 执行sonar-scanner命令报错


一、实验

1.GitLabCI 代码扫描

(1)打开maven项目

7fc07572527043dfbfbb1df7eb0b2872.png

(2)maven项目流水线调用公共库

bb032fef982644ef87c6091b8abdba49.png

(3)项目组添加token认证

343de6f3d2634744b3e75adac69650e5.png

(4)修改公共库流水线文件

93dc354c61a841e6b0f3f2957165a35f.png

(5)修改CI.yaml

.pipelineInit:
  tags:
    - build
  stage: .pre
  variables:
    GIT_CHECKOUT: "true"
  script:
    - ls -l

.cibuild:
    tags:
      - build
    stage: build
    script:
      - echo "${BUILD_SHELL}"
      - ${BUILD_SHELL}
    artifacts:
      paths:
        - ${ARTIFACT_PATH}

.citest:
  tags:
    - build
  stage: test
  script:
    - echo "${TEST_SHELL}"
    - ${TEST_SHELL}
    # artifacts:
    # reports:
    #   - junit: ${TEST_REPORTS}

.sonarscan:
  tags: 
    - build
  stage: sonarscan
  script: 
    |-
      sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \
        -Dsonar.projectKey=${CI_PROJECT_NAME}\
        -Dsonar.projectName=${CI_PROJECT_NAME} \
        -Dsonar.projectVersion=${CI_COMMIT_SHA} \
        -Dsonar.login=${SONAR_AUTH_TOKEN} \
        -Dsonar.ws.timeout=30 \
        -Dsonar.projectDescription=${CI_PROJECT_TITLE} \
        -Dsonar.links.homepage=${CI_PROJECT_URL} \
        -Dsonar.links.ci=${CI_PIPELINE_URL} \
        -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 \
        -Dsonar.core.codeCoveragePlugin=jacoco \
        -Dsonar.jacoco.reportPaths=target/jacoco.exec

371d7ce032a5435f99f682846e8831fe.png

(6) 修改gitlab-ci.yaml,添加代码扫描阶段sonarscan

include:
 - project: 'devops03/devops03-gitlabci-lib'
   ref: master
   file: "/jobs/CI.yaml"




workflow:
  rules:
    #新建分支永远不执行
    - if: $CI_PIPELINE_SOURCE == "web"      #允许手动触发
      when: always
    - if: $CI_COMMIT_BEFORE_SHA == "0000000000000000000000000000000000000000"
      when: never
    # 其他情况永远执行
    - when: always

#取消每个阶段自动下载代码,即全局关闭作业代码下载
variables:
  GIT_CHECKOUT: "false"
  BUILD_SHELL: "mvn clean package -DskipTests -s settings.xml"   ## 构建命令
  TEST_SHELL: "mvn test -s settings.xml"                         ## 测试命令
  ARTIFACT_PATH: "target/*.jar"                                  ## 制品路径
  TEST_REPORTS: "target/surefire-reports/TEST-*.xml"             ## 测试报告

stages:
  - build
  - test
  - sonarscan


pipelineInit:
  extends: 
    - .pipelineInit


cibuild:
 extends:
 - .cibuild


citest:
 extends:
 - .citest

sonarscan:
 extends:
 - .sonarscan


d3c6154499bd408ca5faa1f94cd0525f.png

(6)maven项目运行流水线

775df0def06d41d497acd85949b20e9e.png

(7)成功

cc3438aa06c643f78dcf213cdbd5cbf7.png25099d49d6d54885b69868b0c27c32c3.png

(8)查看日志

0b72ce1b917b4851a69a02291398a3bd.png

(9)sonarqube查看项目

fb6732c864224007b9ed7b15ea795a89.pngf6b40884aa7c4a57bafb66b311d0ffed.png

二、问题

1.GitLab 执行sonar-scanner命令报错

(1)报错

报错1:命令未找到

9e7a84e5d7a1467284a68b49de156f8b.png

报错2:符号连接的层数过多

c6ce48d637fb493b87c64c0cbf14d7a8.png

(2)原因分析

问题1:环境变量未声明

问题2:bin目录软链接过多

(3)解决方法

第一种方式:删除软链接

第二种方式:重新安装sonar-scanner插件

这里采用第二种方式。

#下载地址
https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.8.0.2856-linux.zip
 
#解压在 opt 目录
cd /opt
unzip sonar-scanner-cli-4.8.0.2856-linux.zip 
 
 
#修改配置文件
cd /opt/sonar-scanner-4.8.0.2856-linux/conf
vim sonar-scanner.properties
 
sonar.host.url=http://192.168.204.8:9000
sonar.sourceEncoding=UTF-8
 
 
#在 /etc/profile 的末尾添加环境变量
vim /etc/profile
 
export SONAR_SCANNER_HOME=/opt/sonar-scanner-4.8.0.2856-linux
export PATH=$SONAR_SCANNER_HOME/bin:$PATH
 
 
#环境变量立即生效
source /etc/profile
 
#检查一下命令是否可用
sonar-scanner -v
 

ba8164f0acf44b6f9514fa042521696d.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CICD(Continuous Integration and Continuous Deployment)是一种软件开发实践,旨在通过自动化的构建、测试和部署流程,实现持续集成和持续交付的目标。下面是CICD的全程流程: 1. 代码管理:开发团队使用版本控制系统(如Git)来管理代码。他们可以在不同的分支上进行开发,并使用合并请求来将代码合并到主分支。 2. 自动化构建:当有新的代码提交或合并请求时,自动化构建工具(如Jenkins或GitLab CI)会触发构建流程。构建流程会从源代码中拉取最新的代码,并编译、打包应用程序或库。 3. 自动化测试:构建完成后,自动化测试工具会运行各种测试(如单元测试、集成测试和端到端测试)来验证代码的质量。这些测试可以帮助开发人员及早发现潜在的问题。 4. 静态代码分析:在构建和测试过程中,可以使用静态代码分析工具来检查代码中的潜在问题,如代码风格违规、潜在的安全漏洞等。 5. 部署到测试环境:如果所有的构建和测试都通过了,应用程序或库将被部署到测试环境中。这个环境可以是一个模拟生产环境的环境,用于进一步的验证和测试。 6. 自动化部署和发布:一旦应用程序或库在测试环境中通过了所有的测试,它可以自动地部署和发布到生产环境中。这个过程可以使用自动化部署工具(如Ansible、Chef或Kubernetes)来完成。 7. 监控和反馈:在应用程序或库运行在生产环境中,监控工具可以收集和分析运行时的数据,如性能指标、错误日志等。这些数据可以帮助开发团队及时发现和解决问题,并提供反馈来持续改进应用程序或库的质量和性能。 通过CICD的全程流程,开发团队可以实现快速、可靠和高质量的软件交付,并能够频繁地部署新的功能和修复bug。这种实践可以显著提高开发效率和软件质量,同时减少人工操作和人为错误的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值