DevOps/Tutorial

    build server 부터 배포까지 - 5. GKE Spring Redis 배포 - Local, CI Server, Deploy Server에서 Redis와 연동

    이번엔 로그인 기능에서 사용하는 토큰을 올리기 위해 redis를 올려보고자 한다. 1. Local /application.properties spring.redis.host=127.0.0.1 spring.redis.port=6379 이걸 추가한다. /local/docker-compose.yml version: "3" services: mysql: image: mysql:5.6 environment: MYSQL_DATABASE: bizschema MYSQL_ROOT_PASSWORD: rootpw MYSQL_USER: devroot MYSQL_PASSWORD: devpw LANG: C.UTF-8 volumes: - local-mysqlvol:/var/lib/mysql ports: - 3306:3306 com..

    build server 부터 배포까지 - 4. GKE Spring MySQL 배포 - Local, CI Server, Deploy Server에서 MySQL 연동

    이전 글에서는 deploy server인 GKE에서 MySQL의 IP를 할당받아서 사용했다. 그러나, 이 방법을 사용하면 test할 때 실 서버의 db를 이용하기 때문에 상당히 위험한 방식이라 생각한다. 이를 보완하기 위해 다른 방법을 이용하고자 한다. 지금 구축되어있는 서버는 크게 3가지이다. 로컬, CI 서버, Deploy 서버. 먼저 로컬과 CI 서버에 추가적으로 docker 위에 mysql을 올리고 임의로 id, pw를 지정한다. 그러면 로컬에서 빌드할 때는 로컬에 있는 docker의 mysql을, CI 서버에서 빌드할 때는 CI 서버의 docker에 있는 mysql을 참조할 것이다. 마지막으로 GKE는 deploy.yml 파일을 작성했을 때 만든, 실제 서비스 DB mysql을 참조하게 될 것이..

    build server 부터 배포까지 - 3. GKE Spring MySQL 배포 - MySQL 배포 및 Mysql + Spring 배포

    먼저, gcp terminal에서 편집기를 이용할 수 있다! 어제 vs code로 연결할라고 아득바득 할 필요가 없었다... 1. mysql 배포 GKE 기반 kubenertes에서 mysql을 수행하기 위해서는 pvc 생성, deploy 및 service가 필요하다. /home/hyelie/k8s-test/mysql-pvc.yml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi GKE에서 1Gi의 pvc를 만들겠다는 것이다. 그냥 kubernetes만 사용하낟면 pvc, pv도 생성해야 하지만 gke이기 때..

    build server 부터 배포까지 - 2. GKE Spring MySQL 배포 - GKE 클러스터 생성 및 spring 예제 배포

    내 프로젝트에서 FE가 필요없고 BE와 DB만 있으면 되기 때문에 이에 대한 kubernetes 환경을 구축하고자 한다. 1. GKE 클러스터 생성 공부하는 게 목적이니까, 표준으로 일단 해보자. 기본 사항에선 딱히 건들 게 없고, 수정할 거라면 default-pool - 노드 - 머신 계열 정도만 골라주면 될 것이다.그러면 클러스터 하나가 생성된다. VM instance 목록에 들어가 보면 3개의 vm이(노드들) 생성되어 있다. 이후 우상단의 gcloud shell을 실행시킨다. 나는 지금 활성화되어 있어서 꺼져 있다. https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl?hl=ko 그러면 master node..

    build server 부터 배포까지 - 1. GCP + Docker + Jenkins + Gitlab + JUnit + SonarQube + GCR image push

    그럼 이제 GCP 위에 docker를 올리고, docker 위에 jenkins, sonarqube를 올리고 gitlab webhook으로 pull받아서 build 후 GCR push까지, 한 번에 다뤄보고자 한다. 자세한 모든 화면은 이전 포스팅들을 참고. *** 지금 이 글대로 구성하면, ci server에서 jenkins data가 저장될 곳이 없어 재시작하면 전부 날아간다. 이를 고려해서, volume을 추가하는 것을 권장한다. 1. docker-compose로 GCR 위에 docker, docker 위에 jenkins, sonarqube 설치 /home/hyelie/compose/docker-compose.yml version: "3" services: jenkins: container_name:..

    EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 6. 수정사항, ECR push

    1. 수정사항 원래는 docker 안에 jenkins가 있고, jenkins에서 docker로 접속하는 방식을 택했다. 근데 ECR에 push하기 위해서는 jenkins에서 docker를 실행해야 한다. 그래서 docker-compose.yml 파일을 조금 수정한다. /home/ec2-user/compose/docker-compose.yml version: "3" services: jenkins: container_name: jenkins image: jenkins/jenkins:lts user: root ports: - "8081:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock - /home/ec2-user/compose/jenkins:/var/..

    EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 5. jenkins pipeline - JUnit + SonarQube

    앞에서는 build step을 이용해서 추가했다. 그러나 jenkins에서 이걸 언제 하나하나 다 만지고 있나. 프로그래머처럼 code를 이용해서 각각의 step을 design할 수 있으며 - 이것이 jenkins pipeline이다. MSA는 빠른 배포가 목적이기 때문에 JUnit, SonarQube 등의 품질검사 pipeline을 구성한다. pipeline은 gradle build - JUnit test - SonarQube test - docker build, push - kubernetes deploy 이렇게 될 것임. pipeline으로 이것을 구성해 볼 것이다. 만약 2개 이상의 프로젝트가 있으면, 각각의 프로젝트를 jenkins project에 연결시켜서 각각 프로젝트의 image만 buil..

    EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 4. docker image push

    지난 포스팅에서 gitlab에 push하면 hook을 따와서 jenkins에서 gitlab의 소스코드를 받아와서 build하는 것을 했다. 그러면 다음으로는 docker image를 만드는 것이다. 지금 EC2 위에는 docker가 있고, docker 내부에 jenkins를 올려두었고, jenkins에서 docker image를 작성하려면 1) jenkins 내에 docker를 깔던가, 2) jenkins에서 docker로 접속할 수 있는 방법을 만들던가 2가지 방법이 있다. 나는 2)를 택하고자 한다.(jenkins bash에서 docker로 접속할 수 있게) https://skyblue300a.tistory.com/14 1. Jenkins에서 docker로 접속하기 $ docker ps CONTAIN..

    EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 3. gitlab project hooker 연동

    1. gitlab project hooker로 git에 push하면 jenkins에서 받아오기 일단 new item - freestyle project 생성 소스 코드 관리는 Git으로 바꿔준다. 내 개인 repository url을 적고, 바로 위에서 작성했던 credential을 바꿔준다. 젱질 아래의 branches to build는 어떤 branch가 push되었을 때 build할 것인지에 대한 선택이다. 빌드 유발에서 gitlab webhook 뒤에 있는 url을 복사하자. 그리고 밑으로 내려보면 secret token이 있는데, generate한 후에 이 것도 복사해 두자. gitlab - settings - webhook으로 들어가서, 바로 위 사진의 url과 secret token을 복사한..

    EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 2. Docker, Jenkins, gitlab 연동

    https://tape22.tistory.com/16?category=928488 위 포스팅을 많이 참고했다. 1. EC2에 Docker, docker-compose 지난 포스팅에서 VS Code로 linux EC2에 접근했다. Ctrl + `를 눌러서 docker를 EC2에 설치하자. $ sudo yum install docker $ sudo dockerd 이후에 docker ps를 치면 에러가 난다. $ docker ps Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/contain..

    EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 1. EC2 instance 생성 및 VS Code SSH 접속

    이제 해보고자 하는 것은 EC2 위에 Docker를 올리고, 그 Docker에 Jenkins container를 올려 local에서 작성한 spring 코드가 gitlab에 push되었을 때 build 및 pipeline을 거치면서 JUnit test, SonarQube 등 정적 검사를 거치고 docker image로 build하는 것을 목표로 한다. 1. EC2 instance 생성 먼저 EC2에 들어가서 인스턴스 시작 클릭 프리티어 이용 가능한 것을 선택 마찬가지로 프리티어 이용 가능한 것을 선택 다음으로 검토 버튼을 눌러서 검토를 본다. 보면 메노리가 1GiB로 상당히 적어, 추후에 swapfile 세팅을 해 주어야 한다. (OS에서 배우는 것, 스토리지를 ram처럼 사용할 수 있게 해 줌. 그리고..

    Docker + (Spring Boot + VS Code) 준비 단계

    0. Docker 설치 Windows subsystem for Linux인가 뭐시긴가 이게 없어서 자꾸 docker 실행에서 에러가 났다. Ctrl + Shift + Esc - 성능 - CPU - 가상화 : 사용 으로 나와있어야 한다. 나는 분명 Windows 기능 켜기/끄기에서 WSL, 가상환경 다 체크해놨는데 에러 나서, 찾아봤더니 Bios 화면에서 설정을 해주니까 되더라. 그리고 WSL 에러나길래 2로 업그레이드 해주니까 잘 되었다. 이 컴퓨터에서 개발환경 아무것도 안 만들어둬서, 아마 다음 번 초기 설정에도 이렇게 하면 될 것이다. 1. vs code + spring 설정 https://sambalim.tistory.com/67 위 블로그 보면서 VS code + spring local 환경을 구..