본문 바로가기
개발자 전향 프로젝트

Docker Gitlab CI/CD 에 대해 알아보기 (HTTP)

by 샘오리 2024. 7. 9.
728x90
반응형

CI/CD는

지속적 통합(Continuous Integration) 및

지속적 배포(Continuous Deployment)를 의미하며,

소프트웨어 개발 라이프사이클을 간소화하고 가속화하는 것을 목표로 한다.

 

쉽게 말해

개인이 작업한 내용을 커밋하고 푸쉬하면

자동으로 빌드하는 것이 CI, 지속적 통합이고

빌드한 것을 자동으로 배포하면 CD, 지속적 배포이다.

 

라이프사이클을 간소화하고 가속화한다는 것은

수작업으로 진행되는 일련의 프로세스가 반복적으로 일어나야 하다보니

귀찮음이 생긴 개발자들이 이 프로세스를 자동화 시킨 것을 거창하게 얘기한 것이다.

그리고 사실 큰 개념은 여러 명령어를 모아서 실행시킨 Shell 파일과 크게 다를 바 없다.

 

허나 늘 그렇듯 처음 구축이 어려운 법이기 때문에

이를 최대한 쉽고 따라하기 쉽게 설명하려고 한다.

 

내 테스트 환경은 아래와 같다.

 

OS: Windows

Gitlab 실행/구동 환경: Local Docker Container

Gitlab Runner 실행/구동 환경: Local Docker Container

 

쉽게 Gitlab과 Runner Docker Compose로 구축하는 것이다.

 

구축에 들어가기 전에 도커 사용법, 그리고 깃랩과 깃랩 러너가 대충 뭔지 알아야 이해가 쉬울 것이다.

 

도커는 아래 포스팅을 해놓은적 있으니 참고하면 되고https://samori.tistory.com/88

 

도커 & 쿠버네티스 이해하기

도커(Docker)란? 도커를 한 문장으로 요약하면 개발자가 만든 코드가 어느 환경에서도 작동할 수 있게 도와주는 오픈소스이다. 그런데 왜 굳이 Docker일까? 영어로 된 대부분의 기술 용어들은 이름

samori.tistory.com

 

깃랩과 깃랩 러너는 다음과 같다.

 

깃랩은 깃헙과 마찬가지로 Git을 사용하는 형상관리툴인데

소스코드를 올리는 목적자체가 기업에 조금 더 포커스가 맞춰져 있어서

보안관련된 설정이 더 많이 내장되어 있고 특정 미션에 포커스를 맞춘 느낌이 있다. (더 비싸다)

 

깃랩 러너란

깃랩에서 제공하는 오픈소스 프로젝트로, GitLab CI/CD를 위한 실행기이다.

깃랩 러너를 이용하면 CI/CD 파이프라인에서 빌드, 테스트, 배포 등 다양한 작업을 자동화할 수 있다.

 

한마디로 CI/CD 돌리려면 필수인 녀석인데 하필 깃랩에 포함되어 있지 않고 독립적인 녀석이라

따로 설치해줘야 한다. 왜 독립적이냐 물어본다면 그게 더 유연하기 때문이라고 답한다.

예컨데 단순히 한군데서 테스트하고 빌드하고 배포하는 프로세스가 아니라 여기저기서

다양한 작업을 해야 한다면 여러 환경에서 러너를 설치해두고 그 러너에 이름을 붙인뒤 

각 러너가 깃랩 CI/CD에서 한꺼번에 돌게 할 수 있다는 것이다. 

 

설치법은 아래와 같다.

CI 설정법

1. docker-compose.yml 작성
version: '4.5'
services:

  # GITLAB
  gitlab-web-http:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    container_name: gitlab-web-http
    hostname: 'gitlab-web-http'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://<HOST PC IP 입력>'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
    ports:
      - "80:80"
      - "443:443"
      - "2222:22"
    volumes:
      - './gitlab/config:/etc/gitlab'
      - './gitlab/logs:/var/log/gitlab'
      - './gitlab/data:/var/opt/gitlab'
    networks:
      - gitlab-network

  # RUNNER
  gitlab-runner-http1:
    image: gitlab/gitlab-runner:alpine
    restart: always
    container_name: gitlab-runner-http1
    hostname: gitlab-runner-http1
    depends_on:
      - gitlab-web-http
    volumes:
     - ./config/gitlab-runner:/etc/gitlab-runner
     - /var/run/docker.sock:/var/run/docker.sock
    networks:
        - gitlab-network

networks:
  gitlab-network:
    name: gitlab-network
2. docker compose up -d

3. GitLab 접속 (compose file에 적어놓은 external_url로 접속을 해야함)
*127.0.0.1이나 기타 host pc를 바라보는 다른 ip를 적어도 접속은 가능하나 메뉴를 넘어갈 때 
자동으로 external_url로 되기 때문에 중간에 변경내역이 사라질 수 있음)

(id:root, pw: ./gitLab/config/initial_root_password 참조  )

4. 프로젝트 생성 및 Settings/CICD/Runners 에서 runner 생성 및 토큰 복사
5. gitlab-runner-http1 터미널 진입 후
gitlab-runner register  \
--url external_url 주소 \
--token 토큰정보 \

executor는 docker, 이미지는 docker:latest
로 등록을 한뒤

실행을 시켜줘야 한다. gitlab-runner run

6. GitLab Settings/CICD/Runners 에서 Runner 가 등록됐는지 확인 하고

7. gitlab-ci.yml 스크립트를 작성한 뒤 루트 경로에 커밋/푸시

예시:
stages:
  - test1
  - test2

test1:
  stage: test1
  tags:
    - 생성 및 등록한 러너의 이름
  script:
    - echo "Running echo test1 with tag:http-test"
test2:
  stage: test2
  tags:
    - 생성 및 등록한 러너의 이름
  script:
    - echo "Running echo test2 with tag:http-test"


8. Pipeline가서 실행됐는지 확인

 

잘 실행되었다면 아래와 같이 뜰 것이다.

 

 

728x90
반응형