This may lead to missing/broken features in SonarQube

合并分支的日志
[INFO] SCM Publisher SCM provider for this project is: git
[INFO] SCM Publisher 8 source files to be analyzed
[WARNING] Shallow clone detected, no blame information will be provided. You can convert to non-shallow with 'git fetch --unshallow'.
[INFO] SCM Publisher 0/8 source files have been analyzed (done) | time=7ms
[WARNING] Missing blame information for the following files:
[WARNING]   * common-framework/common-framework-tos/src/test/java/framework/tos/engine/StorageEngineServiceTest.java
[WARNING]   * common-framework/common-framework-tos/src/test/java/framework/tos/repository/impl/MinioRepositoryImplTest.java
[WARNING]   * common-framework/common-framework-tos/src/main/java/framework/tos/engine/impl/StorageMinioEngineHandlerInterceptor.java
[WARNING]   * common-framework/common-framework-tos/src/main/java/framework/tos/engine/StorageEngineService.java
[WARNING]   * common-framework/common-framework-tos/src/main/java/framework/tos/engine/impl/StorageEngineServiceImpl.java
[WARNING]   * common-framework/common-framework-tos/src/main/java/framework/tos/controller/StorageController.java
[WARNING]   * common-framework/common-framework-tos/src/test/java/framework/tos/controller/StorageControllerTest.java
[WARNING]   * common-framework/common-framework-tos/src/test/java/framework/tos/engine/impl/StorageEngineServiceImplTest.java
[WARNING] This may lead to missing/broken features in SonarQube
测试类
@RunWith(MockitoJUnitRunner.class)
public class StorageEngineServiceImplTest {

    @InjectMocks
    @Spy
    private StorageEngineServiceImpl service;
    @Mock
    private MetadataRepository metadataRepository;
    @Mock
    private StorageEngineFactory storageEngineFactory;
    @Mock
    private StorageMinioEngineHandlerInterceptor storageMinioEngineHandlerInterceptor;
    @Mock
    private TosProperties tosProperties;

    @Captor
    private ArgumentCaptor<FileMetadataInfoDTO> fileMetadataInfoDTO;

    @Before
    public void setUp() {
        UserInfo userInfo = new UserInfo();
        userInfo.setUserId("TEST");
        UserHolder.setCurrentUser(userInfo);
    }

    @Test
    public void remove() {
        String meteDataJson = "{\"id\":627,\"fileKey\":\"9a5b15692ef0426c8204a7a910eff4c9\",\"fileMd5\":\"1ce7af3b474844c587be0df11cc7fbf2\",\"fileName\":\"video01.mp4\",\"fileMimeType\":\"video/mp4\",\"fileSuffix\":\"mp4\",\"fileSize\":22513474,\"storageEngine\":\"minio\",\"storageBucket\":\"video\",\"storagePath\":\"2023/08\",\"uploadTaskId\":\"b47b61ac-7868-4856-87d6-828815d9f1e8\",\"isFinished\":false,\"isPart\":true,\"partNumber\":5,\"isPreview\":false,\"isPrivate\":true,\"createUser\":\"TEST\",\"createTime\":1691064746000,\"updateUser\":\"TEST\",\"updateTime\":1691064746000}";
        FileMetadataInfoVo meteData = JSONUtil.toBean(meteDataJson, FileMetadataInfoVo.class);
        Mockito.when(metadataRepository.one(fileMetadataInfoDTO.capture())).thenReturn(meteData);
        Mockito.when(tosProperties.getEngine()).thenReturn("minio");
        Mockito.when(storageEngineFactory.getHandler("minio")).thenReturn(storageMinioEngineHandlerInterceptor);

        Boolean xxx = service.remove("xxx");
        Assert.assertTrue("", xxx);
    }

    @Test
    public void removeByUser() {
        Mockito.when(metadataRepository.one(fileMetadataInfoDTO.capture())).thenReturn(null);
        Boolean xxx = service.remove("xxx", "TEST");
        Assert.assertTrue("", xxx);
    }
}

gitlib配置
.maven_verify_sonar: &maven_verify_sonar
  - echo 'maven_verify_sonar'
  - mvn --batch-mode verify org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar -Dsonar.qualitygate.wait=true -Dsonar.host.url=$SONAR_HOST_URL -Dsonar.login=$SONAR_LOGIN -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.projectName=$CI_PROJECT_NAME -Dsonar.exclusions=**/target/**,**/test/**,**/example-module/**/*.java,**/common-base-commons/**/*.java,**/common/**/*.java -Dsonar.core.codeCoveragePlugin=jacoco -Dsonar.coverage.jacoco.xmlReportPaths=${CI_PROJECT_DIR}/target/site/jacoco/jacoco.xml -Dsonar.dependencyCheck.securityHotspot=true -Dsonar.dependencyCheck.summarize=true -Dsonar.dependencyCheck.htmlReportPath=${CI_PROJECT_DIR}/public/dependency-check-report.html -Dsonar.dependencyCheck.jsonReportPath=${CI_PROJECT_DIR}/public/dependency-check-report.json
before_script:
  - rm -fr $HOME/.m2/settings.xml
  - mkdir -p $HOME/.m2
  - echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?><settings xmlns=\"http://maven.apache.org/SETTINGS/1.0.0\"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"xsi:schemaLocation=\"http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd\"><mirrors><mirror><id>nexus</id><mirrorOf>*</mirrorOf><name>Nexus</name><url>$MAVEN_REPOSITORY_URL</url></mirror></mirrors></settings>" >> $HOME/.m2/settings.xml
stages:
  - code_check
findbugs:
  image: maven:3-jdk-11
  variables:
    SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"  # Defines the location of the analysis task cache
    GIT_DEPTH: "0"  # Tells git to fetch all the branches of the project, required by the analysis
  cache:
    key: "${CI_JOB_NAME}"
    paths:
      - .sonar/cache
  stage: code_check
  only:
    refs:
      - develop
      - merge_requests
  script:
    - echo 'sonarqube_scan'
    - *maven_verify_sonar
  artifacts:
    when: always
    reports:
      junit:
        - common-framework/**/target/surefire-reports/TEST-*.xml
sca_check:
  image:
    name: java/sca:1.0
    entrypoint: [""]
  stage: code_check
  rules:
    - if: '$CI_PIPELINE_SOURCE == "web"'
    - changes:
        - pom.xml
        - "**/pom.xml"

  script:
    - opensca-cli -path . -url $OPENSCA_URL -token $OPENSCA_TOKEN -out ${CI_PROJECT_DIR}/public/opensca.html
    - snyk auth $SNYK_TOKEN
    - snyk test ${CI_PROJECT_DIR} -maven-aggregate-project --json | snyk-to-html -o  ${CI_PROJECT_DIR}/public/snyk_results.html || exit_code=$?
    - mvn clean package -Dmaven.test.skip
    - >
      /usr/share/dependency-check/bin/dependency-check.sh --disableRetireJS --scan ${CI_PROJECT_DIR} --format JSON -format HTML --project "$CI_PROJECT_NAME" --failOnCVSS 0 --out ${CI_PROJECT_DIR}/public || exit_code=$?
    - mvn clean
    - *maven_verify_sonar
  artifacts:
    when: always
    paths:
      - public

现在合并分支的时候,提示上面那个异常,导致sonar覆盖率为0,合并失败

【以下回答由 GPT 生成】

不是,我的问题不是关于SonarQube中的缺失/损坏功能以及合并分支日志的。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^