Sonar Scanner集成GitLab CI时生成空Git仓库,无法识别源代码
问题:GitLab CI集成Sonar Scanner时索引文件数为0
我在同一服务器部署了GitLab Runner和SonarQube(通过docker-compose搭建),按照Sonar UI提示配置了GitLab令牌、SONAR_TOKEN和SONAR_URL变量后,推送代码触发CI流水线,但Sonar Scanner始终显示0 files indexed,同时日志出现Initialized empty Git repository。
SonarQube docker-compose.yml配置
version: "3" services: sonarqube: image: sonarqube:community depends_on: - db environment: SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar SONAR_JDBC_USERNAME: ${SONAR_JDBC_USERNAME} SONAR_JDBC_PASSWORD: ${SONAR_JDBC_PASSWORD} 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: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgresql:/var/lib/postgresql - postgresql_data:/var/lib/postgresql/data volumes: sonarqube_data: sonarqube_extensions: sonarqube_logs: postgresql: postgresql_data:
GitLab CI gitlab-ci.yml配置
default: tags: - my-custom-tag-1 - my-custom-tag-2 stages: - test sonarqube-check: image: name: sonarsource/sonar-scanner-cli:latest entrypoint: [""] stage: test variables: SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cache SONAR_SCANNER_OPTS: "-Dsonar.projectBaseDir=${CI_PROJECT_DIR}/.sonar" GIT_STRATEGY: "clone" # clone entire repo instead of reusing workspace GIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis task cache: key: "${CI_JOB_NAME}" paths: - .sonar/cache script: - sonar-scanner allow_failure: true rules: - if: $CI_COMMIT_BRANCH == 'main'
.sonar/sonar-project.properties配置
sonar.projectKey=${SONAR_PROJECT_KEY} sonar.qualitygate.wait=true
关键错误日志
INFO: Initialized empty Git repository in /builds/my-project/.git
INFO: 0 files indexed
解决步骤
修正
sonar.projectBaseDir配置
当前SONAR_SCANNER_OPTS错误地将项目根目录指向了Sonar缓存目录${CI_PROJECT_DIR}/.sonar,导致扫描空目录。需修改为项目实际根目录:SONAR_SCANNER_OPTS: "-Dsonar.projectBaseDir=${CI_PROJECT_DIR}"验证工作空间代码存在性
在sonar-scanner命令前添加调试命令,确认代码是否被正确克隆:script: - ls -la ${CI_PROJECT_DIR} - sonar-scanner若
ls输出为空,需检查Runner权限、Git仓库访问权限(如CI令牌配置)。检查Sonar扫描范围规则
登录SonarQube UI,进入项目设置的General Settings > Analysis Scope,确认Files to include规则为**/*(默认值),确保覆盖所有代码文件。确认缓存目录不干扰扫描
检查项目.gitignore是否误排除了必要文件,同时确保SONAR_USER_HOME的缓存路径不会覆盖代码目录。
内容的提问来源于stack exchange,提问作者Thor1n
相关产品推荐
相关产品推荐

