【问题标题】:Why Sonar-scanner 4.2 is unable to create user cache?为什么 Sonar-scanner 4.2 无法创建用户缓存?
【发布时间】:2020-04-25 18:30:39
【问题描述】:

使用 dockerized 声纳扫描仪 4.2 官方图像,我尝试运行声纳扫描仪的示例 Docker 运行操作,我得到 unable to create user cache: /usr/src/.sonar/cachecaused by: Java.nio.file.accessdeniedexception: /usr/src/.sonar 每次。图像上的用户有问题吗?难以置信,因为这是官方的声纳扫描器Docker 镜像

【问题讨论】:

    标签: sonarqube sonarqube-scan sonar-runner sonarscanner


    【解决方案1】:

    我在 OpenShift 下使用配置了声纳扫描仪插件的 Jenkins 容器遇到了同样的问题。

    为了修复它,我在 Jenkins 的配置中的 Global Properties 部分下添加了一个环境变量 SONAR_USER_HOME,指向 /tmp

    【讨论】:

      【解决方案2】:

      在 Linux 上,我必须手动创建文件夹并设置正确的 chmod:

      mkdir .sonar .sonar/cache .scannerwork
      sudo chmod -R 777 .sonar
      sudo chmod -R 777 .scannerwork
      

      为了自动化扫描,我创建了一个 docker-compose-sonarqube.yml,其中包含:
      - 声纳服务器
      - 声纳数据库
      - th sonarqube 扫描仪

      version: '3.7'
      
      services:
        # Sonarqube server : continuous code quality + security
        # User = admin, password = admin
        # The first time, we need to adjust docker parameters for sonarqube. Execute commands in the section 'Docker Host Requirements' from https://hub.docker.com/_/sonarqube/ : sudo sysctl -w vm.max_map_count=262144; sudo sysctl -w fs.file-max=65536; ulimit -n 65536; ulimit -u 4096; docker-compose -f docker-compose-sonarqube.yml up
        sonarqube:
          image: sonarqube:8.3-community
          depends_on:
            - sonarqube-db
          ports:
            - "54380:9000"
          expose:
            - "9000"
          networks:
            - sonarnet
          environment:
            SONAR_JDBC_URL: jdbc:postgresql://sonarqube-db:5432/sonar
            SONAR_JDBC_USERNAME: sonar
            SONAR_JDBC_PASSWORD: sonar
          volumes:
            - sonarqube_data:/opt/sonarqube/data
            - sonarqube_extensions:/opt/sonarqube/extensions
            - sonarqube_logs:/opt/sonarqube/logs
            - sonarqube_temp:/opt/sonarqube/temp
        # Sonarqube database
        sonarqube-db:
          image: postgres
          networks:
            - sonarnet
          environment:
            POSTGRES_USER: sonar
            POSTGRES_PASSWORD: sonar
          volumes:
            - postgresql:/var/lib/postgresql
            # This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
            - postgresql_data:/var/lib/postgresql/data
        # Sonarqube client (scanner)
        sonarqube-scanner-cli:
          image: sonarsource/sonar-scanner-cli
          depends_on:
            - sonarqube
          networks:
            - sonarnet
          volumes:
            - ./:/usr/src
          environment:
            SONAR_HOST_URL: http://sonarqube:9000
      
      networks:
        sonarnet:
          driver: bridge
      
      volumes:
        sonarqube_data:
        sonarqube_extensions:
        sonarqube_logs:
        sonarqube_temp:
        postgresql:
        postgresql_data:
      

      sonar-project.properties 中设置您的项目来源:

      # must be unique in a given SonarQube instance
      sonar.projectKey=myapp
      
      # --- optional properties ---
      
      # defaults to project key
      sonar.projectName=My App
      # defaults to 'not provided'
      #sonar.projectVersion=1.0
      
      # Path is relative to the sonar-project.properties file. Defaults to .
      sonar.sources=./symfony/src
      
      # Encoding of the source code. Default is default system encoding
      #sonar.sourceEncoding=UTF-8
      
      # Sonarqube server url
      sonar.host.url=http://sonarqube:9000
      

      最后运行 sonarqube.sh

      # Usage : sh sonarqube.sh firefox
      
      sonarcube() {
          sonarqubePort=54380
          sudo date # Ask for the password at the begining
          docker-compose -f docker-compose-sonarqube.yml up --d
          isServerUp=1
          while [ "$isServerUp" != "0" ]; do # Wait for sonarcube server to be up
              echo "Waiting for sonarqube. This may take 1 min ..."
              curl http://localhost:$sonarqubePort -s|grep "window.serverStatus"|grep "UP"
              isServerUp=$?
              sleep 1
          done
          sleep 3
          mkdir .sonar .sonar/cache .scannerwork
          sudo chmod -R 777 .sonar
          sudo chmod -R 777 .scannerwork
          docker-compose -f docker-compose-sonarqube.yml start sonarqube-scanner-cli;
          docker-compose -f docker-compose-sonarqube.yml logs -f sonarqube-scanner-cli;
          firefox http://localhost:54380/dashboard?id=myapp
          echo "View Sonarqube results at http://localhost:$sonarqubePort/dashboard?id=myapp"
      }
      
      sonarcube
      

      【讨论】:

        【解决方案3】:

        您是否使用-v "/path/to/project:/usr/src" 将任何内容安装到/usr/src?

        【讨论】:

        • 即使在没有任何参数的简单“Docker 运行 mysonarscanner”期间也会发生这种情况。用户内部的问题是否在 dockerfileach 中定义?
        • 我不认为你可以在没有任何参数的情况下运行它。如果您查看文档,并且想要扫描当前目录,则必须通过 -v "$PWD:/usr/src" (对于 linux)。请参阅github.com/SonarSource/sonar-scanner-cli-docker 了解更多信息。
        猜你喜欢
        • 2022-01-04
        • 2020-06-01
        • 2020-04-07
        • 2021-07-04
        • 1970-01-01
        • 1970-01-01
        • 2020-07-07
        • 2013-02-02
        • 2023-04-08
        相关资源
        最近更新 更多