본문 바로가기
CI·CD

[CD/CD] CI/CD 실습 환경 구성하기

by okms1017 2024. 12. 8.
728x90

✍ Posted by Immersive Builder  Seong

 

 

CI/CD 실습 환경 구성하기 

이번 실습은 CI/CD를 테스트하기 위한 환경을 구성합니다. CI/CD 워크플로우를 구성하기 위해 Jenkins와 Gogs, 그리고 Docker Hub를 사용할 예정입니다. Jenkins는 개발 프로세스의 단계를 자동화하는 도구로 최신 코드 가져오기, 소스코드 컴파일, 단위/통합 테스트, 아티팩트 패키징, 아티팩트 배포 등의 기능을 제공합니다. Gogs는 셀프 호스티드 소스 저장소 기능을 제공하고, Docker Hub는 컨테이너 이미지를 저장하고 공유하는 기능을 제공합니다. 

 

▶ Jenkins 란 : https://www.jenkins.io/

 

Jenkins

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

▶ Gogs 란 : https://gogs.io/docs

 

Introduction - Gogs

 

gogs.io

 

▶ Docker Hub 란 : https://docs.docker.com/docker-hub/

 

Docker Hub

Get an overview on Docker Hub to find and share container images

docs.docker.com

 


Jenkins & Gogs 컨테이너 실행 

우선 Docker Compose를 사용하여 Jenkins와 Gogs 2대의 컨테이너를 실행합니다. 각각 호스트의 8080 포트와 3000 포트로 서비스하고, jenkins_home 디렉토리와 gogs-data 디렉토리를 영구 볼륨으로 마운트합니다. 컨테이너가 실행되면 Jenkins와 Gogs의 초기 설정을 진행하도록 하겠습니다. 

 

 


Jenkins 기본 세팅 

Jenkins 홈 디렉토리 하위 initialAdminPassword 파일에서 초기 비밀번호를 확인합니다. 그리고 웹 브라우저를 통해 Jenkins 컨테이너에 접속(http://127.0.0.1:8080)하여 초기 비밀번호를 입력한 후 플러그인 설치를 진행합니다. 

 

 

플러그인 설치가 완료되면 사용할 Jenkins 계정 및 비밀번호를 입력합니다. 그리고 접속할 Jenkins URL은 로컬 PC의 eth0 인터페이스의 IP 주소(http://192.168.35.251:8080/)를 입력합니다. 

 

 

Jenkins 컨테이너에서 컨테이너를 빌드할 때 도커 데몬을 호출합니다. 따라서 Jenkins 컨테이너 내부에서 호스트의 도커 데몬을 사용할 수 있도록 권한을 설정해주어야 합니다. 아래와 같이 Jenkins 컨테이너에 root 계정으로 접속하여 먼저 도커 CLI를 설치를 진행합니다. 그리고 docker 그룹을 생성하고 /var/run/docker.sock 파일의 그룹 소유자를 docker로 변경합니다. 마지막으로 jenkins 계정을 docker 그룹에 포함시키면 Jenkins에서 도커 명령어를 실행할 수 있는 권한을 얻게 됩니다. 

 

-- Docker CE CLI 설치 

$ docker compose exec --privileged -u root jenkins bash

# curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc

# chmod a+r /etc/apt/keyrings/docker.asc

# echo \

"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ tee /etc/apt/sources.list.d/docker.list > /dev/null

# apt-get update && apt install docker-ce-cli curl tree jq -y

 

-- Jenkins 유저 권한 부여 

# groupadd -g 2000 -f docker

# chgrp docker /var/run/docker.sock

# ls -l /var/run/docker.sock

# usermod -aG docker jenkins

# cat /etc/group | grep docker

# exit

 

-- Jenkins 재시작 및 확인 

$ sudo docker compose restart jenkins

$ sudo docker compose exec jenkins docker ps

 

 


Gogs 기본 세팅  

Gogs는 웹 브라우저를 통해 3000 포트로 접속(http://127.0.0.1:3000/install)할 수 있습니다. 초기 설치 페이지가 나오면 데이터베이스 유형은 SQLite3를 선택하고, 어플리케이션 URL은 로컬 PC의 eth0 인터페이스의 IP 주소(http://192.168.35.251:3000/)로 설정합니다. 기본 브랜치는 main으로 변경하고, 사용할 Gogs 계정 및 비밀번호를 입력합니다. 나머지 항목은 그대로 기본값으로 두고 설치를 진행합니다. 

 

 

Gogs 설치가 완료되면 대시보드에 로그인하여 토큰을 발행합니다. 토큰은 설정 메뉴의 Application 탭에서 발행할 수 있습니다. 해당 토큰은 이후 Jenkins 컨테이너에서 Gogs에 접근할 때 인증 과정에 사용되므로 따로 복사해두시기 바랍니다. 

 

 

소스코드를 저장할 프라이빗 저장소를 하나 생성합니다. 저장소명은 dev-app으로 입력하고 저장소 유형은 Private으로 설정합니다. 그리고 .gitignore는 Python으로, License는 Apache License 2.0으로, Readme 파일은 Default로 설정하여 저장소를 생성하겠습니다. 

 

 

이제 Jenkins에서 Gogs 저장소를 사용할 수 있도록 Jenkins 컨테이너 내부에 진입하여 Git 작업을 진행합니다. Git 사용자 계정과 이메일 정보를 입력하고, 브랜치는 main으로 입력합니다. 그리고 git clone 명령어로 리모트 저장소 dev-app을 복제합니다. 이 과정에서 dev-app 저장소에 접근하기 위해 인증 정보를 요구하는데, 이전에 발행한 토큰 값을 입력해주면 됩니다. Jenkins 홈 디렉토리 하위에 dev-app 디렉토리가 생성되고 파일 목록이 보인다면 리모트 저장소와 연동이 잘 된 것입니다. 

 

 

마지막으로 파이썬 코드를 작성하고 커밋/푸시하여 리모트 저장소에 파일이 업로드되는지 확인합니다. dev-app 디렉토리에 Dockerfile, server.py, VERSION 3개의 파일을 작성하고, 리모트 저장소에 파일이 정상적으로 업로드된 것을 확인할 수 있습니다. 

 

 


Docker Hub 기본 세팅 

Jenkins에서 빌드한 컨테이너 이미지를 저장하기 위한 저장소가 필요합니다. Docker Hub에 접속하여 개인 계정(okms1017)으로 로그인하고 프라이빗 저장소를 하나 생성합니다. 저장소명은 dev-app으로 입력하고 저장소 유형은 Private으로 설정하여 생성합니다. 

 

 


마무리 

여기까지 문제없이 진행하였다면 CI/CD 테스트를 진행하기 위한 모든 준비가 완료된 것입니다. 

다음 포스팅에서는 Jenkins를 사용하여 CI/CD 테스트를 진행해보겠습니다. 

 

▶ Jenkins 기본 사용하기 : https://okms1017.tistory.com/113

 

[CI/CD] Jenkins 기본 사용하기

✍ Posted by Immersive Builder  Seong  Jenkins 기본 사용하기 작업 소개 작업은 프로젝트, Job, Item 3가지 유형의 지시 사항을 포함합니다.  Trigger : 작업을 수행하는 시점 작업 수행 태스크가 언제 시

okms1017.tistory.com

 

 


[출처]

1) CloudNet@, CI/CD Study

728x90