Category Archives: Setting

centos, windows, eclipse, vscode, etc tools
각종 설정과 관련된 내용을 다룹니다.

[Setting | DevOps] jest 설정 및 sonarqube 연동

jest사용법을 정리하고 결과값을 sonarqube와 연동하여 시각화 하는 방법을 정리한다.


작성일 : 2022-06-05

1> jest 설치

npm install --save-dev jest

2> package.json 에 script 추가

{
  "scripts": {
    "test": "jest"
  }
}

3> sample code (sum.js)

function sum(a, b) {
    return a + b;
}
module.exports = sum;

4> test code (sum.test.js)

const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
    expect(sum(1, 2)).toBe(3);
});

5> test 실행

npm test
-----------------------------------------------------
> test
> jest

 PASS  nodejs/sum.test.js
  √ adds 1 + 2 to equal 3 (2 ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.513 s, estimated 1 s
Ran all test suites.
-----------------------------------------------------

6> sonarqube 연동설치

npm install --save-dev sonarqube-scanner
npm install --save-dev jest-sonar-reporter
// react app
npm install --save-dev jest-environment-jsdom
npm install --save-dev react-test-renderer

7> report 스크립트 작성 (report.js)

const sonarqubeScanner = require('sonarqube-scanner');
sonarqubeScanner(
    {
        options: {
            'sonar.projectName': 'sample',
            'sonar.projectKey': 'sample',
            'sonar.host.url': 'http://localhost:7777',
            'sonar.login': '177a4fe55dc2cb35879742e2baa13c7f566564db',
            'sonar.sources': 'src',
            'sonar.tests': 'src',
            'sonar.inclusions': '**',
            'sonar.test.inclusions': 'src/**/*.spec.js,src/**/*.spec.jsx,src/**/*.test.js,src/**/*.test.jsx',
            'sonar.javascript.lcov.reportPaths': 'coverage/lcov.info',
            'sonar.testExecutionReportPaths': 'coverage/cover.xml',
        },
    },
    () => process.exit(),
);
module.exports = sonarqubeScanner;

8> package.json 에 script 추가 및 설정

{
  "scripts": {
    "test": "jest",
    "test:coverage": "jest --coverage",
    "sonar": "node report.js"
  },
...
  "jest": {
    "testResultsProcessor": "jest-sonar-reporter"
  },
...
  "jestSonar": {
    "reportPath": "coverage",
    "reportFile": "cover.xml"
  }
}

9> 테스트 실행

npm run test:coverage
npm run sonar

[Setting | DevOps] jenkins, gitlab, sonarqube 연동설정

소프트웨어 품질관리를 위한 jenkins, gitlab, sonarqube연동설정법을 정리한다.


작성일 : 2022-05-30

1> jenkins 플러그인 설치

Jenkins 관리 > 플러그인 관리


1-1> Gitlab 플러그인 검색하여 설치


1-2> SonarQube Scanner 플러그인 검색하여 설치


2> GitLab AccessToken 생성

Preferences > AccessTokens 메뉴에서 read_repository, write_repository Scope로 토큰을 생성. 생성된 토큰은 잘 저장해 두어야 함 (재확인 불가)


3> SonarQube Token 생성

사용자 아이콘 > My Account > Enter Token Name 입력 > Generate.
생성된 토큰은 잘 저장해 두어야 함 (재확인 불가)


4> Jenkins에 GitLab & SonarQube 토큰 등록

Jenkins 관리 > 시스템 설정

4-1> GitLab 토큰 및 접속정보

‘2>’에서 생성한 토큰 및 접속정보를 입력하고 Test Connection 버튼으로 정상접속 확인

4-2> SonarQube 토큰 및 접속정보

‘3>’에서 생성한 토큰 및 접속정보를 입력하고 Credentials입력시 kind 는 Secret Text로 함
Add 버튼이 동작하지 않는다면 저장 후 다시 들어가보면 동작함


5> Jenkins에 새로운 Item 추가 (Pipeline 유형)


6> Build Trigger 설정

Build Triggers > Build when a change is pushed to GitLab. 체크
고급 클릭 > Secret token > Generate 클릭
생성된 토큰 값은 잘 저장해 두어야함.
하단 저장 버튼 클릭하여 설정값 저장


7> Build Trigger와 GitLab에 생성된 project 연결

Project > Settings > Webhooks에서 아래와 같이 설정
URL : 젠킨스에서 생성한 프로젝트 URL (Server to Server IP + 6>에서 주소확인)
Secret token : 젠킨스에서 생성한 프로젝트 Token (6>에서 생성한 토큰)
Enable SSL verification은 체크해제
Add webhook 버튼을 클릭하면 해당 저장소 푸시 이벤트시 젠킨스가 동작


8> Url is blocked: Requests to the local network are not allowed 에러 발생시

Admin Area > Settings > Network > Outbound requests
Allow requests to the local network from web hooks and services 체크
Save Changes 버튼 클릭


9> GitLab > Jenkins 연동 완료

여기까지 설정이 완료되면 GitLab에 푸시 발생시 Jenkins DevOps 아이템이 실행됨
상세한 설정에 관해서는 별도 작성


10> Sonar Scanner 설정

Jenkins 관리 > Global Tool Configuration
SonarQube Scanner > Add SonarQube Scanner 클릭 > Name 입력 및 Install automatically 체크


11> 소나큐브에 프로젝트 생성 & 프로젝트 루트에 프로퍼티 생성

Manually > Locally 로 생성
빌드환경 / OS 를 선택
설명대로 분석설정 파일을 프로젝트 루트에 생성 (sonar-project.properties)
상세한 설정방법은 메뉴얼 참고 (http://localhost:7777/documentation/analysis/scan/sonarscanner/)

# 생성한 프로젝트명
sonar.projectKey=test
# 소스 경로
sonar.source=.
# 소나큐브 접속 URL
sonar.host.url=http://172.20.0.103:9000
# 생성한 프로젝트 토큰
sonar.login=fff8139f48ca0de6da67c14f638cc1893b8dd2cf

12> Jenkins Item(‘5>’에서 생성)에 Pipline script 작성

git에 소스를 분석하여 소나큐브로 전송

node {
  stage('SCM') {
    ## http://[gitlab 계정]:[gitlab 토큰]@[gitlab 호스트]/[gitlab 프로젝트경로] 
    git 'http://root:H-FRy8GfmD_Hxyw9oCkx@172.20.0.101/opendocs/test.git' 
  }
  stage('SonarQube analysis') {
    def scannerHome = tool 'DevOps';
    withSonarQubeEnv('DevOps') { 
      sh "${scannerHome}/bin/sonar-scanner"
    }
  }
}

[Setting | Docker] Sonarqube설치

도커환경에서 커스터마이징된 소나큐브 설치하는 방법을 정리한다.


작성일 : 2022-05-30

1> 파일 디스크립터 설정

소나큐브는 Elasticsearch 를 사용하므로 많은 파일을 열수 있도록 root 호스트에서 디스크립터를 아래와 같이 설정

sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

2> 마운트 폴더 생성

mkdir /home/opendocs/sonarqube
mkdir /home/opendocs/sonarqube/data
mkdir /home/opendocs/sonarqube/logs
mkdir /home/opendocs/sonarqube/extensions

3> Dockerfile 생성

mkdir /home/opendocs/sonarqube_docker
mkdir /home/opendocs/sonarqube_docker/extensions
vi /home/opendocs/sonarqube_docker/Dockerfile
# Dockerfile
FROM sonarqube:9.4-community
#COPY extensions/sonar-custom-plugin-1.0.jar /opt/sonarqube/extensions/

4> 컨테이너 생성 및 실행

Dockerfile이 위치한 같은 폴더에서 실행해야함

# 이미지 빌드
sudo docker build --tag=sonarqube-custom .

# 네트워크 확인 & opdnet IP 대역확인
sudo docker network ls
# - 없을 경우 생성
sudo docker network create --gateway 172.20.0.1 --subnet 172.20.0.0/21 opdnet
# - 네트워크 확인
sudo docker inspect opdnet
# ------------------------------------------
# IPAM > Config > Gateway와 같은대역 IP 지정해야함
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
# Containers에 사용중인 IP는 중복되지 않아야함
        "Containers": {
            "d4c422b0ceb65ab5f45e2efe2c7da3137b7d66a985f3f222b1b974763529ea7c": {
                "Name": "sample",
                "EndpointID": "e0dc778cf7fe452b45c5bec1737050395c553d764de75f3a88aef565fe00166d",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.20.0.2/16",
                "IPv6Address": ""
            }
        },
# ------------------------------------------

# 컨테이너 설치 및 실행 (고정IP지정)
sudo docker run \
--name sonarqube \
--network opdnet --ip 172.20.0.103 \
-d -p 7777:9000 \
-it \
-v /home/opendocs/sonarqube/data:/opt/sonarqube/data \
-v /home/opendocs/sonarqube/logs:/opt/sonarqube/logs \
-v /home/opendocs/sonarqube/extensions:/opt/sonarqube/extensions \
sonarqube-custom

5> 소나큐브 접속 확인

http://localhost:7777 로 접속하며 초기 관리자 ID / PW는 admin / admin이다.