ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS의 CodePipeline 에서 SonarQube 사용하기
    설치&설정 관련 2023. 5. 28. 13:52

    AWS의 Code pipline 에서 SonarQube 사용하기

    SonarQube는 20개 이상의 프로그래밍 언어에서 버그, 코드 스멜, 보안 취약점을 발견할 목적으로 정적 코드 분석으로 자동 리뷰를 수행하기 위한 지속적인 코드 품질 검사용 오픈 소스 플랫폼입니다. 또한 중복 코드, 코딩 표준, 유닛 테스트, 코드 커버리지, 코드 복잡도, 주석, 버그 및 보안 취약점의 보고서를 제공합니다. wiki

    설치 준비

    설치하는 방식은 쉽게 Docker Image를 이용하는 방식과 Ec2에 설치하는 방식이 있습니다.
    이번 글에서는 간단하게 Ec2에 설치하는 방식으로 진행합니다.

    필요 소프트웨어

    • JDK 11 또는 JRE 11 이상
    • DBMS(Options)
      • PostgreSQL 11 이상
      • Oracle 12C 이상
    • Web browser(Client)
      • Microsoft Edge
      • Mozilla Firefox
      • Google Chrome
      • Safari

    Hardware 권장 사양

    • 1 core 이상의 CPU
    • 최소 3G 이상의 메모리

    설치 하기

    AWS Ec2가 준비 되어 있다는 전제 하에, DBMS를 제외하고 설치를 진행합니다.

    1. 업데이트 & 필요 패키지 설치

    $ sudo yum update -y
    $ sudo yum install wget unzip -y
    # file & memory update current session
    $ sudo sysctl -w vm.max_map_count=524288
    $ sudo sysctl -w fs.file-max=131072
    $ sudo ulimit -n 131072
    $ sudo ulimit -u 8192

    /etc/security/limits.conf 파일을 아래와 같이 수정해 두면 서버가 재부팅이 되어서 반영 됩니다.

    "account-name"   -   nofile   131072
    "account-name"   -   nproc    8192

    2. JDK 11 설치

    open jdk 11을 설치 합니다.

    $ sudo amazon-linux-extras install java-openjdk11
    
    $ sudo yum install java-11-openjdk-devel -y

    또는 실행파일을 받아서 설치 할 수 있습니다.

    $ curl -O https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz
    $ tar zxvf openjdk-11.0.1_linux-x64_bin.tar.gz
    $ sudo chmod -R 755 /usr/local/jdk-11.0.1
    # 이 부분은 .bashrc 에 추가 해도 됩니다. 
    $ export JAVA_HOME=/usr/local/jdk-11.0.1
    $ export PATH=$JAVA_HOME/bin:$PATH

    3. SonarQube 설치

    # 작업 디렉터리로 이동
    $ cd /applications
    # 9.8 버젼으로 설치 진행
    $ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.8.0.63668.zip
    
    $ unzip sonarqube-9.8.0.63668.zip

    4. SonarQube 실행

    # OS 에 알맞은 실행 위치로 이동
    $ cd /applications/sonarqube-9.8.0.63668/bin/linux-x86-64
    # 명령어 확인
    $ ./sonar.sh
    /usr/local/jdk-11.0.1/bin/java
    Usage: ./sonar.sh { console | start | stop | force-stop | restart | status | dump }
    # 실행
    $ ./sonar.sh start

    5. 9000 포트 열기

    기본 포트는 9000으로 해당 포트를 열고 web browser로 접근하면 됩니다.

    SonarQube 연동 하기

    1. 로그인

    로그인 초기 ID / PW는 admin/admin 입니다.

    로그인을 하면 초기 비밀번호를 변경하라고 가이드 합니다.

    2. 프로젝트 생성

    Manually 추가 선택

    내용 입력 후 저장 하면, 프로젝트 생성이 완료 됩니다.

    3. 프로젝트 설정

    Locally 를 선택하고

    토큰 생성 합니다.

    분석하려는 언어 와 환경을 선택합니다.

    아래와 같은 sonar-scanner를 이용한 분석 처리 준비가 완료 되었습니다.

    $ sonar-scanner \ 
      -Dsonar.projectKey=doc4sm \ # project 이름
      -Dsonar.sources=. \ # 분석 소스 위치
      -Dsonar.host.url=http://lahuman.github.io:9000 \ # host 주소
      -Dsonar.login=sqp_fasdfee85ujliuod4d38fa02b2d65f964726aca5 # 생성한 토큰 정보 

    sonarscanner 는 여서 받을 수 있습니다.

    4. 프로젝트 분석 결과

    sonarscanner 를 이용해서 분석을 진행하면, 아래와 같은 결과를 확인 할 수 있습니다.

    AWS CodePipeline 과 연동하기

    AWS CodePipeline 이 이미 존재하고, 여기에 Code-review를 추가하는 방식으로 연동 합니다.

    1. CodeCommit => Pipeline => 상세 이동 후 Edit add Stage 버튼을 클릭

    2. Add Action 버튼 클릭 후 알맞은 값 설정

    3. Create Build Project 버튼 클릭 후 build project 설정

    import build commands는 아래와 같습니다.

    version: 0.2
    env:
      shell: bash
    phases:
      pre_build:
        commands:
          - mkdir /downloads/sonarqube -p
          - cd /downloads/sonarqube
          - wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip
          - unzip sonar-scanner-cli-4.7.0.2747-linux.zip
          - mv sonar-scanner-4.7.0.2747-linux /opt/sonar-scanner
          - echo -e "sonar.host.url=http://lahuman.github.io:9000/ \n  sonar.sourceEncoding=UTF-8 \n sonar.qualitygate.wait=true " >> /opt/sonar-scanner/conf/sonar-scanner.properties
          - echo -e "#/bin/bash \n export PATH='$PATH:/opt/sonar-scanner/bin'" >> /etc/profile.d/sonar-scanner.sh
          - source /etc/profile.d/sonar-scanner.sh
          - sonar-scanner -v
      build:
        commands:
          - cd ../..
          - cd /codebuild/output/src*/src
          - sonar-scanner -Dsonar.projectKey=Example -Dsonar.sources=. -Dsonar.host.url=http://lahuman.github.io:9000  -Dsonar.login=sqp_017f2d65fa3rr34wesfd22369d98155fd4d493

    4. 설정 완료 & 저장

    모든 설정이 완료 되었다면, 저장 버튼을 클릭합니다.

    5. pipeline 실행

    추가 TIP

    코드 변경 후 다시 sonar-scanner을 진행하면, Coverage, Duplications 에서 실패가 발생합니다

    기본적으로 해당 문제를 해결해서 처리하는게 좋지만, 임시로 처리 하기 위해서는 아래와 같이 sonar-scanner에 예외 옵션을 주어야 합니다.

    $ sonar-scanner \ 
      -Dsonar.projectKey=doc4sm \ # project 이름
      -Dsonar.cpd.exclusions=**/* \ # Duplications 제외 처리 
      -Dsonar.coverage.exclusions=**/* \ # Coverage 제외 처리 
      -Dsonar.sources=. \ # 분석 소스 위치
      -Dsonar.host.url=http://lahuman.github.io:9000 \ # host 주소
      -Dsonar.login=sqp_fasdfee85ujliuod4d38fa02b2d65f964726aca5 # 생성한 토큰 정보 

    전체 내용은 Installing SonarQube on AWS EC2 instance and Integrating it with AWS CodePipeline를 참조해서 작성했습니다.

    참고 자료

Designed by Tistory.