
Jenkins는 소프트웨어 개발 시 지속적 통합 서비스를 제공하는 툴이다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 Git등의 저장소에 업로드함으로써 지속적 통합이 가능하도록 해 준다.
$ mkdir {프로젝트명}
$ cd {프로젝트명}
$ mkdir docker
$ cd docker
$ mkdir jenkins_home
jenkins_home 디렉토리와 그 하위 디렉토리의 소유권을 UID 1000로 변경한다.$ sudo chown -R 1000:1000 ./jenkins_home # 사용자 ID와 그룹 ID를 컨테이너 내부의 Jenkins 사용자와 일치시킨다.
jenkins_home 디렉토리와 그 하위 디렉토리의 권한을 755로 변경한다.$ sudo chmod -R 755 ./jenkins_home
docker.sock 파일의 권한을 660로 변경한다.$ sudo chmod 660 /var/run/docker.sock
# 루트 사용자로 전환하여 필요한 패키지 설치를 진행한다.
USER root
# 필요한 일반 패키지들을 설치한다.
RUN apt-get update && \
apt-get install -y \
curl \
python3 \
python3-venv \
zip \
gnupg \
software-properties-common
# Azul 저장소를 추가하고 OpenJDK 17을 설치한다.
RUN curl -s https://packages.azul.com/keys/zulu.pub | apt-key add - && \
echo "deb [arch=amd64] https://repos.azul.com/zulu/deb stable main" | tee /etc/apt/sources.list.d/zulu.list && \
apt-get update && \
apt-get install -y zulu17-jdk
# Docker 설치를 위한 준비 과정 및 Docker CLI 설치한다.
RUN apt-get update && \
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey && \
apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get install -y docker-ce-cli
# Docker Compose 설치한다.
RUN curl -L "https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
chmod +x /usr/local/bin/docker-compose
# 호스트 Docker 그룹 ID 및 jenkins 사용자 ID 추가한다.
RUN groupadd -g "HOST DOCKER GROUP ID" docker && \
groupmod -g "HOST USER ID" jenkins && \
usermod -u aG docker jenkins
# Python 가상 환경 생성 및 AWS CLI 설치한다.
RUN python3 -m venv /opt/venv && \
/opt/venv/bin/pip install --upgrade pip && \
/opt/venv/bin/pip install awscli
# JAVA_HOME 환경 변수를 설정한다.
ENV JAVA_HOME=/usr/lib/jvm/zulu21-ca
ENV PATH=$JAVA_HOME/bin:/opt/venv/bin:$PATH
# Jenkins 사용자로 다시 전환한다.
USER jenkins
version: '3.9'
services:
dev-jenkins:
build:
context: .
dockerfile: Dockerfile
image: jenkins/jenkins:2.452.2-lts
container_name: prod-jenkins
environment:
TZ: Asia/Seoul
ports:
- 8082:8080 # Jenkins 웹 인터페이스 포트
- 50000:50000 # jenkins agent 통신 포트
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 소켓을 컨테이너에 마운트하여 Jenkins가 호스트의 Docker를 사용할 수 있도록 설정
- ./jenkins_home:/var/jenkins_home # Jenkins workspace 마운트
networks: # 네트워크 설정
- dev # 'dev'라는 사용자 정의 네트워크 연결
networks: # 네트워크 정의
dev:
external: true # 이미 정의된 네트워크 연결
$ sudo docker-compose up -d --build
sudo docker-compose ps



