EC2에 Docker를 통한 Jenkins 설치

박세건·2024년 9월 2일
0

기술 실습

목록 보기
2/18
post-thumbnail

이전 과정에서 EC2에 Jenkins를 설치했다. 하지만 MSA 구조를 갖는 프로젝트를 진행하고 마이크로 서비스, MySQL 등과 같은 서버들을 Docker를 통해 컨테이너화 시킬 예정이 있어서 Docker를 통해 다시 Jenkins를 설치해보려고 한다.
또한, 젠킨스를 실행하기 위한 포트 설정, 방화벽 설정 등과 같은 추가 설정이 복잡하기 때문에 이러한 환경 설정 과정없이 젠킨스를 설치하고 서버에 띄울 수 있도록 한다.
docker 공식 문서

EC2에 Docker 설치

이전에 Jenkins 설치했던 과정과 비슷하게 진행된다.

  • 해당 저장소의 GPG 키를 시스템에 추가
    • Docker 제공하는 패키지가 신뢰할 수 있는 출처에서 왔는지를 확인하는 데 사용
      sudo apt-get install ca-certificates curl
      sudo install -m 0755 -d /etc/apt/keyrings
      sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
      sudo chmod a+r /etc/apt/keyrings/docker.asc```
  • Docker 저장소 추가
    • APT 패키지 관리자의 설정에 Docker 저장소를 추가
      "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
      $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
      sudo apt-get update```
  • Docker 패키지 설치(최신버전)
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 설치 확인
    sudo docker run hello-world
    • 해당 응답 확인

      도커 설치가 완료되었으면 이제 도커를 통해 Jenkins를 설치해보자


Docker를 통한 Jenkins 설치

  • Jenkins 이미지 다운로드
    docker pull jenkins/jenkins:lts
    lts 버전이란, long term support의 약어로 가장 오랫동안 지원된 버전을 의미 -> 시스템의 안정성 유지 가능

    permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.47/images/create?fromImage=jenkins%2Fjenkins&tag=lts": dial unix /var/run/docker.sock: connect: permission denied

    해당 에러 발생
    현재 Docker 그룹에 내가 속해있지 않아서 발생한 문제

    1. Docker 그룹에 나를 추가
      sudo usermod -aG docker $USER
    2. 변경 사항 적용
      newgrp docker
    3. 권한 문제가 해결되었는지 확인
      docker info
      • 에러가 발생하지 않으면 정상적으로 해결
  • Jenkins 컨테이너 띄우기

    • 이전에 다운로드 받은 Jenkins 이미지를 컨테이너로 띄우는 과정
      sudo docker run -d -p 8080:8080 -v /jenkins:/var/jenkins_home --name jenkins -u root jenkins/jenkins:lts
  • 컨테이너 확인
    docker ps

    • 위 명령어를 통해서 정상적으로 컨테이너가 실행되고 있는지 확인

보다시피 Docker를 통해서 image를 다운받고 컨테이너로 만드는 과정에서 명령어들을 입력하는 과정이 번거롭고 앞으로 이 컨테이너를 계속해서 띄울 때마다 이 과정을 반복하는 과정은 더 번거롭습니다.
때문에, 도커에서는 Docker-Compose 라는 기술을 지원합니다.
원래는 여러 컨테이너들의 실행을 한 번에 관리할 수 있는 도구지만, 하나의 컨테이너만 필요한 상황에서도 유용하게 사용할 수 있다.

Docker-Compose 활용

  • docker-compose 설치
    sudo apt install docker-compose

  • docker-compose.yml 파일 생성

    • 도커를 실행시킬 올바른 경로에서 docker-compose.yml 파일을 생성하고 내용을 작성합니다.
    1. 도커를 실행할 경로로 이동
      ```mkdir ~/my_project
      cd ~/my_project```
    2. docker-compose.yml 파일 생성
      nano docker-compose.yml
    3. 내용 작성
      version: '3'
      services:
      jenkins:
        image: jenkins/jenkins:lts
        ports:
          - "8080:8080"
        volumes:
          - /jenkins:/var/jenkins_home
        user: root  
       Ctrl + O를 눌러 파일을 저장합니다.
       Enter 키를 눌러 파일 이름을 확인합니다.
       Ctrl + X를 눌러 편집기를 종료합니다.
  • Docker Compose 실행
    sudo docker-compose up -d

    왜 -d 옵션을 사용할까?
    sudo docker-compose up -d

    • 백그라운드 실행: -d 옵션은 "detached" 모드로 실행하겠다는 의미입니다. 즉, Docker Compose가 컨테이너를 백그라운드에서 실행하고, 터미널을 즉시 사용할 수 있도록 반환합니다.
    • 로그 출력 없음: 기본적으로 로그 출력이 터미널에 표시되지 않으며, 컨테이너가 실행 중인 상태로 돌아갑니다.

    sudo docker-compose up

    • 포그라운드 실행: 이 명령어는 컨테이너를 포그라운드에서 실행합니다. 즉, 터미널에서 컨테이너의 로그 출력이 실시간으로 표시되며, 해당 프로세스가 종료될 때까지 터미널을 사용할 수 없습니다.
    • 로그 출력: 컨테이너에서 발생하는 로그를 실시간으로 확인할 수 있습니다. 이를 통해 문제를 디버깅하거나 상태를 모니터링하는 데 유용합니다.

    , 후자 방식을 사용하여 컨테이너가 실행된다면 컨테이너가 종료되거나 중지될때까지 터미널을 사용할 수 없게된다

  • Jenkins 컨테이너 확인

    • 정상적으로 EC2에 Jenkins를 띄웠다면 ${EC2 퍼블릭주소}:8080 주소로 접속해서 확인한다

      해당 화면이 뜨면 정상
  • 비밀번호 입력

    • Jenkins에 접속하기 위해서 암호가 필요한데 이는 Docker가 Jenkins를 실행할때 로그로 보여지기 때문에 해당 로그를 확인하면 알 수 있다.
      sudo docker logs jenkins
    *************************************************************
    *************************************************************
    *************************************************************
    
    Jenkins initial setup is required. An admin user has been created and a password generated.
    
    Please use the following password to proceed to installation:
    
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX <- 이 부분
    
    This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
    *************************************************************
    *************************************************************
    *************************************************************
  • Install suggested plugins 선택 & 요구되는 정보 입력

    • 계정 관련 정보는 추후에 사용될 수 있는 기억하기
  • 마지막으로 Jenkins 관리 -> Script Console 에서 타임존 설정하기

    System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Seoul')

Docker를 통한 Jenkins 설치가 완료되었기 때문에 Jenkins와 테스트 프로젝트를 갖고 Jenkins의 웹훅을 사용한 CI/CD를 구축해보자.

profile
멋있는 사람 - 일단 하자

0개의 댓글