Setup GitLab CI
GitLab의 CI기능을 사용하여 빌드 및 정적분석을 자동화 하는 방법을 설명한다.
1. 용어 설명
1.1. GitLab
GitLab은 Git 저장소 관리, CI/CD(지속적 통합/지속적 배포), 코드 리뷰, 프로젝트 관리 등을 지원하는 웹 기반 DevOps 플랫폼이다. GitLab은 오픈 소스 버전과 상용 버전을 제공하며, 팀이 협업하여 소프트웨어 개발을 효율적으로 진행할 수 있도록 돕는다.
1.2. CI
Continuous Integration(지속적 통합, CI)은 소프트웨어 개발에서 코드 변경 사항을 자동으로 통합하고 테스트하는 프로세스를 의미한다. CI는 개발자들이 코드를 자주 병합하고, 자동화된 빌드 및 테스트를 통해 코드 품질을 유지하며, 배포를 용이하게 한다.
1.3. Static Analysis
Static Analysis(정적 분석)는 소스 코드를 실행하지 않고 코드의 구조, 스타일, 품질 등을 분석하는 기법이다. 이는 코드의 버그, 보안 취약점, 코드 표준 준수 여부 등을 사전에 검토하여 코드 품질을 향상시키는 데 도움을 준다.
2. GitLab의 CI 기능
3. GitLab CI 설정 방법
Repository에는 CI용 스크립트 대신, 빌드 및 정적분석에 필요한 기본 정보만 저장하고, 정적 분석에 필요한 설정 파일 및 스크립트는 GitLab Runner에서 공통적으로 처리하게 하였다.
개별 Repository에서는 .gitlab-ci.yml 파일과 modgroup-spec.yaml 파일만 작성하면 된다.
3.1. gitlab-ci.yml 파일
-
Git Repository 의 최상위 폴더에 .gitlab-ci.yml 파일을 작성한다. 파일이 없는 경우 전체 파일을 복사한다.
-
기존에 이미 build job이 등록되어 있는 경우 다음과 같이 analysis job을 추가한다.
-
stages:에analysis를 추가한다. -
중간의
analysis:이하 부분을 기존 파일에 복사한다.
-
stages:
- build
- analysis
build:
stage: build
script:
- modkit fetch
- modkit build
artifacts:
paths: [dist]
expire_in: 24 hours
tags: [vs2022+, pwsh]
analysis:
stage: analysis
variables:
GIT_DEPTH: "0"
script:
- modkit fetch
- modkit analyze
artifacts:
when: always
paths: [build/*.txt]
expire_in: 24 hours
allow_failure: true
tags: [vs2022+, pwsh]
3.2. modgroup-spec.yaml 파일
-
Git Repository 의 최상위 폴더에 modgroup-spec.yaml 파일을 작성한다.
-
템플릿을 복사한 후
name:의 값을 프로젝트 명으로 변경한다. -
deliverable과testtool영역에 vcxproj 파일명을 넣는다. -
deps:영역에 의존 모듈을 추가한다.
-
name: DART
role:
deliverable:
- AutoLogCleaner
- DartSmLib
- DcsBindingDataLogger
- GraphLib
- TrendGraphViewer
testtool:
- BindingDataLogViewer
- SharedMemoryViewer
deps:
DcsBindingDataLogger: [DartSmLib]
GraphLib: [DartSmLib]
SharedMemoryViewer: [DartSmLib]
TrendGraphViewer: [DartSmLib, GraphLib]
description:
external:
additional_deps:
build_target:
4. SonarQube 연동 (참고)
GitLab 프로젝트에 analysis를 등록하면 SonarQube에도 신규 프로젝트를 등록해야 한다. 또, modkit에 GitLab 프로젝트와 SonarQube 프로젝트 연결 정보를 등록해야 한다.
4.1. SonarQube에 신규 프로젝트 등록
-
SonarQube에 접속한 후 Projects 메뉴에서 *Create Project*를 클릭한다. 이후 나오는 팝업에서 *From GitLab*을 선택한다.
-
GitLab 프로젝트를 선택하고 웹 페이지 상단에서 *Import*를 클릭한다.
-
Set up project for Clean as You Code 화면이 나오면 *Use the global setting*을 선택한다.
-
페이지 하단의 Create Project 버튼을 클릭한다.
4.2. modkit analyze 명령에 SonarQube Key 등록
-
SonarQube에 접속한 후 Portal 메뉴에서 신규 생성한 Project를 클릭한다.
-
Project Settings 메뉴에서 *Update Key*를 클릭한다.
-
New Key 입력란에 표시된 Key 값을 복사한다.
-
GitLab-Runner에서 ModKit 홈 디렉토리로 이동한다.
-
project_key_db.py 파일을 열고, 아래와 같이 Key를 등록한다.
PROJ_KEY_TABLE = {
.....
"J2403_DART": "2024_J2403_DART_0c4cedf1-969f-497d-9990-71077ac90d72",
.....
}
-
위의 예시에서 "J2403_DART"는 GitLab 프로젝트 이름이며, "0c4cedf1-969f-497d-9990-71077ac90d72"는 SonarQube 프로젝트 Key이다.