- 소프트웨어 개발 과정에서 지속적 통합(Continuous Integration, CI)과 지속적 배포(Continuous Delivery, CD)를 지원하는 오픈소스 자동화 서버입니다. - Jenkins는 Java 프로그래밍 언어로 개발이 되었으며, Java Virtual Machine(JVM) 위에서 실행됩니다. 이를 기반으로 플랫폼 독립성을 활용하여 Windows, Linux, macOS 등 다양한 운영체제에서 동일하게 실행될 수 있다는 장점이 있습니다.
구분
설명
지속적 통합(CI)
개발자들이 코드 변경사항을 주기적으로 머지하고, 자동으로 빌드 및 테스트를 실행하여 소프트웨어의 품질을 유지합니다.
지속적 배포(CD)
빌드된 애플리케이션을 자동으로 다양한 환경(개발, 테스트, 프로덕션)에 배포하여 신속한 피드백과 안정적인 릴리스를 가능하게 합니다.
- 도커 이미지를 만들고 빌드하기 위한 ‘텍스트 파일’을 의미합니다. 이는 컨테이너 이미지를 구성하는데 필요한 모든 단계와 명령을 정의합니다.
1. Dockerfile 수행과정
💡 Dockerfile 수행과정 1. Dockerfile
- 도커파일에서 일련의 명령을 작성하여 이미지를 빌드하는 방법을 지정합니다. 또한 이미지를 지정하고 필요한 패키지를 설치하고 파일을 복사하여 명령을 실행하는 등의 작업을 수행합니다. 2. Dockerfile → (Build) → Docker Image
- 도커 엔진이 도커 파일을 한 줄씩 읽어서 이미지를 빌드합니다 : Dockerfile Layer 3. Docker Image → (Run) → Docker Container
- 빌드된 이미지를 실행하여 도커 컨테이너를 구성합니다.
3) Docker Compose
💡Docker Compose
- 여러 컨테이너가 함께 실행되는 환경에서, 하나의 파일 내에 정의하여 여러 컨테이너를 관리하기 위한 도구를 의미합니다. 즉, 여러 컨테이너를 관리할 때, 단일 명령어를 통해 생성-관리-배포하는 기능을 수행하는 역할을 합니다.
- 기존의 Dockerfile을 통해 단일 컨테이너를 ‘생성-관리-배포’하는 과정에서의 처리과정은 간단하였으나 여러 컨테이너를 일괄 띄우는데 시간 소요가 많이 되기에 이를 사용합니다. - 이러한 컨테이너 관리는 YAML 파일 형식을 사용하여 서비스, 네트워크 및 볼륨 같은 애플리케이션 서비스를 구성할 수 있습니다. 또한 개발, 테스트, 스테이징, 운영 및 CI 워크플로우 환경에서 애플리케이션을 이동하여 배포가 가능하기에 관리가 매우 편리합니다.
1. Dockerfile에 필요한 모든 서비스를 정의합니다.(Define all your required services in a Dockerfile)
- Dockerfile 내에 각 다운로드 할 이미지와 실행할 컨테이너에 대해 정의합니다.
2. Compose 파일(YAML/YML) 내에 각 서비스 간의 관계를 정의합니다.(Define the releationship between each service in a Compose file)
- 이 파일에는 실행할 서비스(컨테이너)들과 그 설정들을 포함하고 있습니다. 사용할 파일 내용은 Docker 이미지, 포트 매핑, 볼륨 마운트, 네트워크 설정, 환경 변수 등이 정의됩니다.
3. Docker Compose를 사용하여 애플리케이션을 시작합니다.(Use Docker Compose to start the application)
- Docker Compose의 실행 명령어 ‘docker-compose up’ 명령어를 수행하여 일괄 서비스를 실행합니다. - 이 명령어를 통해서 Docker Compose 파일에 정의된 모든 서비스를 시작합니다. - 필요한 Docker 이미지가 로컬에 없으면 자동으로 다운로드하고, 컨테이너를 생성하고 시작합니다.
4. Docker Compose의 서비스 상태를 확인합니다.
- Docker Compose의 상태 확인 명령어 ‘docker-compose ps’ 명령어를 수행하여 서비스의 상태를 확인합니다. - 현재 실행 중인 서비스의 상태를 확인할 수 있습니다.
+ 필요에 따라 Docker Compose의 서비스를 중지합니다. - Docker Compose의 중지 명령어 ‘docker-compose stop’ 명령어를 수행하거나 ‘docker-compose down’ 명령어를 수행하여 모든 서비스를 중지하고 컨테이너, 네트워크, 볼륨을 삭제합니다.
4) Docker 환경 구성
1. Dockerfile 구성
💡 Dockerfile 구성
- 해당 환경 파일의 주요 목적은 jenkins/jenkins 이미지를 생성할때 필요한 모든 패키지와 의존성을 이미지 내부에 설치하여 최종적으로 Docker 이미지를 구성하는데 목적이 있습니다.
# Jenkin 이미지를 생성할때 기반이 되는 베이스 이미지 지정
FROM jenkins/jenkins:lts
# 루트 계정으로 전환
USER root
# Jenkin 이미지 내 모든 패키지와 의존성 설치
RUN apt-get update && \\
apt-get install -y \\
ca-certificates \\
curl \\
gnupg \\
lsb-release && \\
mkdir -m 0755 -p /etc/apt/keyrings && \\
curl -fsSL <https://download.docker.com/linux/debian/gpg> | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \\
echo \\
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/debian> \\
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \\
apt-get update && \\
apt-get install -y docker-ce docker-ce-cli containerd.io
# 일반 사용자 계정으로 전환
USER jenkins
- Debian 계열 Linux 배포판(Ubuntu 포함)에서 사용되는 패키지 관리 도구입니다. - 소프트웨어 패키지의 설치, 업데이트, 제거를 관리시스템에 설치된 패키지의 의존성을 자동으로 해결패키지 저장소(repository)에서 최신 패키지 목록을 가져오고 업데이트합니다.
2. Docker Compose 파일 구성
💡 Docker Compose 파일 구성
- 해당 Docker Compose 파일 내에서는 Dockerfile을 참조하여서 컨테이너를 이미지를 구성하고, 컨테이너를 실행하기 위한 목적으로 구성이 되었습니다.
💡 플러그인 선택 - 최초 Jenkin 관리를 위해 두 가지 플러그인 설치 옵션을 제공합니다.
1. Install suggested plugins - Jenkins에서 추천하는 일반적으로 많이 사용되는 플러그인들을 자동으로 설치 - 기본적인 빌드, 배포, 형상관리 등에 필요한 플러그인들이 포함초보자에게 권장되는 옵션
2. Select plugins to install - 필요한 플러그인을 직접 선택하여 설치 - 커스터마이징이 필요한 경우 선택시스템 리소스를 효율적으로 사용하고 싶을 때 권장
2.2. 관리자 계정 등록
2.3. 인스턴스 구성
💡 인스턴스 구성
- Jenkins URL은 다양한 Jenkins 리소스에 대한 절대 링크의 루트 URL을 제공하는 데 사용됩니다. 즉, 이 값은 이메일 알림, PR 상태 업데이트, BUILD_URL빌드 단계에 제공된 환경 변수를 포함한 많은 Jenkins 기능의 적절한 작동에 필요합니다.
- 표시된 제안된 기본값은 아직 저장되지 않았으며 가능한 경우 현재 요청에서 생성됩니다. 가장 좋은 방법은 이 값을 사용자가 사용할 것으로 예상되는 URL로 설정하는 것입니다. 이렇게 하면 링크를 공유하거나 볼 때 혼란을 피할 수 있습니다.