-
GCP(구글클라우드플랫폼)로 자동 커밋 하기DevOps/Git 2023. 4. 15. 13:45
아래중 하나로 사용해도 문제 없어 보인다.
- AWS (프리티어 1년 무료) - 이전에 사용완료
- GCP (3개월 크레딧 지급, 특정 조건에서 무료사용가능하다함) - 현재 사용중
- Fly.io (도커로 배포, 무료 버전) - 미경험
- Kamatera (한달 무료 , $4 vcpu1, ram1G, SSD20GB) - 미경험
- Koyeb(한달 무료 $5.5 크레딧 지급 제일 낮은 사양으로 무료) - 미경험
문제사항 ( 비용관련 )
- GCP 특정 조건을 만족하면 요금이 부과 되지않는다는데 설정을 다르게 했는지 일주일 사용했는데 부과되었다.
비용에는 네트워크 관련과 로그 지출이 확인 되었다.
GCP 결제 탭에서 확인가능 ( 기간 설정 확인 필요)네트워크 프리미엄 설정 -> 표준 등급으로 설정 (아래에 인스턴스 생성시 초기에 생성시 설정) - 생성된 인스턴스에서 변경법은 찾지못했다.
로그 관련해서는 비용이 어떻게 부과 되는지 찾지 못함
아래에서 기본 로그만 해제 했는데 영향이 있는지 확인 하지 못함.
1. 클라우드 생성
새로운 인스턴스를 생성한다.
uri: https://console.cloud.google.com/compute/instances
표준 영구 디스크 선택
네트워크 설정 위와 같이 변경후 생성
최종 생성 확인
2. 생성된 인스턴스에 접속하는 2가지 방법
1. 브라우저창에서 열기시 크롬에서 바로 접속 가능
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키 붙여넣기 ( 복사할때 뒤에 이메일까지 전체 복사 )편하게 접속하기위해 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 엔터시 자동 접속
ssh [HOST]
3. 깃 접속 SSH
- 목표 : GCP에서 내 깃허브 레포에 접속할 수 있도록 SSH KEY를 등록한다.
SSH 접속 방법 2번에서 설정한 것과 같은 방법이다.
이제는 새롭게 생성된 서버 컴퓨터에서 접속할것이기때문에 서버 컴퓨터로 접속하여 키를 생성한다.
1. GCP 인스턴스 접속 ( 위에 생성된 컴퓨터 )
2. KEY 생성
3. .pub 키를 복사 깃허브 계정에 붙여넣기
4. config에 호스트 등록깃허브에 아래와 같이 KEY를 등록할 수 있다.
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 탭을 눌러 복사
git clone [ssh정보]
4. 자동화 스크립트 생성
[ 필수 ] - 스크립트가 하드코딩 되어있기때문에 디렉토리구조와 파일 구조가 맞아야 동작한다.
파일을 다음과 같이 3가지 디렉토리를 생성한다.
현재 스크립트에 하드코딩으로 디렉토리안에 파일만 전송하게 설정해놓았다.아래 스크립트 중 baseDir만 깃레포지토리 위치에 맞게 변경한다.
(git 레포지토리에 들어가 pwd로 검색하면 디렉토리 위치가 출력된다.)#!/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