본문 바로가기
클라우드/gitlab

gitlab pipeline aws

by "뭉치" 2021. 9. 5.
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로 사용.
fea9da17ede082c24335cc79f3f2792423e675e6
TAG 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

댓글