CI

BERT·2023년 7월 18일
0

SLAM

목록 보기
6/6

CI

Continuous Integration
'지속적인 통합 및 지속적인 배포'를 의미
git repository에는 코드 통합 전 코드의 동작여부를 테스트
'동작하는 코드'만이 올라가게 하는데에 목적

  • 빌드 가능 여부
    C++ 프로젝트 코드에 컴파일러 / 문법 오류는 없는지
    시스템 라이브러리 및 3rdParty 라이브러리와 함께 빌드가 될 수 있는지
  • 손쉬운 소통이 가능한 코드인지
    코드의 포맷이 맞는지
  • 코드의 안정성
    코드가 목적에 맞게 동작하는지
    코드에 메모리 누수가 없는지
  • 알고리즘의 성능
    알고리즘이 목표했던 정확도를 달성하는지
    알고리즘이 목표했던 속도를 달성하는지

터미널에서 가능한 모든 것을 자동 수행

Github action

.github에서 특정 동작 수행 시 자동 명령어 수행

clang-format : code formatter 자동 수행
코드의 형식이 맞는지 확인

실패 시

코드 형식 변경 후 다시 push

./run-clang-format.py --style file -r -i modules

Branch protection rule

Protect matching branches > Require status checks to pass before merging

CI 서버

Azure 서버 대신 개인용 PC에서 GitHub Actions 돌리기
Adding self-hosted runners
Settings > Actions > Runners > New self-hosted runner
OS 선택 후 명령어 실행

runs-on: self-hosted로 변경

jobs:
  clang-format:
    name: clang-format
    # runs-on: ubuntu-latest
    runs-on: self-hosted

연결 해제 후 다른 저장소와 연결 시

rm .runner
./config.sh remove

CI 서버 응용

init.yml

매일 특정 시각마다 3rdparty를 빌드하게 해주는 cron job 코드
3rdParty 라이브러리 변경 시 매일 CI가 그 라이브러리 변화를 추종 가능

base.dockerfile을 이용해서 slam:base_temp라는 이미지를 생성 후,
성공하면 기존의 slam:base를 삭제하고 새 이미지로 업데이트

base.dockerfile
thirdparty가 사전 빌드된 slam:base 생성

명령어로 base.dockerfile 실행

sudo docker build \
--no-cache \
--progress=tty \
--force-rm \
-f base.dockerfile \
-t slam:base .

컨테이너 실행

docker run \
--name slambase \
-it \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=$DISPLAY \
slam:base /bin/bash

build.yml

build.dockerfile을 이용해서 thirdparty를 담고있는 slam:base를 기점으로
새로운 브랜치의 프로젝트 코드를 빌드하여 <repo명>:<hash명> 이미지 생성

명령어로 build.dockerfile 실행

sudo docker build \
--no-cache \
--progress=tty \
--force-rm \
-f build.dockerfile \
-t <REPO>:<HASH> .

Dev Containers

현재 가동 중인 컨테이너로 접속 후 작업 수행할 것
VSCode Dev Containers 설치 후
Dev Containers: Attach to Running Container...

easy_profiler 확인 가능

./thirdparty/easy_profiler/build/Release/bin/profiler_gui

0개의 댓글