728x90
project 생성new project
project 정보 입력
maven 소스가 있을 때 - New filepom.xml 파일 생성source clone(https://gitlab.aws-**.**.com/bm/demo/awesome-shopping-cart-service)URI : https://gitlab.aws-**.**.com/bm/demo/awesome-shopping-cart-service.git
Git Repositories > 마우스 우클릭 Clone a Repository 클릭
URI 입력 > User 정보 입력 후 Next > branch 선택 후 Next > FinishImport Maven Projects..(maven 소스가 있을 때.. 프로젝트 껍데기에 다운받은 소스를 프로젝트에 붙여넣기)
이클립스에 Maven 프로젝트 추가gitlab-ci.yml 파일 생성project overview > Details > new file 클릭
gitlab-ci.yml 파일 작성
.gitlab-ci.yml
variables:
DOCKER_DRIVER: overlay2
DOCKER_HOST: "0.0.0.0:2375"
DOCKER_TLS_CERTDIR: ""
image: docker:latest
services:
- docker:dind
stages:
- build
- deploy
- production
docker-build:
stage: build
script:
- docker login $CI_REGISTRY -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD # 도커 로그인
- docker build --network host -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -f Dockerfile . # 도커 빌드 ( Dockerfile로 spring boot jar 파일 maven 으로 build 설정 )
- docker image tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA $CI_REGISTRY_IMAGE:$TAG # 도커 이미지 설정 ( tag 를 branch/master로 분리하여 push 하기 위한 작업 )
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA # 도커 branch 이미지 push
- docker push $CI_REGISTRY_IMAGE:$TAG # 도커 master 이미지 push
dev:
stage: deploy
image: widerin/eks-helmsman
script:
- (echo $AWS_ACCESS_KEY_ID; echo $AWS_SECRET_ACCESS_KEY; echo $AWS_DEFAULT_REGION; echo "") | aws configure # 쿠버네티스 클러스터 접속을 위한 아마존 configure 설정 ( 입력받는 커서가 4개 나오므로 4번 입력받음 )
- aws eks update-kubeconfig --name skbm-oc-dev # kubeconfig 설정으로 해당 클러스터 접속
- kubectl apply -f k8s/aws/dev/configmap.yml
- mkdir .generated
- sed -e "s/TAG/$CI_COMMIT_SHA/g" k8s/aws/deployment.yml | tee ".generated/deployment.yml" # sed -e 옵션으로 deployment.yml TAG에 <= $CI_COMMIT_SHA 의 값을 넣어서 파일을 생성한다.
- kubectl apply -f .generated/deployment.yml # 생성된 파일을 설치.
- kubectl apply -f k8s/aws/service.yml
only:
- branches
except:
- master
production:
stage: production
image: widerin/eks-helmsman
script:
- (echo $AWS_ACCESS_KEY_ID; echo $AWS_SECRET_ACCESS_KEY; echo $AWS_DEFAULT_REGION; echo "") | aws configure
- aws eks update-kubeconfig --name skbm-pms-dev
- kubectl apply -f k8s/aws/dev/configmap.yml
- mkdir .generated
- sed -e "s/TAG/$TAG/g" k8s/aws/deployment.yml | tee ".generated/deployment.yml"
- kubectl apply -f .generated/deployment.yml
- kubectl apply -f k8s/aws/service.yml
only:
- master
경변수 설정 ( gitlab 환경변수 : https://docs.gitlab.com/ee/ci/variables/ )
도커 클라이언트로(gitlab-ci에서) 원격 도커 데몬에 명령을 내리기 위한 설정
변수 | 변수 설명 | 비고 |
DOCKER_DRIVER | docker backend storage drive 설정 | aufs/overlay/overlay2/overlayFS/devicemapper/zfs/btrfs (참고 : https://www.joinc.co.kr/w/man/12/docker/storage ) |
DOCKER_HOST | docker deamon host 설정 | 0.0.0.0:2375 포트 2375는 암호화되지 않은 포트(plain text로 통신), 2376은 암호화된 포트(TLS이용)다. 기본포트: 2375 |
DOCKER_TLS_CERTDIR | tls의 디렉토리 경로 설정 | "" |
도커 login/build/push를 위한 설정
변수 변수 설명 비고 CI_REGISTRY gitlab의 docker registry gitlab.aws-multiverse.skcc.com:4567 (참고1) CI_REGISTRY_USER gitlab docker registry user pms CI_REGISTRY_PASSWORD gitlab docker registry password pms암호 CI_REGISTRY_IMAGE gitlab docker registry image gitlab.aws-multiverse.skcc.com:4567/bm/demo/awesome-shopping-cart-service CI_COMMIT_SHA docker 이미지 tag를 구분하기 위한 값으로 사용. branch 배포를 위해 tag로 사용.
fea9da17ede082c24335cc79f3f2792423e675e6TAG master와 branch의 docker image:{tag}의 동적 구분을 위한 변수로
소스를 수정하지 않고 사용하기 위해 deployment.yml에 선언하여 사용.setting > CI/CD > Variables 에서 Add Variables 하여 사용. (참고2)
기본값 latest로 설정하였음. master 배포시 사용.
쿠버네티스 클러스터 접속을 위한 설정
변수 | 변수 설명 | 비고 |
AWS_ACCESS_KEY_ID | accessKeyId | setting > CI/CD > Variables 에서 Add Variables 하여 사용. (참고2) |
AWS_SECRET_ACCESS_KEY | secretAccessKey | setting > CI/CD > Variables 에서 Add Variables 하여 사용. (참고2) |
AWS_DEFAULT_REGION | defaultRegion | setting > CI/CD > Variables 에서 Add Variables 하여 사용. (참고2) |
Dockerfile
# select image
FROM maven:3.5-jdk-8
# copy the project files
COPY ./pom.xml ./pom.xml
# build all dependencies for offline use
RUN mvn dependency:go-offline -B
# copy your other files
COPY ./src ./src
# build for release
RUN mvn package
EXPOSE 8080
# set the startup command to run your binary
CMD ["java", "-jar", "./target/awesome-shopping-cart-service-0.0.1-SNAPSHOT.jar"]
ubernetes 적용
namespace docker registry 등록
# 개인저장소의 image를 사용하기 위해서 docker registry를 추가해줘야 사용할 수 있다.
kubectl create secret docker-registry docker-registry-login --docker-server=gitlab.aws-**.**.com:4567 --docker-username=pms --docker-email=이메일 --docker-password="pms암호" --namespace=네임스페이스
namespace.yml
apiVersion: v1
kind: Namespace
metadata:
name: awesome-shopping
deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: awesome-shopping-cart-service
namespace: awesome-shopping # namespace 적용
labels:
app: awesome-shopping-cart-service
spec:
selector:
matchLabels:
app: awesome-shopping-cart-service
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: awesome-shopping-cart-service
spec:
imagePullSecrets:
- name: docker-registry-login # a. 에서 선언한 registry 추가
containers:
- name: awesome-shopping-cart-service
image: gitlab.aws-**.**.com:4567/bm/demo/awesome-shopping-cart-service:TAG # TAG 환경변수 사용
imagePullPolicy: Always
ports:
- containerPort: 8080
envFrom:
- configMapRef:
name: awesome-shopping-cart-service
resources:
requests:
memory: "256Mi"
cpu: "0.25"
limits:
memory: "1Gi"
cpu: "0.5"
service.yml
kind: Service
apiVersion: v1
metadata:
name: awesome-shopping-cart-service
namespace: awesome-shopping
spec:
ports:
- name: http
port: 80
targetPort: 8080
type: ClusterIP
selector:
app: awesome-shopping-cart-service
소스 반영 확인
소스 변경 > add index > commit push
(이미지가 왜 없어졌는지 이해가 안되지만.. 글자라도 옮김니다..)
pipeline run 전에 kubectl get pod -n awesome-shopping 확인
running 확인 ( CI/CD > Pipelines )
job 확인
docker-build 클릭
build job 콘솔 로그 확인
deploy job 콘솔 로그 확인
production 클릭
Docker image push 확인
kubectl get pod -n awesome-shopping 확인
728x90
'클라우드 > gitlab' 카테고리의 다른 글
gitlab pipeline gcp (0) | 2021.09.06 |
---|---|
gitlab 설치 (0) | 2021.09.04 |
Gitlab 서버 접속 (0) | 2021.09.03 |
댓글