DevOps

    [Git] 개발 규칙 정하기 - Kanban과 commit 규칙

    혼자 일을 한다면 상관없지만 git에서 협업을 한다고 치면 많은 애로사항이 있을 것이다. 누가 무슨 일을 하는지, commit은 어떻게 하는지, conflict가 발생하면 어떻게 하는지, ... 이걸 해결하기 위해서 협업할 때 어떻게 git을 사용하는지 볼 것이다. Kanban (할일 정리) 진행상태, 업무에 따라 칸을 나누고 각 칸에 이슈를 적어 현재 업무 현황을 한눈에 파악하는 시스템입니다. 해당 리포 내에 Projects에서 칸반 정리를 하기로 했습니다. 모든 티켓들은 이슈화를해서 자동으로 고유번호가 매겨지게할 것입니다. 예시로 #4번이 부여되면 관련 커밋은 MK-4로 작성하시면됩니다. 티켓(이슈)은 완료 후 archive처리하고 close issue를 해주어야합니다. 왜 칸반을 쓰는지 누가 무슨일..

    [Git] git commit template 적용

    Commit Conventions https://www.conventionalcommits.org/en/v1.0.0/ Conventional Commits A specification for adding human and machine readable meaning to commit messages www.conventionalcommits.org 협업 시, commit할 때 commit message만으로도 코드 수정 내용을 유추할 수 있게 작성해야 한다. 그렇게 하면 코드 리뷰할 때도 편하고, 이슈 트래킹, 티켓 트래킹할 때도 편해진다. 따라서 commit 시에는 규칙을 지켜 작성해야 한다. git commit -m "commit message 내용... commit message 본문... comm..

    [Git] git mirroring 하기

    올해 말에 인턴을 생각하고 있어서 지금까지 했던 흩어져 있는 프로젝트를 정리하고 있다. 그래서 git 저장소를 미러링 해야 한다. gitlab은 아직 작업 중이고, 과거에 진행했던 팀 프로젝트를 모아야 한다. 1. 끝난 프로젝트 mirroring 1) clone --bard 해서 로컬에 가져옴. 명령어는 아래와 같다. git clone -bare https://......~~~.git (가져올 repository) 2) clone한 곳으로 이동한다. 3) git push --mirror로 push. 명령어는 아래와 같다. git push --mirror https://....~~~.git (새로 저장할 repository) 이렇게 하면 완료된 프로젝트의 커밋 기록까지 다 가져온다. 2. 진행중인 프로젝트..

    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..

    [GCP] GKE 중지시키기

    gcloud shell에서 아래 명령어를 입력하면 된다. 우상단의 gcloud shell을 활성화 시키고, 위치를 본다. gcloud container clusters resize $NAME --size=0 --zone=$LOCATION 위 명령어에서 $NAME은 컨테이너 이름인 cluster-1을, $LOCATION은 위치인 us-central1-c를 입력하면 된다. 이걸 하면 vm instance에 있던 node들이 사라지는 걸 볼 수 있다.

    [GCP] Cloud IP가 바뀌었을 때, 수정해야 할 것

    바로 앞 포스팅에서 cloud의 external/public ip가 바뀌면 4가지를 바꾸어야 한다. 1) jenkins - gitlab webhook ip 변경 jenkins 구성 - gitlab webhook ip를 gitlab에 재등록해야 함. 2) sonarqube ip 재등록 jenkinsfile에 있는 stage('SonarQube Analysis'){ steps{ withSonarQubeEnv('sonar-server'){ sh './gradlew sonarqube -Dsonar.projectKey=ciserver -Dsonar.host.url=http://35.225.76.162:9000 -Dsonar.login=8ec502617dd7b039e3179fadb5ec83f0127544cc' } ..

    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:..

    [GCP] GCP 기본 설정 - SSH로 접속하기 & 포트 열기 & docker 설치 & 고정 IP

    먼저, AWS kubernetes 환경을 구성하려 했는데 AWS는 이것저것 설정할게 너무 많아서 GCP로 넘어가려 한다. 1. SSH 접속 https://ruuci.tistory.com/6 위 글을 참고했다. 먼저 C:\gcp 폴더를 만든다. 이후 vs code에서 C:\gcp에 접근해서 ssh-keygen -t rsa -f "파일 이름" -C "내 GCP 계정" 을 입력한다. 생성된 public key를 vm instance - metadata - ssh key에 복사한다. 이후 vs terminal에서 ssh -i "private key 경로.private key 파일이름" "사용자 이름"@"VM 외부 IP" 로 접속할 수 있다. 여기서 사용자 이름은 생성할 때 hyelie@postech.ac.kr ..

    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..

    [Docker] Redis + Docker + 간단한 명령어

    다른 db와 마찬가지로 docker에 올렸다. docker-compose.yml 중 일부 redis: image: redis:alpine hostname: redis-local ports: - 6379:6379 container_name: local-redis 실행 docker exec -it {container-id} redis-cli 기본적으로 redis는 key, value가 쌍으로 저장되는 database이다. key 조회 keys * 값 삽입 set {key} {value} ex) set key_one value_one key에 해당하는 value 조회 get {key} ex) get key_one 갱신 : 삽입과 동일. set {key} {value} ex) set key_one value_o..

    [Troubleshooting] Jenkins 잘 되던 build가 안 될 때

    잘 되었던 build가 안되는 경우가 생겼다. 코드는 변함없는데. 그래서 이것저것 해보다가 용량 부족임을 알게 되었다. 쌓인 image, build log를 지우고 gcr에도 쌓인 image를 삭제하니 잘 된다. stage('Docker unused image remove'){ steps{ script{ sh 'docker image prune -a' } } } -a 옵션은 사용되지 않는 모든 image 삭제이다. build server에서는 실행중인 jenkins, mysql, sonar-qube 이외의 image는 사용되지 않기 때문에 모든 image를 삭제하게 했다.

    Kubernetes - 개념

    https://subicura.com/2019/05/19/kubernetes-basic-1.html https://subicura.com/k8s/guide/#%E1%84%80%E1%85%A1%E1%84%8B%E1%85%B5%E1%84%83%E1%85%B3 https://bcho.tistory.com/1256?category=731548 위 블로그를 보고, 요약했다. 1. 개념 Kubernetes란? 쿠버네티스Kubernetes - container를 관리해 주는 도구, container orchestration tool이다. 배포 방식도 여러가지가 있고, 클라우드에서 지원하기 때문에 구글의 경우 GKE, AWS의 경우 EKS, Azure의 경우 AKS를 지원하며, autoscaling과 loadbalan..

    [Git] 현업에서 사용하는 git

    git master branch는 실 사용 서버와 주로 연동되며 git-jenkins hooker도 master를 주로 받아옴. 그래서 master에 바로 소스코드를 push해버리면 테스트나 품질 검사 이런 게 없이 바로 build가 되어 버림. 그래서 다른 branch, develop branch를 파서 개발이 어느 정도 되면 master branch에 merge request를 하고, 관리자가 확인 한 후에 merge하는 것이 더 좋을 것임.

    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처럼 사용할 수 있게 해 줌. 그리고..

    MSA란? Docker와 Kubernetes, Container와 VM, Jenkins란?

    http://book.interpark.com/product/BookDisplay.do?_method=detail&sc.shopNo=0000400000&sc.prdNo=293915007&sc.saNo=003002001&bid1=search&bid2=product&bid3=title&bid4=001 위 책을 읽고 느낀점을 정리함. 1. MSA가 뭘까? 더 빠른 개발을 위해서는 수정사항이 빨리빨리 반영되어야 한다. 그런데 기존의 monolithic한 개발 방식으로는 배포하는 데도 시간이 걸리고, 빌드하는 데도, 심지어 한 어플리케이션들의 열려있는 message들과 그 형식을 모두 맞춰야 하기 때문에 agile하지 못하다. 그래서 MS와 MSA가 나타나게 되었다. MicroService란 큰 App을 작은 s..

    [Docker] Docker - push / pull

    https://youngmind.tistory.com/entry/Docker-%EA%B0%95%EC%A2%8C-4-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%801 Docker 강좌 - 4. 도커 이미지1 - 도커이미지 만들기 Docker Images docker registry에서 필요한 docker image를 검색할 수 있다. [root@cent154 ~]# docker search centos NAME DESCRIPTION .. youngmind.tistory.com 1. docker push docker login을 치고, id/pw를 입력해 로그인한다. docker images를 치고 뭐가 있는지 봐본다. > docker images; REPOSITORY T..

    [Docker] Docker 데몬 run error 해결

    cannot connect to docker daemon at unix ///var/run/docker.sock 에러 -> sudo dockerd 접근 권한 에러 -> sudo chmod 777 /var/run/docker.sock

    [Docker] Docker로 백엔드(Spring Mysql) 구성하기

    1. volume을 이용해 Docker가 local file 참조하게 해서, 코드 변경 반영하게 하기. https://github.community/t/docker-not-working/181304 https://devlog-wjdrbs96.tistory.com/311?category=902375 위 두 글을 참고했다. 먼저, 어제 작성한 dockerfile을 바꾼다. FROM openjdk:8-jdk-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] FROM openjdk:11-jre-slim WORKDIR /root ADD ./build/libs/demo-0.0.1-SNAPSHOT..

    [Git] 깃랩 gitlab

    다른 컴퓨터를 추가로 등록시켰다. 처음에는 gitlab 로그인을 github로 했었어서 자꾸 password를 요구하는데, 나는 등록한 적이 없어서 당황스러웠다. 그래서 gitlab에서 password를 등록했더니 잘 됐다. 먼저 새 컴퓨터에서 등록하려면 git config --global user.name "이름" git config --global user.email "내 이메일@내 도메인" 으로 입력한다. 이후 branch를 추가해야 하는데, 새 컴퓨터에서 작업할 경로를 path, gitlab의 내 프로젝트 도메인 url을 url이라 하면 cd path git init git remote add origin url 이라 하면 된다. 이후의 사용 방식은 다른 git과 동일하다(아직 branch 충돌 ..

    [React Native Tutorial] React Native + Expo + Android Emulator on Windows (feat. GCP)

    이전 게시글에서 VM을 만들고 guacamole로 window vm에 접속하는 방법을 배웠다. 이제부터는 android emulator를 돌리기 위한 과정을 밟을 것이다. https://hyelie.tistory.com/entry/Deploy-Window-Server-on-WEB-using-guacamole-feat-GCP?category=947331 Windows RDP through WEB using guacamole + code-server (feat. GCP) guacamole을 이용해서 GCP의 window VM을 web에 띄우는 방법을 연구해 봐야겠다. 이렇게 생각하게 된 이유는... 0) 메인 개발용으로 code-server를 vm에 상시 띄워두고 있다. 1) react native 개발을 ..

    [GCP Tutorial] Windows RDP through WEB using guacamole + code-server (feat. GCP)

    guacamole을 이용해서 GCP의 window VM을 web에 띄우는 방법을 연구해 봐야겠다. 이렇게 생각하게 된 이유는... 0) 메인 개발용으로 code-server를 vm에 상시 띄워두고 있다. 1) react native 개발을 해야 하는데, 그걸 못한다. (사지방 환경 수쥰..) 2) 원래 검색 서버로 ubuntu를 쓰고 있었고 계속 켜 두고 있었는데, 많이많이 느리다. 1. 다른 GCP VM에서 instance를 켜고 끌 수 있게 설정 먼저 code server를 올린 곳에서 gcloud를 설치해야 원격 켜기/끄기가 가능할 것이다. 아래 링크를 참고해 항상 열어둘 서버(상시 서버라고 하겠다)에서 gcloud를 설정한다. https://cloud.google.com/sdk/docs/insta..

    [Node.js Tutorial] Install NVM & typescript-express-starter on Ubuntu

    1. NVM 설치 Ubuntu에 Node.js를 설치하기 위해 NVM - node version manager - 를 설치할 것이다. 공식 github에서 버전을 확인 한 후, 설치한다. https://github.com/nvm-sh/nvm/#install--update-script 아래 명령어들로 설치할 수 있다. 나의 경우, react native와 같이 사용할 것이기 때문에 13.6 버전을 설치했다. # 버전은 공식 git에서 확인 한 후 변경 curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/vx.xx.x/install.sh | bash source ~/.bashrc nvm install node # 최신 버전 설치 nvm install xx.xx #..

    [GCP Tutorial] RDP through HTTPs connection using guacamole (feat. GCP)

    대충 원리는.. Proxy와 Remote Client를 이용해 접속할 컴퓨터로 rdp 접속. 이 접속 내용을 guacamole protocol로 tomcat 서버에 뿌리고, web에서 접근 가능한 방식. 나의 경우는 nginx로 proxy도 사용했으니까 web 접속 - nginx proxy - guacamole tomcat 접근 - guacamole이 rdp 접속 이렇게 되는 것 같다. 복잡하기도 해라. 구성은 docker로 할지, 아니면 쌩으로 설치할지, 또 VM은 code-server가 있는 곳에서 할지, 다른 곳에서 할지 고민을 조금 했다. 그런데 GCP 특성상 가격이 [싼 것 2개 < 싼 것 스펙 2배짜리 VM 1개]처럼 되기 때문에 그냥 E2-medium 2개를 쓰기로 했고, 그러면 굳이 여러 ..