회사에서 연습하면서 정리한 내용입니다.
배포 환경을 구성하기전에 필요한 것들
1] docker 설치
2] jdk 설치 (azul/zulu-openjdk:8 image pull)
3] 프로젝트 및 VCS 생성
위의 3가지가 있어야 Jenkins를 통한 자동배포환경 세팅이 가능하다.
참고: https://xggames.tistory.com/22
로컬환경에서 Jenkins를 통한 자바 프로젝트 자동 빌드 & 배포를 설정하여 사용하는 방법에 대해서 소개
1] Jenkins docker image 다운로드
$ docker pull jenkins/jenkins:lts
......
......
......
(완료후)
$ docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
# jenkins/jenkins lts 3f6389c017cc 3 weeks ago 566MB
# azul/zulu-openjdk 8 7c44729920e9 6 weeks ago 249MB
# mysql 5.7.18 44a8e1a5c0b2 3 years ago 407MB
# 정상설치확인
2] Jenkins 이미지를 컨테이너로 실행하기 + 초기비밀번호 확인
# docker run [옵션] [도커 이미지]
$ docker run -d -p 8081:8080 -v /Users/we/wemakeprice/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --name ep-java-jenkins -u root jenkins/jenkins:lts
# -v옵션은 컨테이너와 로컬볼륨을 mount 시켜줄 수 있는 옵션인데 아래와 같은 이유로 사용한다.
# 1. -v /Users/me/test/jenkins:/var/jenkins_home => 나중에 컨테이너가 삭제되고 새로 컨테이너를 생성할 경우에, 세팅(저장)정보를 그대로 가져와서 사용할 수 있도록 마운트시켜두는 것이다
# 2. -v /var/run/docker.sock:/var/run/docker.sock => docker in docker 기술을 사용하기 위해 마운트한다. (docker 컨테이너 내부에서 우리가 설치한 docker daemon에게 명령어를 전달 할 수 있도록 한다)
# 도커 컨테이너 bash쉘 접속
$ docker exec -it test-java-jenkins bash
# ========================================= docker 컨테이너 ====================================
# 초기 비밀번호 확인
$ cat /var/jenkins_home/secrets/initialAdminPassword
# (!) 출력되는 비밀번호를 복사해서 잘 가지고 있을 것
# =========================================================================================
3] Web으로 Jenkins 설치 & 접속하기
(위의 명령어로 사용했다면, localhost 포트번호는 8081)
=> 아까 컨테이너에 접속해서 복사했던 비밀번호를 여기에 넣어준다.
=> Save and Continue 클릭
=> [Now now] - [Start using Jenkins] 클릭
4] Jenkins내 필요 플러그인 설치 및 Global 설정
[Jenkins 관리] - [플러그인 관리] - [설치 가능]탭 에서 검색에 아래의 플래그인 검색후 설치
- Post build task: [빌드 후 조치] 작업가능
- Bitbucket: Bitbucket 저장소 연동 가능 (gitlab 이나 github도 사용이 가능. 예제에서는 Bitbucket을 사용하였다)
- docker-build-step: Jenkins에서 Docker 빌드를 사용하기 위한 플러그인
# 도커 컨테이너에 접속
$ docker exec -it ep-java-jenkins bash
# ========================================= docker 컨테이너 ===============================
# (도커 컨테이너내)에서 아래 명령어를 복사해서 입력
# (내 로컬PC에 떠있는 docker와 연동되며.. 자동화 배포설정시, docker 컨테이너 내에서 docker 명령어를 수행가능하도록 함)
$
apt-get update && \
apt-get -y install apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) \
stable" && \
apt-get update && \
apt-get -y install docker-ce
# 설치 완료후, docker 명령어가 잘 실행되는지 확인
$ docker ps
# Java 확인
# 우리가 사용한 jenkins/jenkins 도커 이미지는 기본적으로 java8이 설치되어있을 것이다.
$ java -version
# JAVA_HOME 확인후 복사
$ echo $JAVA_HOME
# ====================================================================================
- 다시 Jenkins가 떠있는 WEB(localhost:8081)으로 돌아와서.. [Jenkins 관리] - [System Configuration] - [Global Tool Configuration] 으로 이동
- JDK의 JDK installations - ADD JDK 선택
- Name은 아무렇게나 써도됨. Install automatically 체크박스 해제, JAVA_HOME에다가 아까 docker 컨테이너에서 확인한 JAVA_HOME 경로를 입력
- Gradle의 Gradle installations - Add Gradle 선택
- Name은 역시 아무렇게 쓰고.. Install automatically는 체크박스 선택, 아래의 Version은 Gradle 6.8.2로 맞춰준다 (예제를 Gradle 6.8.2)
- 설정이 완료되었으면 아래 Save 클릭
5] Jenkins 빌드 프로젝트 생성
필요한 플러그인 설치 & 프로젝트 배포에 필요한 설정은 끝났고, 이제 배포할 프로젝트를 생성한다.
1) 새로운 Item - 상단 Name작성 - Freestyle project - OK 선택
2) 소스 코드 관리 메뉴에 Git 선택
(!) 프로젝트 코드가 들어가있는 git 저장소 연동이 필요하다.
- Gredentials에 있는 Add - jenkins를 통해 git 계정을 등록
3) Build의 Add build step 클릭하여 Invoke Gradle script 선택
4) Invoke Gradle - Gradle Version에 아까 설정했던 gradle version 선택
(!) 아래 [고급...] 버튼을 클릭하면 설정탭이 더 나오는데, 아래의 그림과 같이 작성진행
(!) [추가] (clean, bootJar) 대신 (clean build -x test) 명령어를 대신하여, test 작동을 생략시킬 수 있다.
5) Invoke Gradle script 아래에 Add build step을 클릭하여 Execute shell 클릭후, 아래의 내용들을 모두 추가.
(!) 순서가 변경되면 안된다. Build 항목 내, 위에서 아래로 순차적으로 실행된다.
# 예제에서는, 도커 이미지 이름은 "ep-springboot"로, 도커 컨테이너 이름은 "ep-web"으로 작성하였다. (변경가능)
# 이미지 Build
$ docker build -t ep-springboot .
# 기존에 동작중인 도커 컨테이너가 있다면 중단 & 삭제
$ docker ps -qa --filter "name=ep-web" | grep -q . && docker stop ep-web && docker rm ep-web || true
# 도커 컨테이너 생성 & 실행
=> mysql 컨테이너가 존재하는 경우.
$ docker run --rm -d --name ep-web -p 8080:8080 --link ep-mysql:ep-mysql ep-springboot
=> mysql 컨테이너가 존재하지 않는 경우.
$ docker run --rm -d --name ep-web -p 8080:8080 ep-springboot
# 불필요한 도커 이미지 삭제
$ docker rmi -f $(docker images -f "dangling=true" -q) || true
=> 설정 완료후, 저장
=> Build Now 클릭
(최초빌드시, gradle 설치 등의 과정이 진행되어서.. 시간이 조금 걸림)
Console Output 확인
정상적으로 배포확인
'Docker & Kubernetes' 카테고리의 다른 글
쿠버네티스(Kubernetes) - 기본적인 사용방법 (0) | 2022.01.29 |
---|---|
쿠버네티스(Kubernetes) - 이해하기 (0) | 2022.01.22 |
인프라 환경 관련 개념정리 (0) | 2022.01.20 |
Docker - 명령어 (0) | 2021.10.20 |
Docker - mac 환경에서 도커 설치 및 컨테이너 생성 (0) | 2020.03.21 |