최근 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 폴더가 생긴 것을 확인할 수 있습니다.

$ sudo apt-get install net-tools
위의 명령어를 입력하여 netstat 명령어를 사용합니다. 아래의 명령어를 입력하여 다음과 같이 포트 할당 정보를 확인합니다.
$ sudo netstat -antp

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

Jenkins 에서 이후 구축하게 될 Service Server 에 접근하려면 Publish Over SSH 패키지를 설치해야 합니다.
Jenkins 관리 > 플러그인 관리 버튼을 클릭합니다.
아래와 같이 Available plugins 탭을 클릭한 후, Publish Over SSH 를 검색하여 체크하고, Download now and install after restart 버튼을 클릭해 설치합니다.

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 .

빌드가 완료되면 아래의 명령어로 이미지를 컨테이너에 적재합니다.
$ docker run --name jenfra-server -itd -p 9000:9000 -p 9022:22 service-server:latest
-p 옵션 중 9000번은 서버에게 할당할 포트이고, 9022번 포트는 Jenkins 에서 ssh 로 접근하기 위한 포트입니다. 아래와 같이 9000, 9022 번 포트가 개방된 서버 컨테이너가 올라가 있는 것을 확인할 수 있습니다.

3. Jenkins, Github 연동
1) Jenkins 관리에서 시스템 설정 으로 들어갑니다.
2) 아래로 내려보면, GitHub - GitHub Server 를 설정하는 칸이 있습니다. Name 을 자유롭게 정하고, 아래의 Add 버튼을 클릭합니다.

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

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

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

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

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

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

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

'Back-End > Jenkins' 카테고리의 다른 글
[Jenkins] 젠킨스에서 Permission denied 에러 발생 (0) | 2023.03.03 |
---|---|
[Jenkins] 깃허브에 없는 파일 젠킨스에 수동으로 업로드하는 방법 (0) | 2023.03.03 |
[Jenkins] Jenkins 를 통한 CI/CD 구축 (with Node.js) (0) | 2023.02.18 |
[Jenkins] AWS EC2에 SSH 로 배포하기 (.pem 파일) (0) | 2022.12.30 |
[Jenkins] apt-get 명령어 (0) | 2022.12.22 |