ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • GCP(구글클라우드플랫폼)로 자동 커밋 하기
    DevOps/Git 2023. 4. 15. 13:45

    아래중 하나로 사용해도 문제 없어 보인다.

    • AWS (프리티어 1년 무료) - 이전에 사용완료
    • GCP (3개월 크레딧 지급, 특정 조건에서 무료사용가능하다함) - 현재 사용중
    • Fly.io (도커로 배포, 무료 버전) - 미경험
    • Kamatera (한달 무료 , $4 vcpu1, ram1G, SSD20GB) - 미경험
    • Koyeb(한달 무료 $5.5 크레딧 지급 제일 낮은 사양으로 무료) - 미경험

    문제사항 ( 비용관련 )

    • GCP 특정 조건을 만족하면 요금이 부과 되지않는다는데 설정을 다르게 했는지 일주일 사용했는데 부과되었다.

    기본 프리티어 정책

     

    무료 체험판 및 무료 등급  |  Google Cloud

    $300의 무료 크레딧과 월별 한도까지 무료로 사용할 수 있는 Compute Engine, Cloud Storage 등 20여 개의 제품으로 Google Cloud에서 빌드하세요.

    cloud.google.com

     

    결제 보고서 1

     

    비용에는 네트워크 관련과 로그 지출이 확인 되었다.
    GCP 결제 탭에서 확인가능 ( 기간 설정 확인 필요)

     

    결제 보고서 2

     

    이그레스 관련 정책 하루 1G/일 (표준등급만 해당)

     

    네트워크 프리미엄 설정 -> 표준 등급으로 설정 (아래에 인스턴스 생성시 초기에 생성시 설정) - 생성된 인스턴스에서 변경법은 찾지못했다.

     

    네트워크 비용 1

     

    네트워크 비용 2

     

    로그 관련해서는 비용이 어떻게 부과 되는지 찾지 못함
    아래에서 기본 로그만 해제 했는데 영향이 있는지 확인 하지 못함.

     


    1. 클라우드 생성

     

    새로운 인스턴스를 생성한다.

    uri: https://console.cloud.google.com/compute/instances 

     

    Google 클라우드 플랫폼

    로그인 Google 클라우드 플랫폼으로 이동

    accounts.google.com

     

    클라우드 생성 1

     

     

    클라우드 생성 2

     

    표준 영구 디스크 선택

     

    클라우드 생성 3

     

    네트워크 설정 위와 같이 변경후 생성

     

    클라우드 생성 4

     

    최종 생성 확인

     


    2. 생성된 인스턴스에 접속하는 2가지 방법

     

    1.  브라우저창에서 열기시 크롬에서 바로 접속 가능

     

    접속 방법 1

     

    접속 방법 2

     

    2. SSH 접속 방법
    키생성 -> pub 메타 데이터 등록 접속
    현재사용하는 로컬 컴퓨터 터미널에 접속 (우분투나 맥기준)

     

    ssh-keygen -t rsa -f ~/.ssh/[KEY_FILENAME] -C [USER] -b 2048
    
    #[KEY_FILENAME].pub 접속하기위한 공개키로 장비에 등록한다.
    
    #[KEY_FILENAME]은 비밀키로 노출해서 안된다.
    
    #[KEY_FILENAME] : 키 이름 설정
    
    #[USER] : 구글 이메일(GCP에 사용한)
    
    #ex)user@gmail.com

     

    비밀번호 설정하지말고 계속 엔터

     

     cat ~/.ssh/[KEY_FILENAME].pub
     
     #위에 생성된 생성한 .pub키를 복사하여 GCP로 이동

     

    1. ComputeEngine 검색 또는 탭 클릭
    2. 프로젝트 선택
    3. 메타데이터 클릭
    4. SSH 키 수정하여 항목 추가후 .pub키 붙여넣기 ( 복사할때 뒤에 이메일까지 전체 복사 )

     

    접속 방법 3

     

    편하게 접속하기위해 host등록 ( 등록하지않을경우 매번 아이피를 입력해야한다. )

     

    cat ~/.ssh/config

     

    Host toryGcp
        HostName 34.83.38.63
        User toryvic12345
        Port 22
        IdentityFile ~/.ssh/toryGcp
        
    #HostName GCP 외부 IP (공인 아이피) 등록 아래 아이피 복사 붙여넣기
    
    #User 구글계정 아이디
    
    #Port ssh 접속 포트 (기본 22)
    
    #IdentityFile 위에서 생성한 비밀키 위치입력

     

    더보기

    위와같이 등록한다

    접속시 터미널 열고 ssh toryGcp 엔터시 자동 접속

     

    접속 방법 4

     

    ssh [HOST]

     

    접속 방법 5

     


    3. 깃 접속 SSH

    • 목표 : GCP에서 내 깃허브 레포에 접속할 수 있도록 SSH KEY를 등록한다.
    SSH 접속 방법 2번에서 설정한 것과 같은 방법이다.

     

    이제는 새롭게 생성된 서버 컴퓨터에서 접속할것이기때문에 서버 컴퓨터로 접속하여 키를 생성한다.

     

    1. GCP 인스턴스 접속 ( 위에 생성된 컴퓨터 )
    2. KEY 생성
    3. .pub 키를 복사 깃허브 계정에 붙여넣기
    4. config에 호스트 등록

     

    깃허브에 아래와 같이 KEY를 등록할 수 있다.

     

    깃허브 SSH 1

     

    깃허브 SSH 2

    1. Title은 원하는대로 지정한
    2. Key type은 위와같이 둔다.
    3. Key값을 .pub 키 전체를 복사하여 붙여넣기한 후 저장

     

    Host github.com
      IdentityFile ~/.ssh/[KEY_NAME]
      User git

     

    서버 컴퓨터에 깃이 등록되었는지 확인한다. 

    git --version 명령어 사용하여 설치 유무 확인

    없는 경우 install

     

    git config --global user.name "깃계정이름"
    git config --global user.email "깃계정이메일"

     

    깃허브 SSH 3

     

    위에 초록색 코드 버튼 클릭후 SSH 탭을 눌러 복사

     

    git clone [ssh정보]

     


    4. 자동화 스크립트 생성

     

    [ 필수 ] - 스크립트가 하드코딩 되어있기때문에 디렉토리구조와 파일 구조가 맞아야 동작한다.

     

    파일을 다음과 같이 3가지 디렉토리를 생성한다.
    현재 스크립트에 하드코딩으로 디렉토리안에 파일만 전송하게 설정해놓았다. 

     

    스크립트 생성 1

     

    아래 스크립트 중 baseDir만 깃레포지토리 위치에 맞게 변경한다.
    (git 레포지토리에 들어가 pwd로 검색하면 디렉토리 위치가 출력된다.)

     

    스크립트 생성 2

     

    #!/bin/bash
    # 커밋할 디렉토리
    # baseDir=/home/toryvic12345/WORKSPACE/Algorithm
    
    # 사용 변수 (초기화 할 필요 없음)
    
    ##변경 필요
    baseDir=~/WORKSPACE/Algorithm
    ##변경 필요
    
    target_Dir=""
    fileName=""
    commitMsg=""
    today=""
    
    # 특정 문자열 자르기
    # %%{특정문자열}*
    
    # 특정 문자열 뒷부분 가져오기
    # #*{특정문자열}
    
    # 문자열 세팅 함수
    function set_metadata() {
    
    	# 깃 레포 디렉토리로 이동
    	target_dir=${1}
    
    	cd ${target_dir}
    
    	# 커밋내용중 첫번째 가져오기
    	filePath=`git status -u -s | head -n 1`
    
    	filePath=${filePath:3}
    
    	fileName=${filePath#*/}
    
    	directory=${filePath%%/*}
    
    	today=' '`date +"%Y-%m-%d"`
    
    	cd ${directory}
    
    	commitMsg=`cat ${target_dir}/${filePath} | head -1`
    
    	if [ -z "$commitMsg" ]; then
    		commitMsg=defaultMessage
    	else
    		commitMsg=${commitMsg////''}
    	fi
    
    	echo ${commitMsg}
    }
    
    function gitAction() {
    	case $1 in
    		ad)
    		git add $2
    		;;
    		cm)
    		git commit -m "$2$today"
    		;;
    		ps)
    		git push
    		;;
    	esac
    }
    
    function autoCommitMain() {
    	set_metadata ${baseDir}
    	cd ${target_dir}/${directory}
    	gitAction ad ${fileName}
    	gitAction cm ${commitMsg}
    	gitAction ps
    }
    
    autoCommitMain

     

    스크립트를 문법을 잘 몰라서 수정하여 더 좋은 방법이 있다면 수정해서 사용하면 될것같습니다.

     

    레포안에 디렉토리 구조를 1뎁스 들어가도록 구성해서 다음과 같이 구성한다.

    https://github.com/JEONSEUNGREE/Algorithm

     

    파일 사용시 첫번째 라인에 커밋 메시지를 다음과 같이 작성한다. - 2번째라인부터는 상관없다.

    첫번째 라인에 커밋이 비어있다면 defaultMessage [오늘날짜]로 작성된다.

    일반 커밋 메시지는 [메시지] + [오늘날짜] 로 작성되게 두었다.

    아래 예제 처럼 작성하면 정상 작동한다. 커밋메시지는 붙여서 작성해야한다. 띄어쓰기시 공백전 메시지까지만 전송 된다.

     


    5. 일정시간 마다 커밋할 수 있도록 설정

     

    크론잡 설정 ( 일정 주기로 특정 명령어를 수행하기위해 사용한는 프로그램이다 )

     

    서버 컴퓨터에서 아래 명령어 실행

    crontab -e

    최하단으로 이동하여 작성한다.

     

    다음 포맷에 맞게 작성 (아래는 매일 12시 30분 마다 동작하겠다는 의미)

    #*         *        *       *        *
    #분(0-59)  시간(0-23)  일(1-31)  월(1-12)   요일(0-7)
    
    #시간 설정 옆에 스크립트 실행 위치에 스크립트를 적어둔다.
    
    30 0 * * * /home/toryvic12345/WORKSPACE/cronJob/autoCommit.sh

    등록된 크론탭 확인

    crontab -l

     

    6. crontab 실행이 안되는 경우

     

    1. 동작하지 않는경우 프로그램실행 여부 확인

     

    systemctl status cron.service

     

    2. 권한 없는경우

    chmod로 해당 스크립트에 755등의 권한을 준다.

     

    sudo chmod 755 [파일명]

     

    3. No MTA installed, discarding output 에러 발생시

     

    sudo apt-get install postfix

     

    4. crontab -e 로 수정하여 파일을 등록했는데 실행되지않는경우

     

    // 서버시간을 확인한다 (GCP가 한국시간으로 설정되지않아 예상시간과 다른것)
    date
    
    // 서울 시간으로 변경
    sudo timedatectl set-timezone Asia/Seoul

     

    'DevOps > Git' 카테고리의 다른 글

    Metrics 깃허브 README적용  (0) 2023.03.30

    댓글

Designed by Tistory.