[CI/CD에 대한 정리]
시스템 팀에서 같이 봐주어서 현재 입학상담앱에 DevOps가 어느 정도 정착되었음.
- 배포 순서
- BitBucket에 push
- Jenkins build 확인
- ArgoCD 에서 배포한 project (consulting-admin, consulting-admin-server 나눠져있음. - front,back 나눈것임) refresh > sync 맞춰줄 것. 소스 수정 시 Restart 해주면 된다.
DevOps 연동 관련
해당 페이지는 후에 있을 연동 작업 이 필요한 경우 작성한다. 우선 서버에 올리기에 앞서 bitbucket, jenkins, habor(아마 사용안함), argo의 경로에 대해 살펴보겠다.
Basic Concept
- BitBucket: 소스코드 형상관리 git으로 사용
- Jenkins : 도커 이미지를 빌드해주는 도구 (이 때 BitBucket에 Dockerfile이 있어야 해당 파일로 이미지를 읽어준다.)
- Horbor : 도커 이미지 레지스트리. (이미지 보관소)
- ArgoCD : 이미지 외부에 배포를 위한 도구
간략한 Flow는 다음과 같다.
- BitBucket에 Dockefile 세팅을 잘 해뒀는지 확인
- Jenkins에 BitBucket이 잘 연결되어 빌드 시 해당 소스들 바탕으로 Docker이미지 빌드되는지 확인
- Jenkins에서 Horbor로 도커 이미지를 push할 수 있다. (execute shell) 에서 쉘 스크립트를 실행시켜 옮겨준다. 명령어 : docker push harbor.jinhaksa.net:30003/k8s-apply/${JOB_NAME}:v$BUILD_NUMBER
- Horbor에 있는 도커 이미지를 배포에 사용할 것이다.
- Docker이미지를 배포하기 위해서는 yaml 파일이 필요하다. BitBucket에 (dockerbuild용)repo를 만들어 올린다. 필요한 yaml 파일은 3가지임. - deploy : 도커 이미지 배포를 위함. - service : 이미지를 외부와 연결하기 위한 전초작업 - ingress : 이미지 외부와 연결해줌
- ArgoCD에 접속하여 위의 (dockerbuild용)BitBucket Repository를 연결해준다.
- App 생성, 웬만한건 그냥 넣어주면 되는데, Namespace 생성을 수일파트장님이 해주셔야하고
- 만들어졌으면 sync 하여 위의 리포지토리의 deploy 파일을 읽어와 horbor의 이미지에 연결해준다.
- 서비스 yaml이 해당 리포지토리 path에 있으면 서비스까지 생성된다. (이 때 서비스 yaml 의 namespace가 사용하는 namespace와 같아야한다.)
- ingress 앱은 따로 만들어줘야한다. path새로 지정하여 설정 , sync
- ingress yaml 파일에 있는 domain 대로 domain이 따지고 완료
- 해당 도메인에 접근하여 접속을 확인한다.
경로
- bitbucket : http://10.1.4.71:7990/dashboard
- jenkins: http://10.1.4.48:8080/login?from=%2F
- ARGO: https://10.1.4.45:30987/login
모두 권한이 필요하며 없을 경우 김수일 파트장님께 문의드려야 한다.
프로세스
- 본인의 Node Project를 도커를 통하여 로컬에서 돌려본 뒤 성공한다.
- bitbucket에 본인의 프로젝트를 올린다.
- Jenkins에 본인의 프로젝트를 올린다. Jenkins의 세팅은 아래와 맞춘다.
- 세팅을 마치고 빌드를 한다.
- 빌드 완료가 될 경우, 다음은 dockerbuild 파일들을 세팅해주어야 한다. 해당 파일 정보는 아래에서 참고하도록 하자.
- ARGO 페이지에 접속한다. AD계정이 아니기에 계정 관련 문의는 수일 파트장님께 드린다.
- dockerbuild 파일까지 적용하였으면 이제 ARGO 사이트로 들어간다. 이곳에서 앱 배포 관련 설정을 할 것이다.
- ARGO New App을 클릭하여 앱을 생성한다. 아래의 ARGO 세팅 정보를 참고한다.
Jenkins 세팅
- General
- Description 입력
- 오래된 빌드 삭제 check
- 보관할 최대갯수: 5
- 소스 코드 관리
- Git check
- Repository URL : 본인의 bitbucket URL 입력 (http://bitbucket.jinhaksa.net:7990/scm/jat/consulting-admin.git)
- Credentials : 본인 프로젝트의 Credentials 입력
- Branches to build
- Branch Specifier : 브랜치 명 입력
- Repository browser : 자동
- 빌드 유발
- Build when a change is pushed to BitBucket check
- Override Repository URL or Path : 본인의 bitbucket URL 입력 (http://bitbucket.jinhaksa.net:7990/scm/jat/consulting-admin.git)
- Build
- Docker command : Create/build image
- Build context folder: $WORKSPACE
- Tag of the resulting docker image: harbor.jinhaksa.net:30003/k8s-apply/${JOB_NAME}:v$BUILD_NUMBER (추후 변경 가능. BUILD NUMBER는 수정하길 바람)
- Filename of dockerfile: Dockerfile
- Execute shell
- Command: docker push harbor.jinhaksa.net:30003/k8s-apply/${JOB_NAME}:v$BUILD_NUMBER (추후 변경 가능. BUILD NUMBER는 수정하길 바람)
Dockerbuild
- 참고 Repository : http://bitbucket.jinhaksa.net:7990/projects/JAT/repos/dockerbuild/browse
- 한 프로젝트에 3개의 파일을 세팅해주어야 한다. deploy, service, ingress 파일이다.
- 단, 하나의 namespace에서 필요한 ingress 파일은 하나이다. 여러 개의 서비스 도메인을 하나의 ingress 파일에 입력한다.
- namespace 설정은 수일 파트장님께 문의하도록 하자.
ARGO 세팅
- General
- Application Name: 앱 이름(consulting-admin)
- Project: k8s-apply-deployment
- SYNC POLICY: Manual
- SOURCE
- Reopsitory URL: 각 프로젝트의 dockerbuild git repository ( http://10.1.4.71:7990/scm/jat/dockerbuild.git )
- Path: Repository의 디렉토리 주소 (consulting-admin)
- DESTINATION
- Cluster URL: https://kubernetes.default.svc
- Namespace: 프로젝트의 Namespace. (consulting)
내부망과 연관하여 (운영 서버 쿠버네티스 확인)
[내부망 접속] jenkins http://172.20.7.118:8080/
harbor 172.20.7.115 harbor.jinhaksa.net https://harbor.jinhaksa.net:30003
argocd https://172.20.7.115:30061/
그리고 Bitbucket에 연결 확인 필요