본문 바로가기

카테고리 없음

GCP(깃허브 연동--> 깃허브액션) Github Actions

깃허브 액션적용하겠다.

깃허브액션이 뭐냐? 한줄로 말하면 자동화

내가 로컬에서 개발을 하고 깃푸시를 하고
깃허브에 푸시를 했으면 그 다음에 서버에 반영하려고하면 ssh터미널에서 git pull 땡겨서 서버 재실행해야 

서버에 반영되는 이 프로세스를 자동화한다는것

 

즉 서버가 꺼지지만 않으면 로컬에서 푸시만하면 서버에도 알아서 반영이 되게끔 하는 작업이다.

 

전제조건

1. gce 에서 인스턴스 생성 /방화벽규칙/ssh터미널 미니콘다설치를 가정한 상태 

2. 깃허브 연동 및 스트림릿 설치(ssh에서)까지 적용한 상태에서 시작합니다.

 

 

1. 우선 만들었던 레파를 로컬에 깃클론하자.

이번엔 로컬에 깃클론할거니까 SSH탭이 아니라 HTTPS 탭에서 복사한다

 로컬에서 터미널 열고 깃 클론 해준다

명령어 : git clone 복붙(shift + insert) 

만들어진 폴더로 들어가서 편집기 열어주자 (폴더에 우클릭해서 열어도 되고)

여기서 파일수정을하고 git push 하면? 아까 ssh터미널에서 vi편집기에서 수정하고 push한거랑 같은 것이다.

깃 연동하면서 됐는 지 확인하는 차원에서 ssh터미널에서 vi편집기에서 수정 후 push한 내용이 있다면 동기화를 위해

git pull을 하고 진행을 해야할 수도 있다.

 

따로 여기서 뭘 더 만져보지 않고 일단 마저 세팅하러 가보자 

(궁금하면 여기서 파일 수정후 로컬에서 git push하고 ssh터미널에서 gitpull 한다음 적용여부를 확인해보고 가도 좋다)

 

2. 깃허브 액션 설정 ㄱㄱ 

레포가 있는 창으로 가준다.

Settings 탭으로 들어간다.

왼쪽 사이드바에 Secrets and variables 탭 클릭 --> Actions 클릭 후

오른쪽에 Secrets 탭 클릭 --> New repository secret 

총 3개의 세팅을 할 것이다.  

SSH_KEY 
HOST
USER NAME  

이렇게 3개 할건데 먼저 

 

SSH_KEY부터하자

Name* 은 SSH_KEY 로 해주고(대소문자 중요하다) 

밑에 복잡한 문자들은

SSH터미널에서 가져온다 

해당경로에서 

cat ~/.ssh/id_rsa 명령어를 입력하면 

이렇게 길게 복잡하게 나오는데 표시한 부분부터 복사를해주고 붙여넣기하면 된다. 

이렇게 만들어졌다. 다시 New 버튼 클릭해서 세팅을 이어간다

이번엔 Name을 HOST 로 써주고(대소문자 중요함) 

밑에는 본인이 생성한 인스턴스의 외부아이피 주소를 복붙해와서 쓰면 된다. 

(GCP 홈페이지 compute engine 탭가서 외부아이피 주소 복붙해오면 되는데 아이피주소는 고정해야한다.) 

(고정방법은 해당 게시글로 ㄱㄱ) 

그리고 Add secret 눌러주자

만들어진 것을 확인하고 다시 또 우측상단에 녹색버튼 눌러서 하나 더 만들것이다. 

이번엔 Name을 USERNAME으로 정하고(대소문자 중요)

밑에는 본인의 메타데이터 사용자이름을 넣으면된다 (보통 구글클라우드 아이디임)

메타데이터 사용자이름은 GCP홈페이지에서 compute engine탭에서 밑으로가서 찾을 수 있다.

자 이렇게 3개가 만들어졌으면 된다.

 

 

그다음 다시 ssh터미널로 가서 레파가 있는 경로에서

vi deploy.sh 명령어 입력해주고 

편집기로 들어간다음 

#!/bin/bash
git pull origin main

입력후 저장후 나와준다. 

그다음 깃푸시 해준다.

깃허브 레포에 파일이 푸시됐는지 확인하자..

근데 로컬에는 해당파일이 없다. 동기화를 시켜줘야한다.

로컬에서도 git pull을 떙겨줘서 파일 동기화를 시켜준다. 이런 방식으로 git pull을 쓰는 것이다. 

 

깃허브로 가서 파일을 만들어보겠다(아무데서나 해도 상관없음) 

깃허브 레포있는 곳으로 와서 Add file -> Create new file. 눌러준다 

그다음 레포 옆에 .github/workflows/gce-gitaction.yml 이라고 했는데 (중요하다)

.github/workflows 까지는 똑같이 써야한다(중요). 뒤에 파일명은 다르게 해도 된다. 

 

그다음 밑에  

name: CICD-SSH
on: [push, pull_request]
jobs:
 build:
   runs-on: ubuntu-latest
   steps:
   - name: executing remote ssh commands using ssh key
     uses: appleboy/ssh-action@v1.0.0
     with:
       host: ${{ secrets.HOST }} 
       username: ${{ secrets.USERNAME }}
       key: ${{ secrets.SSH_KEY }}
       port: 22
       script: |
         whoami
         ls -al
         cd ${{ github.event.repository.name }}
         echo "Hello World!"
         chmod +x deploy.sh
         sh deploy.sh
         echo "Done----"

이거 복붙해서 넣어주고 커밋체인지 버튼 눌러주고  

한번 더 커밋체인지버튼 눌러준다.

그다음 Actions 탭으로 가보자

이렇게 떠있으면 성공이다. 만약 실패가 떴다면 원인은 여러가지가 있을 수 있다.

 

--> 위의3가지 SSH_KEY , HOST, USERNAME 을 올바로 입력하지 않았든가

--> 깃허브이메일과 구글클라우드 이메일이 다른데 유심히 보지않고 진행을 했을 수도 있고

--> 외부아이피주소를 고정하지 않았을 수도 있고 뭐 어쩄든 

--> 등등 아무튼 꼬였다면 인스턴스 생성부터 다시해야할 수도 있다. 

 

아무튼 그다음 동기화를 위해 

(깃허브엔 새로운 파일이 생겼는데 둘다 없으니 동기화 시켜줘야함) 

로컬과 SSH터미널에서 둘다 git pull 해준다.

로컬에서 git pull을 해주고

ssh 터미널에서도 git pull을 해준다(레파경로에서)

 

그럼 이제 

깃허브 액션이 적용되는 지 확인해볼 차례이다.

로컬에서 테스트용으로 리드미파일을 한번 더 수정 후 깃푸시를 해보자.

이렇게 푸시를 하고나서 

깃허브에 푸시된걸 확인하고

ssh터미널에서 vi편집기로 리드미파일을 열어보면 git pull을 하지 않아도 적용된것을 확인할 수 있다.

이렇게 서버가 살아있는 이상 
로컬에서 테스트해서 완성이 되면 푸쉬만 해주면 끊임없이 만들어진다는 환경이 되었다. 

서버를 재실행하지 않아도 되는 것이다.

 

 

이렇게

깃허브액션하면 
운영이 분리된 것이다.
서버는 돌아가게 냅두고 
로컬에서 개발 테스트를 진행해서 배포만 하는 것이다.
이원화가 되서 관리가 가능해진다.

차후 장고랑 스트림릿에서도 테스트를 진행해보도록 하겠다.