정적 분석을 위해 LaraDock의 SonarQube를 Windows 10 + VirtualBox + Docker 환경에서 이동해 본 메모

개요



SonarQube라고 하는 것으로 정적 해석 되는 것이 할 수 있다고 (들)물어, 지난번 의 소스에 시험해 본 메모.
에러 수정의 방향을 잘못해 미주했지만, 마지막에는 문제 없게 시험할 수 있었다.

검증 소스

환경


  • Windows 10 Home
  • Vagrant 2.2.6
  • virtualbox 6.0.14
  • Ubuntu 18.04 LTS (Bionic Beaver)
  • Docker version 19.03.2, build 6a30dfc
  • docker-compose version 1.24.1, build 4667896b
  • Laradoc
  • SonarQube Community EditionVersion 7.9.1 (build 27448)

  • 설정


  • 명령은 vagrant ssh로 virtualbox의 ubuntu에 로그인한 상태입니다.

  • 필요한 Dockerfile



    LaraDock 안에는 많은 Dockerfile이 들어 있지만, 이것에 필요한 것은 이하의 2개.
  • postgres
  • sonarqube

  • .env 파일 수정



    laradock/.env
    ### SONARQUBE ################################################
    ## docker-compose up -d sonarqube
    ## (If you encounter a database error)
    ## docker-compose exec --user=root postgres
    ## source docker-entrypoint-initdb.d/init_sonarqube_db.sh
    ## (If you encounter logs error)
    ## docker-compose run --user=root --rm sonarqube chown sonarqube:sonarqube /opt/sonarqube/logs
    
    
    -SONARQUBE_HOSTNAME=sonar.example.com
    +SONARQUBE_HOSTNAME=127.0.0.1
    SONARQUBE_PORT=9000
    SONARQUBE_POSTGRES_INIT=true
    SONARQUBE_POSTGRES_HOST=postgres
    SONARQUBE_POSTGRES_DB=sonar
    SONARQUBE_POSTGRES_USER=sonar
    SONARQUBE_POSTGRES_PASSWORD=sonarPass
    

    파일 사용 권한 설정


    ~/.laradock/data는 .env 파일의 DATA_PATH_HOST=./.laradock/data를 참조하므로,
    변경하는 경우에는 그에 맞추는 것.
    sudo mkdir -p ~/.laradock/data/sonarqube/logs
    sudo chmod -R 777 ~/.laradock/data/sonarqube
    

    그렇게하지 않으면 다음 오류가 발생하여 중지됩니다.
    2019-10-19 01:53:08,586 main ERROR Unable to create file /opt/sonarqube/logs/es.log java.io.IOException: Permission denied
    
    ## (If you encounter logs error) docker-compose run --user=root --rm sonarqube chown sonarqube:sonarqube /opt/sonarqube/logs 시도해 보았지만 작동하지 않았고 조사에 시간이 걸렸습니다.

    가상 메모리 확인


  • sonarqube는 내부적으로 ElasticSearch를 사용하기 때문에 메모리를 많이 사용합니다.
  • 다음 명령으로 확인하고 기본 65530이면 늘려야합니다.
  • sysctl vm.max_map_count
    

    가상 메모리 늘리기


    sudo sysctl -w vm.max_map_count=262144
    

    동작 확인


    docker-compose up -d sonarqube
    

    virtualbox의 IP를 여기에서는 192.168.74.60이라고 하면,
    http://192.168.74.60:9000/에 액세스하면 SonarQube 화면을 볼 수 있습니다.

    로그인



    사용자 : admin, 암호 : admin으로 로그인




    PHP 플러그인 도입



    플러그인을 넣지 않고 진행하면 다음과 같은 오류가 발생합니다.
    ERROR: Error during SonarQube Scanner execution
    ERROR: No quality profiles have been found, you probably don't have any language plugin installed.
    ERROR:
    ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.
    

    Administration > MarketPlace에서 플러그인 배포 화면으로 이동.



    php를 입력하여 플러그인을 좁히고 설치


    설치가 완료되면 다시 시작합니다.


    프로젝트 만들기



    Adminstration > Projects > Management를 선택합니다.



    Create Project 선택



    Name 및 Key를 입력하여 Create



    Provide Token에 Key를 입력하여 Generate.



    이 Token은 메모장 등에 저장해 두면 좋다.
    token을 확인한 후 Continue.



    PHP를 분석하고 싶기 때문에 Other



    SonarQube 클라이언트는 Ubuntu에 설치할 예정이므로 Linux를 선택합니다.



    클라이언트 도구 설정


    # インストール場所の設定
    mkdir -p /home/vagrant/sonarqube
    # 移動
    cd /home/vagrant/sonarqube
    # クライアントの入手
    sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip
    # 解凍ツール導入
    sudo apt install -y unzip
    # 解凍
    sudo unzip sonar-scanner-cli-4.2.0.1873-linux.zip
    # 解凍したパスを設定して、フルパスをいれなくても sonar-scanner コマンドが使えるようにする
    export PATH="$PATH:/home/vagrant/sonarqube/sonar-scanner-4.2.0.1873-linux/bin"
    # ソースコードのあるディレクトリに移動
    cd /vagrant/project/whitemap/laravel_docker/whitemap/app
    # scan開始
    sonar-scanner  -Dsonar.projectKey=Larvel  -Dsonar.sources=.  -Dsonar.host.url=http://192.168.74.60:9000  -Dsonar.login=b00689ae6518e3341dc09f529cc66661e3460d20
    

    확인


    sonar-scanner 성공하면 다음과 유사한 메시지가 표시됩니다.
    INFO: ------------------------------------------------------------------------
    INFO: EXECUTION SUCCESS
    INFO: ------------------------------------------------------------------------
    INFO: Total time: 8.460s
    INFO: Final Memory: 6M/24M
    INFO: ------------------------------------------------------------------------
    

    Projects에서 웹에서 확인할 수 있다.



    버그가 하나 있었다. .





    참고



    Laradock 3
    issue
    가상 메모리 - Elasticsearch 배포하기 전에 주의해야 합니다!
    Docker for Windows에서 postgres 컨테이너의 Volume 마운트 보안 ]
    SonarQube로 PHP 코드 정적 분석
    Get Started in Two Minutes Guide
    Jenkins + SonarQube로 PHP 코드 메트릭스 측정!
    우분투 PATH 설정 방법 j
    docker volume mount 시의 user owner 문제
    SonarQube에서 소스 코드의 정적 분석 및 리뷰를 자동화 해보기 (전편)
    How To Ensure Code Quality with SonarQube on Ubuntu 18.04
    【PHP】 PHP에서의 정적 해석 SonarQube를 사용해 보았다

    좋은 웹페이지 즐겨찾기