[AWS] 07. EC2 Docker Jenkins 설치

나도 가보자·2024년 7월 20일
post-thumbnail

💡 Jenkins란?

Jenkins는 소프트웨어 개발 시 지속적 통합 서비스를 제공하는 툴이다. 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 Git등의 저장소에 업로드함으로써 지속적 통합이 가능하도록 해 준다.


💻 EC2 Docker-Compose Jenkins 설치

1) 프로젝트 초기 환경 설정

$ mkdir {프로젝트명}
$ cd {프로젝트명}
$ mkdir docker
$ cd docker
$ mkdir jenkins_home

2) 호스트 및 컨테이너 내부 권한 동기화

  • 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
  • 위 과정들은 젠킨스 컨테이너 내부에서 호스트의 파일 시스템에 접근하기 위한 권한 변경 설정이다.

3) Jenkins for Dockerfile 작성

# 루트 사용자로 전환하여 필요한 패키지 설치를 진행한다.
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

4) Jenkins for docker-compose.yml 작성

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 # 이미 정의된 네트워크 연결

5) Jenkins for docker-compose build

  • 빌드 및 백그라운드 실행
$ sudo docker-compose up -d --build
  • 실행 상태 확인
sudo docker-compose ps


6) EC2 보안 그룹 인바운드 규칙

  • 기본 보압 그룹 혹은 커스텀 보안 그룹 선택
  • 인바운드 규칙 편집 선택
  • 인바운드 규칙 추가
profile
Developer CodeJesterND

0개의 댓글