✍ Posted by Immersive Builder Seong
CI/CD 실습 환경 구성하기
이번 실습은 CI/CD를 테스트하기 위한 환경을 구성합니다. CI/CD 워크플로우를 구성하기 위해 Jenkins와 Gogs, 그리고 Docker Hub를 사용할 예정입니다. Jenkins는 개발 프로세스의 단계를 자동화하는 도구로 최신 코드 가져오기, 소스코드 컴파일, 단위/통합 테스트, 아티팩트 패키징, 아티팩트 배포 등의 기능을 제공합니다. Gogs는 셀프 호스티드 소스 저장소 기능을 제공하고, Docker Hub는 컨테이너 이미지를 저장하고 공유하는 기능을 제공합니다.
▶ Jenkins 란 : https://www.jenkins.io/
▶ Gogs 란 : https://gogs.io/docs
▶ Docker Hub 란 : https://docs.docker.com/docker-hub/
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
[출처]
1) CloudNet@, CI/CD Study
'CI·CD' 카테고리의 다른 글
[CI/CD] GitHub Actions CI/CD Workflow (2) | 2024.12.15 |
---|---|
[CI/CD] 도커 기반 어플리케이션 CI/CD 구성하기 (0) | 2024.12.12 |
[CI/CD] Jenkins 기본 사용하기 (1) | 2024.12.08 |
[CI/CD] 컨테이너를 활용하여 어플리케이션 개발하기 (0) | 2024.12.07 |