개발 환경 세팅
이클립스로 개발환경을 세팅하고 Github로 소스를 Push하는 내용을 다룹니다.
파이프라인 전체 구성 및 흐름
[사전가입] 관련 URL
Github: https://github.com/
DockerHub: https://hub.docker.com/
[별도설치] 관련 URL
Blog: https://kubetm.github.io/k8s/02-beginner/cluster-install-case6/
Youtube: https://www.youtube.com/watch?v=r7TWWRL59aY
1. 개발환경 세팅 및 소스 푸시
1-1) 스프링 프로젝트용 이클립스 설치
윈도우용 자바 설치 사이트 URL
이클립스 STS용 설치 사이트 URL
바로 다운로드 URL
[기본 폴더 생성]
C:\helm-ide
C:\helm-ide\tools
C:\helm-ide\workspace
C:\helm-ide\jdk
C:\helm-ide\git
C:\helm-ide\vagrant
[설치 위치]
C:\helm-ide\tools
[압축해제 후 폴더]
C:\helm-ide\tools\sts-4.12.0.RELEASE
이클립스 세팅 및 소스 다운
[workspace 위치 지정]
C:\helm-ide\workspace
[Eclipse 인코딩 변경]
Preferences > General > Workspace > Text file encoding > UTF-8
1-2) OpenJDK 다운로드 및 적용
다운로드 사이트 URL
바로 다운로드 URL
https://download.java.net/java/ga/jdk11/openjdk-11_windows-x64_bin.zip
[설치 위치]
C:\helm-ide\jdk
[압축해제 후 폴더]
C:\helm-ide\jdk\jdk-11
[Eclipse OpenJDK 지정]
Preferences > Java > Installed JREs > Add > jdk-11 폴더 선택 후 Finish
1-3) 프로젝트 소스 다운 및 실행
프로젝트 소스 다운로드 URL
[Github]
Code > Download ZIP 클릭
[설치 위치]
C:\helm-ide\workspace
[Eclipse 프로젝트 Import]
File > Open Projects from File System or Archive > Directory..
> C:\helm-ide\workspace\gs-rest-service-main\complate 폴더 선택
[rest-service App 실행]
Boot Dashboard > local > rest-service > (Re)start
[API 확인]
http://localhost:8080/greeting
1-4) Github에 App 올리기
- 사전에 Github에 가입되어 있어야 함
[Github에서 Repository 만들기]
Repositories > New > rest-service
[프로젝트 Git 설정]
프로젝트 root 폴더 > team > Share Project.. > Repository [Create..] > [Browse..] > C:\helm-ide\git 폴더 선택
[Eclipse 소스 Push하기]
프로젝트 root 폴더 > team > commit > 파일 Staged Changes 후 Commit
Github Repository(rest-service)에서 [Code]클릭 후 Clone HTTPS 주소 복사 클릭 > Eclipse에서 [Push HEAD..] 클릭 > Preview > Preview
[Github에서 소스 확인]
2. CI/CD Server 세팅 및 빌드
2-1) vagrant로 CI/CD Server 세팅
[설치 위치]
C:\helm-ide\vagrant
[Vagrantfile 파일 다운로드]
curl -O https://kubetm.github.io/yamls/cicd-server/Vagrantfile
[cicd 설치]
vagrant up
[접속 및 설치 확인]
CI/CD Server : 192.168.56.20:22 root/vagrant
kubectl : kubectl version
helm : helm version
git : git version
Jenkins : systemctl status jenkins
2-2) Jenkins 접속 및 설정
Jenkins 접속 URL
http://192.168.56.20:8080/
[비번 설정]
cat /var/lib/jenkins/secrets/initialAdminPassword
[Plugin Install]
Install suggested plugins
[Create First Admin User]
Skip and continue as admin -> Save and Finish -> Start using Jenkins
[admin pw 변경]
Dashboard > admin > Configure > pw변경 (admin)
[JDK 전역 설정]
Dashboard > Jenkins 관리 > Global Tool Configuration > [Add JDK]
Name : jdk-11
Install automatically 체크 해제
JAVA_HOME: /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-1.el7_9.x86_64
[Gradle 전역 설정]
Dashboard > Jenkins 관리 > Global Tool Configuration > [Add Gradle]
Name : gradle-7.3
Install automatically 체크
Version : Gradle 7.3-rc3
save
2-3) 빌드 Job 설정
Dashboard > 새로운 Item > Enter an item name > [rest-service] > Freestyle project > ok
[General]
- Github project 체크
Project url : https://github.com/kubetm/rest-service/
[소스 코드 관리]
- Git 체크
Repositories > Repository URL > https://github.com/kubetm/rest-service.git
Credentials > Add > Add Credentials
Kind : Username with password
Username : kubetm
Password : 비번입력
Credentials : kubetm/***** 선택
[Build]
- Invoke Gradle script > Invoke Gradle > Gradle Version : gradle-7.3
Tasks : clean build
[Advanced..]
Root Build script : ./complete
[저장]
[Build Now]
[생성된 빌드 jar 파일 위치]
/var/lib/jenkins/workspace/rest-service/complete/build/libs
3. 컨테이너 빌드/푸시 및 K8S 배포
3-1) Dockerfile 만들기 및 빌드/푸시
Jenkins의 프로젝트 파일로 이동하여 Dockerfile 생성
cd /var/lib/jenkins/workspace/rest-service
vi Dockerfile
FROM openjdk:11
COPY ./complete/build/libs/rest-service-0.0.1-SNAPSHOT.jar /usr/src/myapp/rest-service.jar
ENTRYPOINT ["java", "-jar", "/usr/src/myapp/rest-service.jar"]
EXPOSE 8080
WORKDIR /usr/src/myapp
Docker빌드 후 DockerHub로 컨테이너 이미지 Push
docker build -t kubetm/rest-service:v1 .
docker images
docker login
docker push kubetm/rest-service:v1
3-2) kubectl 설정
master 서버에서 클러스터 인증 파일 복사
k8s-master> cat /root/.kube/config # 내용 복사하기
cicd-server> cd /root/.kube
cicd-server> vi config # 생성 후 붙여놓고
cicd-server> chmod 600 config # 권한 설정 (내용 업데이트)
cicd-server> kubectl get nodes # 확인
3-3) 리소스 생성 및 배포
vi rest-pod.yaml
vi rest-svc.yaml
Pod
apiVersion: v1
kind: Pod
metadata:
name: rest-service-pod
labels:
app: rest-service
spec:
containers:
- name: rest-service
image: kubetm/rest-service:v1
ports:
- containerPort: 8080
Service
apiVersion: v1
kind: Service
metadata:
name: rest-service-svc
spec:
selector:
app: rest-service
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 30080
배포 및 확인
kubectl apply -f rest-pod.yaml
kubectl apply -f rest-svc.yaml
kubectl get pods
kubectl get svc
APP 접근
http://192.168.56.30:30080/greeting