티스토리 뷰

728x90

본인의 상황은 다음과 같았다.

 

Docker Desktop for Windows로 Docker 이용.(Hyper-V 등과 같은 VM이 아닌)

Docker에 Jenkins를 설치했고 이 Jenkins를 통해 Git과 연결하고 훅이 날라오면 Docker에 이미지를 빌드하고 Docker hub로 이미지를 푸시하는 과정이었다.

 

Docker 내의 Jenkins를 이용하고 Jenkins 내에서 Docker를 이용하는 과정이 핵심이니 정확하게 이해하는 것이 중요하다.

 

도커 설정

먼저 도커허브에서 jenkins/jenkins 이미지를 받는다. (official jenkins는 deprecated 되었다.)

 

그다음 GUI를 통해 이미지에서 컨테이너를 몇가지 설정과 함께 바로 실행할 수 있지만 "절대로" 바로 실행해서는 안 된다.

젠킨스와 도커가 서로 다른 레벨에 설치되어 있기 때문에 호스트 OS의 디렉토리와 VM OS의 디렉토리를 맞춰주는 과정이 필요하다.

 

cmd나 파워쉘을 실행시켜서 다음과 같은 명령어로 실행해야한다.

-v(volume) 명령어를 통해 docker와 docker.sock 디렉토리를 맞춰주는 과정이다. 윈도우 도커와 도커 내의 젠킨스를 이용한다면 반드시 반드시 필수 과정이므로 절대로 빼먹지 않을 것.

docker run -d --name jenkins -p 8080:8080 -v /jenkins:/var/jenkins_home -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -u root jenkins/jenkins:lts

 

문제없이 작성되었다면 바로 젠킨스가 실행될 것이다.

 

핵심 설정들

 

1. Jenkins URL을 설정하는 과정에서 외부에서 접속이 가능한 URL을 작성해야한다.

 

외부에서 접속할 수 없는 URL을 작성해도 되지만 깃허브의 webhook을 받거나 도커허브에 push를 하는 과정이 불가능할 것이다.

 

접속 가능한 IP는 AWS를 이용하거나 공유기의 포트포워딩을 통해 본인의 서버 포트를 열어두어 사용할 수 있다.

e.g (http://${외부 접속이 가능한 본인의 IP}:8080/)

 

 

2. Docker plugin과 Docker Pipeline 플러그인을 설치한다.

 

여기서 이 플러그인들은 Docker를 설치해주는 것이 아닌 Host OS의 Docker를 사용할 수 있게 하는 것임을 명심해야 한다.

 

3. 당장의 빌드를 위해서 이 이상의 기능은 필요없다.

 

이 부분이 많이 헷갈렸는데 Docker clouds 설정이나 Git관련 설정은 Jenkins 글로벌 설정 등에서 따로 해줄 필요가 없다.

Webhook을 날리기 위한 Github의 세팅은 Github에서 따로 해주는 것이다.

 

Freestyle 작성

General

 

Github project 체크 후

Project url에 https://github.com/${본인 깃허브 ID}/${본인 깃허브 리포지토리}/

 

소스 코드 관리

 

Git 선택 - Repositories

Repository URL에 https://github.com/${본인 깃허브 ID}/${본인 깃허브 리포지토리}.git 

 

Credentials 작성할 필요 없음.

 

Branches to build는 본인의 선택에 따라서 설정.

 

빌드 유발

 

GitHub hook trigger for GITScm polling 체크

push가 되면 자동으로 웹훅이 날라오는 설정은 Github 쪽에서 해주는 것이다.

 

빌드 환경

 

원하는 설정에 따라 체크하기. 필수 요소는 없다.

 

Build

 

가장 중요한 파트이다.

 

Invoke Gradle script 생성

Use Gradle Wrapper 선택

Make gradlew executable 체크

Wrapper location에 ${workspace}라고 작성. ${}까지 전부 작성해야 한다.

${workspace}를 작성하지 않으면 docker에서 빌드 결과물의 위치를 알지 못하는 에러가 발생한다.

 

 

Execute shell 생성

 

docker build . -t ${본인 도커 허브 ID}/${본인 도커 허브 리포지토리 네임}

 

docker login -u ${도커 허브 ID} -p ${도커 허브 비밀번호} docker.io
docker push ${본인 도커 허브 ID}/${본인 도커 허브 리포지토리 네임}

 


위와 같이 설정하고 빌드하면 기본적인 세팅이 되어있다는 가정하에 문제없이 gradle 빌드 이후 도커 이미지가 빌드되고 도커허브로 이미지 푸시가 완료될 것이다.

 

 

Dockerfile의 내용은 다음과 같다.

위치는 프로젝트의 root (src와 같은 레벨)에 위치해야 하며 확장자가 없고 대문자 D와 소문자 f로 작성해야한다.

 

FROM openjdk:11
LABEL MAINTAINER=""

ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

 

 


직접 공부하며 하나 하나 알아낼 때는 자료도 거의 안 나오고 이해하기 어려웠는데 막상 정리하고 나니 너무 간단해보인다..


문제점 1. docker login -u ${도커 허브 ID} -p ${도커 허브 비밀번호} docker.io 과정에서 비밀번호가 평문으로 들어가고 평문으로 저장된다. 

 

해결 방법. 젠킨스 관리 - Manage Credentials - Add Credentials로 들어가서

Secret text 선택 후 비밀번호와 ID를 적절하게 설정 후

 

만들어둔 젠킨스 프로젝트의 구성으로 들어감빌드 환경 - Use secret text(s) or file(s) 선택 - Add - Secret text - Variable 적절하게 기입(주의할 것은 '-'를 기입하면 안 된다. 쉘 스크립트에서 에러 발생) - Credentials에서 기입해둔 비밀번호 선택

 

docker login -u ${도커 허브 ID} -p ${도커 허브 비밀번호} docker.io의 ${도커 허브 비밀번호}부분을 $Variable 로 변경한다.

예를 들어 본인의 경우 Variable로 DOCKERHUB_PASSWORD라고 입력했으며 

${도커 허브 비밀번호}를 $DOCKERHUB_PASSWORD로 변경.

 

'-'로 구분자를 사용하면 안 되는 점과 {}가 들어가지 않는다는 것을 명심할것.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함