[Setting | Ubuntu] 설치 및 기본설정

서버용 우분투 OS를 설치하고 기본 설정하는 과정을 정리한다.


작성일 : 2022-06-07

1> iso 파일 다운로드

Ubuntu Server Download > Option 2 – Manual server installation

Download Ubuntu Server 22.04 LTS 클릭하면 iso 파일이 다운로드 됨
(ubuntu-22.04-live-server-amd64.iso)


2> iso로 부팅가능 USB 만들기

https://rufus.ie/ko/ > 다운로드 > Rufus 3.18 (1.3 MB) 클릭하여 다운로드

‘장치’에는 대상 USB경로 지정하고
‘부트선택’에는 선택 버튼을 눌려 다운받은 iso 경로를 지정한 후 시작 누름


3> usb로 부팅하여 설치 시작

캡쳐 불가하여 문서로 정리

1> Try or Install Ubuntu Server 선택
2> Language : English 선택
3> Layout : English (US) 선택
4> Variant : English (US) 선택
5> Done
6> Ubuntu Server 선택
7> Done
8> 네트워크 설정 & IP 할당 확인 또는 수동등록
9> Configure proxy : 설정하지 않음 > Done
10> Use an entire disk 선택
11> Done
12> 계정 & 비밀번호 설정
13> Install OpenSSH server 체크
14> Done
15> Third-party driver 설치할 드라이버 체크
16> Done
17> Featured Server Snaps 체크하지 않음
18> Done
... 설치가 완료된 후 Reboot Now

4> 설치 완료 후 초기 설정

4-1> root 비밀번호를 설정하여 계정을 활성화

sudo passwd root

4-2> 패키지 업그레이드 및 재시작

# root 권한으로 실행
sudo su
# 패키지 인덱스 업데이트
apt update
# 패키지 업그레이드
apt upgrade -y
# 재부팅
reboot

4-3> 기본 패키지 설치

# root 권한으로 실행
sudo su
# 네트워크 제어
apt install net-tools -y
# 압축
apt install unzip -y

4-4> 타임존 설정

# root 권한으로 실행
sudo su
timedatectl set-timezone Asia/Seoul

4-5> 고정 IP 설정

# root 권한으로 실행
sudo su
작성중...
root@opendocs:/etc/netplan# vi /etc/netplan/01-network-manager-all.yaml
network:
  ethernets:
    enp2s0:  # ifconfig에서 확인되는 네트워크명
      addresses:
      - 192.168.123.201/24
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
      routes:
        - to: default
          via: 192.168.123.1
  version: 2

# 설정값 테스트
netplan try
# 설정 적용
netplan apply

[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"
    }
  }
}