기타/인프라 구축과정

[Infra] 3. Jenkins 설정 - HelloWorld Project

배발자 2023. 5. 24.
반응형

| /home/ubuntu/jenkins/Dockerfile

FROM jenkins/jenkins:lts

USER root

# Install Docker
RUN apt-get update && \\
    apt-get -y install apt-transport-https \\
        ca-certificates \\
        curl \\
        gnupg2 \\
        zip \\
        unzip \\
        software-properties-common && \\
    . /etc/os-release && \\
    curl -fsSL <https://download.docker.com/linux/${ID}/gpg> > /tmp/dkey; apt-key add /tmp/dkey && \\
    add-apt-repository \\
    "deb [arch=amd64] <https://download.docker.com/linux/${ID}> \\
    $(lsb_release -cs) \\
    stable" && \\
    apt-get update && \\
    apt-get -y install docker-ce

# Install docker-compose
RUN curl -L "<https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$>(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \\
    chmod +x /usr/local/bin/docker-compose && \\
    ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

# Add jenkins user to docker group
RUN usermod -aG docker jenkins

USER jenkins

 

이 Dockerfile은 Jenkins 이미지를 기반으로 Docker와 Docker Compose를 설치하는 Jenkins Docker 이미지를 생성한다. 이 Dockerfile은 다음 단계들을 수행한다.

  1. Jenkins 이미지를 불러온다 Jenkins는 자동화 서버이며, 이 Dockerfile은 Jenkins의 Long Term Support(LTS) 버전 이미지를 사용한다. 이 이미지는 안정성을 위해 선호되는 Jenkins 버전이다.
  2. ROOT 유저로 전환 Docker 이미지의 기본 유저가 ROOT가 아닐 수 있기 때문에, 패키지 설치 등의 작업을 수행하기 위해 ROOT 유저로 전환한다.
  3. Docker를 설치 Docker를 설치하기 위해 필요한 패키지들을 우선 설치하고 Docker의 apt 레포지토리를 추가한 뒤 Docker CE를 설치한다.
  4. Docker Compose 설치 Docker Compose는 여러 Docker 컨테이너를 관리하고 실행하는데 사용되는 도구이다. Docker Compose를 설치하고 실행 권한을 부여한 후, 사용자의 편의를 위해 /usr/bin/docker-compose에 심볼릭 링크를 생성한다.
  5. Jenkins 유저를 Docker 그룹에 추가 Jenkins 유저가 Docker 명령을 실행할 수 있도록 Docker 그룹에 추가한다. 이를 통해 Jenkins 파이프라인 스크립트에서 Docker 명령을 사용할 수 있게 된다.
  6. 다시 Jenkins 유저로 전환 마지막으로 다시 Jenkins 유저로 전환하여, Jenkins 서비스가 해당 유저의 권한으로 실행되게 합니다. 이는 보안을 위한 중요한 단계입니다.

결과적으로 이 Dockerfile은 Jenkins와 Docker, Docker Compose가 모두 설치된 이미지를 생성하며, 이 이미지를 사용해 Jenkins를 실행하면 Jenkins 파이프라인에서 Docker와 Docker Compose 명령을 사용할 수 있게 된다.

 

| /home/ubuntu/jenkins/docker-compose.yml

# docker-compose.yml
version: '3.7'

services:
  jenkins:
    build:
      context: .
    container_name: jenkins
    user: root
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

 

docker-compose.yml 파일은 Docker Compose를 사용하여 Jenkins 서비스를 구성하고 실행하는 방법을 정의한다.

이 파일은 다음과 같은 내용을 포함하고 있다.

 

  1. version: '3.7': 이는 이 파일이 사용하는 Docker Compose 파일의 버전을 나타낸다. '3.7'은 Docker Compose 버전 3.7의 구성 형식을 사용한다는 것을 의미한다.
  2. services: 이 구성에서 실행할 서비스들을 정의한다. 이 경우에는 'jenkins'라는 하나의 서비스만이 정의되어 있다.
  3. jenkins: 'jenkins' 서비스의 구성을 정의한다.
    • build: Jenkins 서비스에 대한 Docker 이미지를 빌드하는 방법을 정의한다. 'context: .'은 Dockerfile이 현재 디렉토리에 위치해 있음을 의미합니다.
    • container_name: 생성되는 컨테이너의 이름을 'jenkins'으로 설정한다.
    • user: 컨테이너 내에서 실행되는 프로세스의 유저를 'root'로 설정한다.
    • ports: 호스트와 컨테이너 사이에 포트 매핑을 설정한다. '8080:8080'은 호스트의 8080번 포트를 컨테이너의 8080번 포트에 연결한다는 것을 의미한다. 이로 인해 사용자는 웹 브라우저에서 '도메인명:8080'으로 접속하여 Jenkins 서비스에 접근할 수 있게 된다.
    • volumes: 호스트와 컨테이너 사이에 볼륨을 공유하도록 설정한다. 이 설정은 두 가지 볼륨을 생성한다:
      • ./jenkins_home:/var/jenkins_home: 이 설정은 호스트의 현재 디렉토리 하위의 'jenkins_home' 디렉토리를 컨테이너의 '/var/jenkins_home' 디렉토리에 연결한다. Jenkins는 '/var/jenkins_home' 디렉토리를 데이터 저장용으로 사용한다. 이 볼륨을 통해 Jenkins의 데이터를 컨테이너 외부에서도 유지하고 접근할 수 있게 된다.
      • /var/run/docker.sock:/var/run/docker.sock: 이 설정은 호스트의 Docker daemon과 컨테이너를 연결한다. 이렇게 하면 컨테이너 내부에서도 호스트의 Docker를 사용할 수 있게 된다. 이는 Jenkins에서 Docker 명령을 실행할 수 있게 해 주는 중요한 설정이다.

 

docker-compose.yml 파일이 존재하는 경로에서 "docker compose up -d" 실행한다. 
이후, "sudo docker logs 컨테이너ID" 명령어를 수행하고 찍힌 로그 암호를 복사해둔다.  
“서버도메인:8080” 으로 접속하여 복사한 암호를 붙여넣는다. 

플러그인들이 자동으로 설치되는데 설치가 실패된다면, Dashboard > Jenkins 관리 > Plugin Manager로 접속한 뒤, 
Available plugins에서 필요한 플러그인을 설치한다.

 

반응형

댓글