포스트

LG CNS 부트캠프 학습일지 57일차

학습 내용

  • Jenkins 사용방법
  • Docker in Docker

개요

이번 실습은 코드를 다루지 않고 GUI 환경에서 설정값을 입력하고 버튼을 이것저것 누르는 것이라서 말로 설명하기가 다소 어렵다.

Jenkins 사용방법

Jenkins는 지속적 통합 (Continuous Integration) 과 지속적 개발 (Continuous Development) 을 위한 소프트웨어이다. 오픈소스 소프트웨어라서 개인이든 기관이든 설치해서 자유롭게 사용할 수 있다. 특강에서 간단하게 실습을 했었는데, 이번에 차근차근 제대로 배웠다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
services:
  jenkins:
    image: jenkins/jenkins:lts-jdk21
    container_name: jenkins
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ./jenkins_home:/var/jenkins_home
    restart: unless-stopped

  tomcat:
    image: tomcat:9.0.120-jre25-temurin
    container_name: tomcat
    ports:
      - 9090:8080
    restart: unless-stopped

톰캣 웹 서버도 사용했다. Jenkins를 원격 깃 저장소에 연결해서 프로젝트를 빌드하고, 생성한 .war 파일을 톰캣 서버로 보내서 자동으로 웹 어플리케이션을 구동한다. 자바 프로젝트를 빌드하기 위해서 JDK와 Maven을 설정해주어야했다.

Docker in Docker

컨테이너 하나를 실행해야 했다. 우분투 기반 이미지였는데, /sys/fs/cgroup 에 대하여 볼륨 매핑을 하거나 Control Group 등 생소한 설정값을 전달해야했다. 강사님 설명을 들어보니 Docker in Docker (DinD) 를 하는 것인데, 컨테이너가 호스트를 조작해서 새로운 다른 컨테이너를 조작하는 것이다.

공식적인 실습 환경은 윈도우 운영체제이기 때문에, Jenkins가 DinD 컨테이너와 통신해서 다른 컨테이너를 조작하는 것이 합리적이다. 하지만 나의 경우에는 이미 리눅스 호스트에서 컨테이너를 실행하고 있기 때문에, DinD를 하는 것보다 호스트의 도커 데몬을 컨테이너에 제공하는 것이 더 좋은 방법인 것 같았다.

아직 이 부분은 본격적으로 실습을 시작한 것이 아니라서 구체적으로 어떻게 해야하는지는 모르겠다. 인공지능에게 물어보면서 얻은 답변을 토대로 이야기하자면, 볼륨 매핑을 통해서 도커 소켓을 컨테이너로 전달해야 한다.

1
2
volumes:
  - /var/run/docker.sock:/var/run/docker.sock

아니면 Jenkins에 도커 관련 플러그인이 있을 것 같은데, 그것을 사용해도 되지 않을까 싶다. 정확한 것은 내일 실습하면서 정리해야겠다.

SSH 연결하기

Jenkins 가 DinD 대신에 리눅스 호스트와 직접 통신하게 만들 수 있었다. Public Over SSH 라는 플러그인이 있었는데, 이걸 사용해서 Jenkins가 빌드한 .war 파일을 다른 서버로 보낼 수 있었다. 리눅스 호스트로 테스트해봤는데, /home/<username> 으로 파일이 전송된 것을 확인할 수 있었다. 설정값을 변경한다면 다른 위치로 보낼 수도 있을 것 같다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

Comments powered by Disqus.