11월 6일~7일 실습
젠킨스를 활용한 CI/CD 파이프라인 구축 실습 1단계 - 우분투 서버에 젠킨스 설치하기
이번 수업에서는 Jenkins(젠킨스)를 설치하고, 실제 실습을 통해 CI/CD 파이프라인을 구축하는 방법을 학습했습니다. 젠킨스는 오픈 소스 자동화 서버로, 개발팀이 소프트웨어 빌드, 테스트, 배포를 자동화하고, 프로젝트의 지속적 통합(Continuous Integration, CI) 및 지속적 배포(Continuous Delivery, CD)를 쉽게 설정할 수 있도록 도와준다. 특히 팀 협업과 개발 프로세스의 효율성을 높이는 데 큰 도움을 주는 도구이다.
1. Jenkins란?
1-1. Jenkins의 개요
젠킨스는 소프트웨어 개발 프로세스를 자동화하는 오픈 소스 CI/CD 도구다. 다양한 플러그인을 통해 확장 가능하며, 여러 개발 툴과 쉽게 연동된다. 젠킨스를 통해 코드를 빌드하고, 테스트하며, 실제 배포까지의 전 과정을 자동화할 수 있다.
주요 기능
- CI/CD 파이프라인: 지속적 통합 및 배포 자동화
- 플러그인 지원: Git, Docker, Kubernetes 등 다양한 도구와 통합 가능
- 스크립트 기반의 파이프라인: 코드로 파이프라인 정의 (예: Jenkinsfile 사용)
장점
- 확장성: 1800개 이상의 플러그인 제공
- 오픈 소스: 무료 사용 가능
- 광범위한 커뮤니티 지원: 다양한 레퍼런스와 문서 제공
1-2. Jenkins의 작동 원리
젠킨스는 마스터-에이전트 아키텍처로 작동한다. 젠킨스 서버가 마스터 역할을 하며, 빌드 및 테스트를 실행하는 에이전트를 관리한다. 에이전트는 다양한 환경에서 빌드를 실행할 수 있으며, 대규모 프로젝트에서도 효율적인 CI/CD 프로세스를 구축할 수 있다.
2. Jenkins 설치 및 설정
2-1. 설치 방법
(1) 운영체제에 직접 설치하는 경우
1. Java 설치: Jenkins는 Java로 동작하므로, Java 환경이 필요하다.
sudo apt install openjdk-17-jdk
java -version
해당 코드를 이용하여 JRE를 설치하고, 설치가 제대로 되었는지 확인하고자 버전을 확인한다.
2. Jenkins 다운로드: Jenkins 공식 웹사이트에서 설치 파일을 다운로드한다. (https://www.jenkins.io/)
아래 공식 블로그를 참고하여, 우분투 서버에 젠킨스를 설치한다.
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
참고: https://www.jenkins.io/blog/2023/03/27/repository-signing-keys-changing/
3. apt 업데이트
sudo apt update
4. Jenkins 설치
sudo apt install jenkins
(2) 도커나 쿠버네티스(헬름)을 이용해 설치하는 경우
- 운영체제(Mac, Linux, Windows)에 직접 설치하는 방법도 있지만, 도커나 쿠버네티스를 활용할 수도 있다.
- 아래의 코드는 도커에 jenkins를 설치하는 예제 코드이다.
docker run -d --name jenkins --restart=on-failure -p 8080:8080 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Seoul -u root jenkins/jenkins
sudo docker ps
sudo apt install jenkins
2-2. Jenkins 설치 디렉터리
Jenkins는 기본적으로 /var/lib/jenkins 디렉터리에 설치된다. 만약 이 디렉터리를 다른 위치로 변경하고 싶다면 /etc/default/jenkins 파일의 JENKINS_HOME 값을 수정해주면 된다.
Jenkins 주요 파일 및 디렉터리 구성
Jenkins 디렉터리에는 다양한 파일과 폴더들이 포함되어 있어 각각의 기능을 수행한다.
아래는 Jenkins 설치 후 기본적으로 생성되는 주요 파일과 디렉터리에 대한 설명입니다.
- config.xml
- Jenkins의 전체 설정 파일로, Jenkins의 동작을 전반적으로 제어한다.
- 예를 들어 시스템 설정 변경이나 기본적인 보안 설정 등을 포함한다.
- .xml 파일들
- Jenkins의 각종 구성 파일이다. Jenkins의 다양한 사이트 및 서비스 설정을 저장한다.
- userContent 디렉터리
- 이 디렉터리에 저장된 파일은 http://server/userContent/ 경로를 통해 접근할 수 있다.
- 프로젝트 또는 개인 파일을 사용자에게 제공할 때 유용하게 사용된다.
- fingerprints 디렉터리
- 빌드 시 생성된 파일을 추적하고 관리하는 ‘핑거프린트’를 저장하는 디렉터리이다.
- 이 기능을 통해 누가 어떤 파일을 사용했는지 추적할 수 있다.
- nodes 디렉터리
- Jenkins 에이전트 노드의 구성 파일이 저장된다.
- 에이전트를 사용하면 Jenkins의 작업을 여러 서버에서 동시에 수행할 수 있어 성능을 높일 수 있다.
- plugins 디렉터리
- 설치한 플러그인들이 저장되는 곳이다.
- Jenkins의 기능을 확장하거나 다양한 타사 서비스와 통합할 때 플러그인을 설치할 수 있으며, 이 디렉터리에 모든 플러그인이 관리된다.
- secrets 디렉터리
- Jenkins의 보안 관련 설정 파일들이 저장된다.
- 크리덴셜 정보나 시크릿 데이터를 저장하여 Jenkins가 다른 서버에 안전하게 접근할 수 있도록 돕는다.
- workspace 디렉터리
- Jenkins가 빌드할 때 사용하는 작업 디렉터리이다.
- 소스 코드 버전을 관리하거나 빌드할 때 workspace 내에 각각의 작업이 별도 디렉터리로 생성된다.
- JOBNAME이라는 이름의 폴더가 작업별로 생성된다.
- jobs 디렉터리
- Jenkins에서 생성한 각 작업(Job)에 대한 모든 파일과 설정을 저장한다.
- 각 작업(Job)마다 JOBNAME이라는 하위 폴더가 생기며, 이 안에는 해당 작업에 대한 상세 파일들이 저장된다.
[JOBNAME]
├── config.xml # 작업(Job)별 설정 파일
├── latest # 최신 빌드 정보
└── builds # 빌드 기록 디렉터리
└── [BUILD_ID] # 특정 빌드 ID
├── build.xml # 빌드에 대한 상세 정보
├── log # 빌드 로그
└── changelog.xml # 변경 사항 로그
2-3. Jenkins 사용을 위한 설정
(1) 젠킨스 서버 접속
sudo systemctl status jenkins
sudo systemctl start jenkins
sudo ufw status
sudo ufw allow 8080
sudo ufw allow openSSH
(2) (클라우드 환경인 경우) 포트 개방
나는 AWS에서 배포한 Ubuntu 서버를 사용하고 있었기 때문에, 보안그룹에서 :8080 포트를 개방해주어 외부에서도 접속 가능하게 하였다.
(3) 웹 브라우저에서 초기 설정
1. http://localhost:8080에 접속하면 아래와 같은 이미지를 볼 수 있을 것이다.
2. 초기 비밀번호
기본 비밀번호를 확인하는 명령어는 아래와 같다.
운영체제에 설치한 경우는 위의 명령어를, 도커에 설치한 경우는 아래 명령어를 활용하면 된다.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword #운영체제
cat /var/lib/jenkins/secrets/initialAdminPassword #도커
3. 기본 플러그인 설치
4. 관리자 계정 생성
- 계정명, 암호, 이름, 이메일주소, Jenkins URL을 작성해주면 끝이다!
3. Jenkins 활용 팁
- Slack 연동: Slack과 같은 메신저 서비스와 연동하여 빌드 성공/실패 알림을 받을 수 있습니다.
- 다양한 플러그인 활용: SonarQube와 같은 코드 품질 검사 도구를 추가하여 코드 리뷰 프로세스를 자동화할 수 있습니다.
- 에이전트 설정: 프로젝트 규모가 클 경우 별도의 에이전트를 활용하여 병렬 빌드를 구성할 수 있습니다.
- 보안 설정: Jenkins 관리 메뉴에서 보안 설정을 통해 인증 및 권한 관리를 강화할 수 있습니다.