일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- bandpass filter
- 완주하지 못한 선수
- 쿼리문법
- 자동 commit
- 웹개발
- 디지털신호처리설계
- 알고리즘풀이
- 프로그래머스
- 알고리즘 자동 업로드
- 설문조사앱
- select
- programmers
- Django
- 왜 개발이 하고싶은가
- sql정리
- matlab 디지털신호처리
- Django웹서버개발
- Django서버
- SQL
- 통신인터페이스
- MTV패턴
- Django cycle
- embeddedSW
- 코딩테스트
- N으로 표현
- 링크필드
- 데이터필드
- Django웹개발
- Django DB
- python웹개발
- Today
- Total
카이로스의 시간
GCP로 git commit, push 자동 시스템 구축 본문
목표: 매일 특정 시간을 기준으로 지정한 폴더에 파일 업데이트가 있는 경우, 자동으로 git push 할 수 있도록 구성
구성: GCP(Google Cloud Platform) VM(E2-micro) + cron 설정을 통해서 자동화
알고리즘 문제를 풀고 매일 깃허브 업데이트 하는 것이 귀찮고, 내가 피치못할 사정으로 push를 못하는 상황에서도 나무는 심어야 하기에 자동화 시스템을 구축하기로 했습니다. GCP E2-micro는 성능이 뛰어나진 않지만 Google에서 당월에 할당된 시간만큼 무료로 제공하고 있는 VM이므로 간단한 시스템을 구축하기에는 적합합니다. (인스턴스를 하나만 돌리면 계속 무료로 사용할 수 있습니다.)
우선, GCP console에서 VM 인스턴스를 생성합니다.
VM은 왼쪽 상단에 메뉴 > Compute Engine > VM 인스턴스에서 생성할 수 있습니다.
새 인스턴스 만들기로 들어오면 이와 같이 설정할 수 있습니다.
인스턴스 이름은 각자 알아서 지정하시면 됩니다.
중요한건 리전, 머신 유형, 부팅 디스크 설정 입니다.
GCP에는 무료 프로그램들이 있는데, 아래 처럼 Compute Engine은 e2-micro VM 인스턴스의 경우 아래 리전에서 30GB/월을 무료로 제공하고 있습니다.
그래서 전 오리건으로 리전 선택, e2-micro VM을 선택했습니다.
다음은 부팅 디스크 설정입니다.
아래처럼 우분투를 기반으로 설정합니다.
주의할 것은 위에 명시된 것처럼 부팅 디스크 유형을 표준 영구 디스크로 꼭 변경합니다. 크기는 30GB까지 쓸 수 있다고 했으므로 30으로 변경합니다.
이후 만들기 버튼을 클릭하면 인스턴스가 정상적으로 생성됩니다.
인스턴스에스 연결 부분의 SSH를 클릭하면 SSH를 통해서 브라우저로 연결할 수 있습니다.
간단한 작업은 이 브라우저 프로그램에서 가능합니다.
저의 경우 알고리즘 파일을 아래처럼 정리하고자 합니다.
GCP VM의 /home/github/algorithm/programmers 경로에 알고리즘 파일을 추가할 예정입니다.
이제 쉘파일을 만들고 cron에 등록하겠습니다.
쉘파일은 /home/github 경로에 auto_push.sh 이름으로 만들었습니다.
#!/bin/bash
echo '##### auto push start #####'
baseDir=/home/github/algorithm/
cd ${baseDir}
filePath=`git status -u -s | head -n 1`
filePath=${filePath:3}
if [ -z "$filePath" ]; then
echo '##### file not found #####'
exit
fi
cd programmers/
filename=`ls -1 | head -1`
commitMsg=`cat $filename | head -1`
git add ${filename}
git status
git commit -m "${commitMsg:1}"
git push origin master
echo '##### auto push end #####'
스크립트에서 /home/github/algorithm 경로에 update 된 파일을 1개 가져와서 filePath에 저장합니다. 이후 programmers 경로에서 파일 이름, commit message를 끌어와서 git add, commit 명령에 사용합니다. commit message는 알고리즘 문제를 풀고 업로드할 파일의 첫줄에 #message 와 같이 추가되어 있어야 합니다.
이후 git add, commit, push를 수행하게 됩니다.
참고) git 계정설정, remote 설정 등은 여기서 다루지 않습니다. git add, commit, push가 정상적으로 되도록 미리 설정하시면 됩니다.
이제 cron을 세팅하겠습니다. cron은 crontab -e 명령으로 간단하게 수정할 수 있습니다.
주석 아래에 위 내용을 추가합니다. 30 07 * * * 은 매일 7시 30분 마다를 의미하고, /home/github/auto_push.sh은 이 auto_push.sh 파일을 수행하겠다는 의미가 됩니다. 이후 로그 파일 설정으로 로그를 받도록 했습니다.
참고) 한국 시간으로 7시 30분을 정상적으로 인식못할 수 있습니다. 현재 시스템 시간이 한국 시간과 달라서고, 이럴때는 timezone 변경 방법을 찾아서 적용하시면 됩니다.
참고) 아래 명령으로 로그를 보면 정상적으로 메일링이 안되는 경우를 확인할 수 있습니다. 이런 경우에는 postfix 설치후에 정상적으로 메일링을 받을 수 있습니다.
grep CRON /var/log/syslog
이제 아래 명령으로 cron을 실행합니다.
service cron start
아래 명령은 cron이 정상적으로 동작하는지 확인할 수 있습니다.
service cron status
이제 ssh를 통해서 외부(로컬 PC)에서 접속해서 VM에 파일을 전송하는 방법을 보도록 하겠습니다. 외부 접속 가능하도록 구성해두면 로컬 PC에서 업로드 할 파일을 생성하고(알고리즘 문제를 풀고) VM으로 쉽게 파일을 등록해둘 수 있습니다. 이후에 VM에서 cron이 돌면서 특정 시간이 되면 자동으로 git에 push를 합니다.
외부접속을 위해서 우선 RSA key를 생성합니다. 아래 puttygen 사이트에서 puttygen을 다운로드 받습니다.
puttygen에서 Generate를 누르고 마우스를 계속 움직이면 프로세스가 진행되면서 key가 생성됩니다.
이후 key-comment 부분에 원하는 ID를 입력합니다.
이제 생성된 key는 클립보드에 복사합니다.(밑에 메타데이터 등록 부분에서 사용합니다.)
이후에 save public key, save private key로 public, private key를 파일로 생성합니다.
이제 GCP 설정에서 메타데이터를 등록합니다.
메타 데이터에서 아래 SSH키부분에 항목을 추가하고, 미리 복사해둔 key 값을 입력 후 저장합니다.
외부 접속 프로그램은 WinSCP를 사용하겠습니다. 아래 링크에서 받을 수 있습니다.
https://winscp.net/eng/docs/guide_install
Download and Install WinSCP :: WinSCP
Last modified: 2022-03-01 by Petr
winscp.net
WinSCP가 열리면 로그인 부분에서 아래 내용을 작성합니다.
- 파일 프로토콜: SCP
- 호스트 이름: VM 인스턴스의 IP(인스턴스 목록에서 외부 IP부분을 참조합니다.)
- 사용자 이름: 위에서 지정한 ID
- 고급 탭 > SSH > 인증 > 개인 키 파일: 위에서 생성한 private key file 경로
이제 로그인을 하면 정상적으로 VM으로 연결이 완료되고 파일을 드래그해서 편하게 올릴 수 있습니다.
추가로, 파일을 옮겼는데 퍼미션 에러가 발생하는 경우, ssh 브라우저로 VM 열어서 파일 권한을 수정하시면 됩니다.
'기타' 카테고리의 다른 글
Database SQL 쿼리 문법 정리 Part2 (0) | 2022.04.10 |
---|---|
Database SQL 쿼리 문법 정리 Part1 (0) | 2022.04.04 |
[디지털 신호처리 설계] dtmf (2) | 2017.12.10 |
텐서플로우(tensorflow) 설치 (0) | 2017.09.14 |
[통신공학] matlab을 이용한 piano project (0) | 2017.09.14 |