https://pulpul8282.tistory.com/288
이전의 포스팅 에서는 단순히 도커 젠킨스에 빌드 파일을 생성하는 것이였지만.
지금 할 포스팅은 생성된 빌드 파일을 이미지화 하여 도커 컨테이너로 띄우는 것까지 하겠다.
1. 자신의 프로젝트의 모듈별 Dockerfile 생성
모듈별로 Dockerfile을 갖고있다.
applications-app-http-db 모듈의 도커파일 예제
**Dockerfile**
FROM openjdk:17-jdk
# JAR_FILE 변수 정의 -> 기본적으로 jar file이 2개이기 때문에 이름을 특정해야함
ARG JAR_FILE1=applications/app-http-db/build/libs/app-http-db-1.0.jar
# JAR 파일 메인 디렉토리에 복사
COPY ${JAR_FILE1} http-to-db.jar
EXPOSE 8180
EXPOSE 9191
# 시스템 진입점 정의
ENTRYPOINT ["java","-jar","http-to-db.jar"]
1.자신의 모듈이 build 되는 위치 지정
ARG JAR_FILE1=applications/app-http-db/build/libs/app-http-db-1.0.jar
2.도커에서 빌드시 사용될 모듈 이름 지정
COPY ${JAR_FILE1} http-to-db.jar
3.자신이 사용중인 포트 지정
EXPOSE 8180 EXPOSE 9191
4.모듈 실행 명령어 입력, `http-to-db.jar` 이름은 2번에서 지정한 이름과 같아야 한다.
ENTRYPOINT ["java","-jar","http-to-db.jar"]
여기까지 끝났다면 GITLAB에 PUSH - MERGE 하자
2. 젠킨스 설정
Dashboard - 자신의 작업공간 - Configuration -Build Steps
Add build step 클릭 - Execute shell 생성
2-1. Execute shell 생성
쉘 적용후 Apply - 저장
**Execute shell**
#도커 이미지 파일로 빌드
docker build -f applications/app-http-db/Dockerfile -t yoonjuyoung/http-to-db:1.0 .
#기존에 도커 컨테이너로 실행되고 있는 프로세스 종료, 삭제, 제거
docker ps -q --filter "name=http-to-db" | grep -q . && docker stop http-to-db && docker rm http-to-db | true
#새롭게 빌드한 도커 이미지 파일 실행
docker run -d --name=http-to-db -P yoonjuyoung/http-to-db:1.0
#도커 이미지들 중 사용되지 않는 불필요한 이미지 삭제
docker rmi -f $(docker images -f "dangling=true" -q) || true
2-2. 젠킨스에서 다시 빌드
지금빌드 - 계획된 빌드
2-3. 도커에서 확인
도커에서 실행중인 컨테이너 확인 명령어
docker ps
2-4. 만약에 2-2 젠킨스에서 실패했을 경우
현재 쉘은 도커 컨테이너가 실행중이라는 가정하에 작성되었기 때문에 초반에 빌드하여 배포하였을경우
당연히 실행중인 컨테이너는 없기 때문에 쉘 명령어가 실패되는것이다.
그러나
우리가 빌드한 이미지는 도커에 남아 있을것이다.
**2-4-1.도커 이미지 확인**
docker images
우리가 만든 `yoonjuyoung/http-to-db:1.0` 의 이미지가 확인된다.
2-4-2.이미지 수동실행
확인됬으면 이미지를 수동으로 실행시켜주자.
docker run -d --name=http-to-db -P yoonjuyoung/http-to-db:1.0
-d: 백그라운드 실행
-name: 도커에서 실행될 컨테이너 이름
-P: Dockerfile에서 EXPOSE로 선언한 port들을 자동으로 매핑시켜줌
3.도커에서 재확인
docker ps
`확인이 되면 다시한번 젠킨스에서 계획된 빌드 눌러 초록색 불이 켜지는지 확인하자`
참고 래퍼런스
https://ttl-blog.tistory.com/761
'나의 주니어 개발 일기 > CICD' 카테고리의 다른 글
GitLab & Jenkins CI/CI 쉽게 구축하기(1) (0) | 2023.01.20 |
---|