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