Education*
Devops
Architecture
F/B End
B.Chain
Basic
Others
CLOSE
Search For:
Search
BY TAGS
linux
HTTP
golang
flutter
java
fintech
개발환경
kubernetes
network
Docker
devops
database
tutorial
cli
분산시스템
www
블록체인
AWS
system admin
bigdata
보안
금융
msa
mysql
redis
Linux command
dns
javascript
CICD
VPC
FILESYSTEM
S3
NGINX
TCP/IP
ZOOKEEPER
NOSQL
IAC
CLOUD
TERRAFORM
logging
IT용어
Kafka
docker-compose
Dart
GitLab을 이용한 CICD Pipeline 구축 - GitLab 설치
Recommanded
Free
YOUTUBE Lecture:
<% selectedImage[1] %>
yundream
2023-09-17
2023-09-17
1335
![GitLab CICD](https://docs.google.com/drawings/d/e/2PACX-1vS2URZagzL9mumYpohC5QOsDVtfjsJCMYQh9SJ4bFWJp7h6bR-sqy69YeMathUvttoxIvlrHa3YgI0-/pub?w=1930&h=892) ## GitLab에 대해서 GitLab은 코드 저장소와 코드의 빌드/배포를 위한 기능을 제공하는 **DevOps** 소프트웨어다. GitLab은 매우 많은 기능을 가진 플랫폼으로 여러 문서로 나누어서 설명할 것이다. 여기에서는 GitLab의 구조를 확인하고 GitLab을 설치해보도록 하겠다. 이 글에서 할 것들은 아래와 같다. 1. GitLab 구성 간단히 살펴보기 2. GitLab 설치하고 로그인하기 3. 테스트 유저 만들기 4. GitLab 프로젝트 만들기 5. 테스트 유저를 이용해서 git 으로 clone, push 해보기 ## GitLab의 주요 기능 GitLab은 기본적으로 GitHub이나 Butbucket과 같은 DevOps 툴들과 그 기능이 비슷한다. 아래 GitLab의 주요 기능을 정리했다. 1. Git 저장소 관리 2. 이슈 추적 및 프로젝트 관리 3. CI(지속적인 통합)/CD(지속적인 배포) 4. 코드 검토 5. 보안 및 규정 준수 6. 타사 도구와의 통합 ## GitLab의 구성 GitLab은 **GitLab Server**와 **GitLab Runner**로 구성된다. ![GitLab 구성](https://docs.google.com/drawings/d/e/2PACX-1vSIlA_xSQVu2J8iONQplTyvy6g0y-LPkPrwyaWErLMv_ECwxGCamB3Rsovz0VugSddpKS7GPh9V60Cz/pub?w=724&h=260) **GitLab Server** GitLab Server는 Git 코드 저장소와 웹 기반의 CICD 관리 콘솔을 제공한다. * 22번 포트를 이용해서 git 작업(clone, pull, push, ...)을 할 수 있다. * 사용자는 브라우저를 이용 80번(혹은 443)포트에 접근해서 사용자관리, 프로젝트 관리, CICD Pipeline 설계, CICD 과정에 대한 모니터링 등 관리 작업을 수행할 수 있다. **GitLab Runner** GitLab Server가 CICD 프로세스를 관리한다면, GitLab Runner는 CICD를 실행하는 일을 한다. GitLab Server에서 CICD를 위한 스크립트를 설정하고 이 **스크립트를 Runner가 실행**한다. 여기에서는 GitLab Runner는 설치하지 않고 GitLab Server만 설치 할 것이다. ## Docker compose로 설치 Docker compose로 설치하는게 가장 쉽고 빠르다. Docker compose로 설치하기 위해서는 아래의 조건을 만족해야 한다. 우분투 리눅스를 기준으로 하겠다. 1. 우분투 리눅스 운영체제에 Docker Engine이 설치되어 있어야 한다. 2. Docker Compose가 설치되어 있어야 한다. 3. 우분투 리눅스 운영체제가 AWS Cloud 등 외부에 설치되어 있다면 SSH로 연결되어 있어야 한다. Docker compose의 설정파일, 로그파일, 데이터(git 코드)를 위해서 아래와 같이 새로운 디렉토리 구조를 만들었다. ```shell $ mkdir gitlab-server $ cd gitlab-server $ mkdir config logs data ``` 이제 gitlab-server 디렉토리에 아래와 같은 내용의 docker-compose.yml 파일을 만들자. ```yaml version: '3.9' services: gitlab: image: 'gitlab/gitlab-ee:latest' container_name: gitlab restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.example.com' gitlab_rails['gitlab_shell_ssh_port'] = 8022 # Add any other gitlab.rb configuration here, each on its own line TZ: 'Asia/Seoul' ports: - '80:80' - '8022:22' volumes: - './config:/etc/gitlab' - './logs:/var/log/gitlab' - './data:/var/opt/gitlab' ``` gitlab은 **Community Editon(gitlab-ce)** 와 **Enterprise Edition(gitlab-ee)** 두 개의 버전이 있다. Enterprise Edition은 무료로 사용하는 경우에도 Community의 모든 기능을 가지고 있으며, 추가적인 기능이 필요할 때 언제든지 유료 전환이 가능하므로 Enterprise Edition으로 설치하도록 하자. 이제 gitlab server를 실행해보자. ```text $ docker-compose up -d ``` docker-compose logs로 GitLab 실행상태를 모니터링 할 수 있다. ``` $ docker-compose logs ``` gitlab server 컨테이너가 잘 실행됐는지 확인해보자. ``` $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 68415c4e0790 gitlab/gitlab-ee:latest "/assets/wrapper" 48 minutes ago Up 47 minutes (health: starting) 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:8022->22/tcp, :::8022->22/tcp gitlab ``` **hostname**을 gitlab.example.com 으로 설정했으니, 테스트를 위해서 /etc/hosts 에 hostname을 추가하자. ```text $ cat /etc/hosts 127.0.0.1 localhost gitlab.example.com ``` ## gitlab 웹 콘솔 로그인 GitLab은 git 저장소, 프로젝트, 사용자, CICD Pipeline 관리를 위한 웹 콘솔을 제공한다. 웹 브라우저를 이용해서 gitlab server에 접근해보자. ![Web Console](https://docs.google.com/drawings/d/e/2PACX-1vQi2JsCyRUvIQrJOPdS6TznU8EG9cx8v_5OppuGhGfZiuFGy0H9GVHsBy6bK6XPrdEHI3_C6ulFwm8O/pub?w=859&h=825) 아래와 같이 기본 아이디/패스워드를 확인해서 로그인해보자. ```shell $ sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password Password: F7N3AI5xaWRQcY5bx2Jd83Ta69/UTyGUjCsP8c3oCyM= ``` 로그인하면 아래와 같이, GitLab 관리자 대시보드가 실행된다. ![GitLab DashBoard](https://docs.google.com/drawings/d/e/2PACX-1vQmcmA208z6bMYXi8GUi1xy_QTbsOx7NgY44-4m130tWDMAxoZtrZ71gkBmj5E3TGi0mQckLHzPXEwg/pub?w=935&h=655) ## Gitlab 사용자 만들기 Git 프로젝트를 수행하려면 사용자가 있어야 할 것이다. 프로젝트 관리자, 개발자, QA 등 다양한 역할의 사용가 있을 건데, 여기에서는 개발자 사용자만 추가를 해보도록 하겠다. 관리자 페이지인 gitlab.example.com/admin 에서 Dashboard > Users 를 클릭한다. ![User 만들기](https://docs.google.com/drawings/d/e/2PACX-1vTHy-P_mDWbTDkzCsAjIfdufrlnGsNf3GqDmPjjNX1tG40pnXrcnFJwJUOihGg2mUGk9Z_pUeAe-pvH/pub?w=940&h=657) 사용자 정보를 설정하자. ![사용자 정보 설정](https://docs.google.com/drawings/d/e/2PACX-1vRNQFRTOgktJwiWlNIiUF5yqqZly4jBs4pc7jijKkxbGZeQwOyPvfQR2ULC5i8KXyddRMA9JR8EQvVB/pub?w=934&h=375) Name, Username, Email 등 필수 정보를 입력하고 Create 버튼을 누르면 새로운 유저가 만들어진다. 정식 설치라면 Email 등으로 초대가 가도록 해서 사용자가 직접 패스워드를 설정하도록 해야 겠으나 지금은 관지라(root) 사용자가 직접 패스워드를 설정하도록 하겠다. **User > yundream**을 선택해서 패스워드를 수동으로 설정한다. ![새로운 패스워드](https://docs.google.com/drawings/d/e/2PACX-1vTI4StBZ0QHGX7Cdi8eGaA4NfDWrqEHyGIfgmoNLWXoscR1fDU35yC4clGgZuUWackiQheRMKdTFT0t/pub?w=880&h=555) 이제 다른 창으로 새로 만든 사용자로 로그인해 보자. ## Git Project 만들기 새로 만든 사용자로 로그인 했다면, git 프로젝트를 만들어보자. ![Git Project](https://docs.google.com/drawings/d/e/2PACX-1vTL0MfcrBTckv2oY05OKLb-vbAM-2tNHuK3kN1i_EZTWLYUbJtJy2_gooJHRR0Tnu8-7tSNf7SvgErA/pub?w=1240&h=837) **Create a project** 를 클릭하면 **Create new project** 페이지로 넘어간다. **Create blan project**를 선택한다. ![Create project](https://docs.google.com/drawings/d/e/2PACX-1vT5YxzFAGP50zw0HIE49KXZTGNJM8CdJQoIy-iOXh5xHBhRmtyuJpYScrZyC9spS2SlxQIGdCwfoykv/pub?w=870&h=644) * Project name: 프로젝트 이름. * Visibility Level: Private, Internal, Public 3가지 레벨 중 하나를 선택할 수 있다. 내부 프로젝트이므로 Private를 선택했다. * Project Configuration: 프로젝트 초기화 옵션이다. README 파일을 포함한 빈 프로젝트를 선택했다. **Create project**를 클릭하면 프로젝트가 만들어진다. ## SSH Key 등록 새로 만든 git project에 push, pull 명령을 수행하기 위해서는 SSH Key를 등록해야 한다. ssh-keygen을 이용해서 새로운 ssh key를 만든다. ```text $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/yundream/.ssh/id_rsa): id_gitlab_example ``` "왼쪽 상단의 사용자 아이콘 클릭 Preferences > SSH Keys > Add new key" 로 id_gitlab_example.pub 를 등록하자. ![ssh key 등록](https://docs.google.com/drawings/d/e/2PACX-1vRkIi1Y3qTwWKd5_nkmkxuLLC-UItI8mfdXH41FbM4N0k89Htv26GnCawT3SXq0Hy48ZTfE4UL1vMts/pub?w=1063&h=401) ![ssh key 등록](https://docs.google.com/drawings/d/e/2PACX-1vTja1D6rHYn7u5fu0KocpVR1QlH-p8HSnVaXgECyfa2okqSsFNKFKIneec4zci7UdekUuup1eebneVv/pub?w=926&h=549) git 저장소에 보다 쉽게 접근하기 위해서 $HOME/.ssh/config 에 아래와 같이 ssh key 설정을 추가했다. ```text HOST gitlab HostName gitlab.example.com IdentityFile ~/.ssh/id_gitlab_example ``` id_gitlab_example의 permission은 400으로 하자. ```shell $ chmod 400 id_gitlab_example ``` ## Git 저장소 테스트 Key를 등록했으니 clone, pull, push가 잘 되는지 테스트해보자. #### clone ![저장소 테스트](https://docs.google.com/drawings/d/e/2PACX-1vSIENRWCeYxNnkgO9UDyU0mSTS7RCONW4rhKums5zXvNFm8iZ3Hq2weF34WMqKCI5FhQeh-uZBA7U9e/pub?w=934&h=630) 프로젝트 페이지로 이동하면 clone 코드를 확인 할 수 있다. git clone을 해보자. 단 ./ssh/config 에 gitlab으로 등록했으니 gitlab.example.com 이 아닌 gitlab 으로 git 작업을 하면 된다. ``` $ git clone ssh://git@gitlab:8022/yundream/hello-world.git 'hello-world'에 복제합니다... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 오브젝트를 받는 중: 100% (3/3), 완료. $ cd hello-world $ ls README.md ``` **push** About.md 파일을 하나 만들어서 push 해보자. ``` $ git add About.md $ git commit -m "Update About.md" $ git push 오브젝트 나열하는 중: 4, 완료. 오브젝트 개수 세는 중: 100% (4/4), 완료. Delta compression using up to 12 threads 오브젝트 압축하는 중: 100% (3/3), 완료. 오브젝트 쓰는 중: 100% (3/3), 477 바이트 | 477.00 KiB/s, 완료. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To ssh://gitlab:8022/yundream/hello-world.git bc7e477..ad359c4 main -> main ``` ## 정리 이렇게 해서 gitlab을 이용해서 git 저장소를 만들고 코드를 push 했다. 다음 문서에서는 gitlab-runner를 설치해서 실제 CICD를 작동켜보겠다.
Recent Posts
SLA 다운타임 계산기
Docker로 GitLab 설치하기
Ubuntu Linux에 NVIDIA 드라이버 설치
Gemini를 이용한 E-commerce 제품 설명서 생성
프롬프트 엔지니어링 101
Llama3와 MySQL을 이용한 Text2SQL
Llama3.1 설치한 김에 Few-Shot 프롬프팅
Llama3.1 설치 및 프롬프트 테스트
신뢰할 수 있는 AI 앱을 설계하기 위한 LLM 개발원칙
LiteLLM을 이용하여 OpenAI API로 멀티 LLM 통합
Archive Posts
Tags
CICD
devops
git
Copyrights © -
Joinc
, All Rights Reserved.
Inherited From -
Yundream
Rebranded By -
Joonphil
Recent Posts
Archive Posts
Tags