본문 바로가기

Back-End/Jenkins

[Jenkins] Docker 활용하여 Jenkins 설치 및 Github 연동

728x90

최근 CI/CD 로 Jenkins 가 많이 사용되고 있습니다. 도커를 사용하지 않고 젠킨스를 우분투에 직접 설치하면 여러가지 환경 설정이 많기 때문에, 도커를 활용하여 간단한 명령어로 젠킨스를 설치하고 서버에 띄울 수 있습니다.

 

1. Jenkins 컨테이너 준비

다음 명령어로 이미지를 컨테이너에 적재합니다.

 

$ docker run --name jenkins-docker -d -p 8080:8080 -p 50000:50000 -v /home/jenkins:/var/jenkins_home -u root jenkins/jenkins:lts

 

다음과 같이 /home 디렉터리에 jenkins 폴더가 생긴 것을 확인할 수 있습니다.

 

/home 디렉터리에 jenkins 폴더 생성

 

$ sudo apt-get install net-tools

 

위의 명령어를 입력하여 netstat 명령어를 사용합니다. 아래의 명령어를 입력하여 다음과 같이 포트 할당 정보를 확인합니다.

 

$ sudo netstat -antp

 

Jenkins 포트 적용

 

 

localhost:8080 으로 접속하면 다음과 같은 화면이 나옵니다. 필자는 이미 터미널에서 homebrew 를 통해 Jenkins 를 설치한 상태입니다.

 

Jenkins 첫 화면

 

 

Jenkins 에서 이후 구축하게 될 Service Server 에 접근하려면 Publish Over SSH 패키지를 설치해야 합니다.

Jenkins 관리 > 플러그인 관리 버튼을 클릭합니다.

 

아래와 같이 Available plugins 탭을 클릭한 후, Publish Over SSH 를 검색하여 체크하고, Download now and install after restart 버튼을 클릭해 설치합니다.

 

Publish Over SSH 설치

 

 

2. Service 서버 컨테이너 준비

서버 컨테이너는 Dockerfile을 통해 생성하도록 합니다. Dockerfile 은 어떠한 베이스 이미지를 기반으로 사용자에게 필요한 것들을 사전에 세팅해 새로운 이미지를 생성할 때 사용하는 명세서라고 보면 됩니다.

 

1) 먼저, Dockerfile 을 관리하기 위한 디렉터리와 파일을 생성합니다.

 

FROM ubuntu:20.04

# default user
ENV USER serve

# packages install
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y sudo vim net-tools ssh openssh-server openjdk-8-jdk-headless

# Access Option
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN sed -i 's/UsePAM yes/#UserPAM yes/g' /etc/ssh/sshd_config

#user add & set
RUN groupadd -g 999 $USER
RUN useradd -m -r -u 999 -g $USER $USER

RUN sed -ri '20a'$USER'    ALL=(ALL) NOPASSWD:ALL' /etc/sudoers

#set root & user passwd
RUN echo 'root:root' | chpasswd
RUN echo $USER':serve123' | chpasswd

# java 환경변수
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

ENTRYPOINT sudo service ssh restart && bash

USER $USER

 

베이스 OS 는 Ubuntu 20.04 를 사용, jdk 와 vim 을 설치했습니다. Jenkins 에서 사용할 사용자 계정과 ssh 접속 키를 관리하기 위한 .ssh 디렉터리도 같이 생성해주었습니다. 프로젝트 배포를 위한 JAVA 환경 변수를 미리 지정해두었습니다.

여기에서 사용자 계정은 serve, 패스워드는 serve123 입니다.

 

이 Dockerfile 을 이용하여 이미지를 빌드해보겠습니다.

 

$ docker build -t service-server .

 

Dockfile 을 이용한 이미지 빌드

 

빌드가 완료되면 아래의 명령어로 이미지를 컨테이너에 적재합니다.

 

$ docker run --name jenfra-server -itd -p 9000:9000 -p 9022:22 service-server:latest

 

-p 옵션 중 9000번은 서버에게 할당할 포트이고, 9022번 포트는 Jenkins 에서 ssh 로 접근하기 위한 포트입니다. 아래와 같이 9000, 9022 번 포트가 개방된 서버 컨테이너가 올라가 있는 것을 확인할 수 있습니다.

 

jenfra-server docker container

 

3. Jenkins, Github 연동

1) Jenkins 관리에서 시스템 설정 으로 들어갑니다.

 

2) 아래로 내려보면, GitHub - GitHub Server 를 설정하는 칸이 있습니다. Name 을 자유롭게 정하고, 아래의 Add 버튼을 클릭합니다.

시스템 설정 > GitHub > GitHub Server 설정

 

3) Github 에서 Settings > Developer settings 에 들어가 새로운 토큰을 발행합니다. 발행한 토큰은 나중에는 다시 확인이 불가하므로 처음 발행할 때 잘 기억해두어야 합니다.

 

Github 에서 토큰 발행

 

3) Kind는 Secret text 로 선택하고, Secret 에 깃허브에서 발행한 토큰값을 입력합니다.

 

시스템 설정 > GitHub > GitHub Server 설정 > Github 토큰 발행 > Add Credentials

 

4) 다음과 같이 Credentials 까지 추가한 후, Test connection 을 눌러 오류가 없음을 확인합니다.

 

시스템 설정 > GitHub > GitHub Server 설정 > Github 토큰 발행 > Add Credentials > Test connection

 

5) 저장 을 눌러 설정을 완료합니다.

 

6) 새로운 Item 을 눌러 아이템을 추가합니다. 프로젝트의 이름을 입력하고, Freestyle Project 를 선택합니다.

 

새로운 Item 추가

 

7) GitHub project 에는 나의 깃허브 URL 을 입력하고, 아래에 내려가서 소스코드 관리에는 Repository 의 URL 을 입력해줍니다. 모두 작성했으면 저장 버튼을 누릅니다.

 

GitHub project URL

 

8) 지금 빌드 를 클릭합니다.

 

지금 빌드 클릭

 

9) 빌드가 완료되면 작업공간에 나의 Repository 의 폴더들이 가져와졌음을 확인할 수 있습니다.

 

728x90