회원가입

[Github Action] 2. Github Action 적용 (self-hosted)

NULL 2021-12-16

Github Action 을 적용하기 위해서는 우선 Github Action을 적용할 저장소가 필요하다.

 

우선 Github Action을 적용하기 위한 프로세스를 간략하게 나열하겠다.

  1. 프로젝트를 Github 원격저장소에 올린다.
  2. 프로젝트 가장 바깥에 .github/workflows 폴더를 만들어 그 안에 작업 yaml 확장자로 코드를 작성한다.
  3. 배포할 서버에 원격저장소 프로젝트를 받는다. -> git clone "주소" (굳이 안해도 된다)
  4. Github 원격저장소에 Settings 에 들어가 Actions 탭을 클릭 후, Runner 를 클릭한다.
  5. new self-hosted runner 버튼을 클릭한다.
  6. 자신에 맞는 OS 를 선택 후, 배포할 서버에 아래쪽 코드를 전부 작성한다.

위의 프로세스로 작업을 해 보겠다.

 

1. 프로젝트를 Github 원격저장소에 올린다


필자는 이미 올렸다.

 

2. 프로젝트 가장 바깥에 .github/workflows 폴더를 만들어 그 안에 작업 yaml 확장자로 코드를 작성한다.


우선 프로젝트 폴더 Root 위치에 .github/workflows 폴더를 만들었다.

그 후, 필자는 blank.yml 이라는 파일을 생성했다.

 

blank.yaml

name: CI/CD

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: self-hosted

    steps:
    - name: Pull Master Branch
      run: |
        cd /var/www/roadmap/ && sudo git pull origin master
        
    - name: Deploy with React Build
      run: |
        sudo sh /var/www/roadmap/deploy.sh

필자는 master 브랜치에 push 를 할 경우 action 을 잡았다.

jobsruns-on 은 따로 Linux 서버를 이용하기 때문에 self-hosted 로 적용했다.

그리고 steps 에는 sudo sh /var/www/roadmap/deploy.sh 했는데, 해당 코드는 React 프로젝트를 빌드하고 DjangoBuild 된 정보를 추적할 수 있도록 설정하고, collectstatic 하고, nginx uwsgi 를 재부팅 하는 코드를 작성했다.

그래서 Action 으로 는 이 .sh 파일을 실행하도록 명령한 것이다.

 

3. 배포할 서버에 원격저장소 프로젝트를 받는다.


필자는 이미 git clone 으로 해당 프로젝트를 다운로드 받았다.

 

4. Github 원격저장소에 Settings 에 들어가 Actions 탭을 클릭 후, Runner 를 클릭한다.


 

5. new self-hosted runner 버튼을 클릭한다.


 

6. 자신에 맞는 OS 를 선택 후, 배포할 서버에 아래쪽 코드를 전부 작성한다.


필자는 Linux 인데 sudo su - 로 접속 후 ./config.sh --url ... 를 작성하면 sudo 로는 못한다는 에러가 난다... 이때 앞에 RUNNER_ALLOW_RUNASROOT="1" ./config.sh --url... 같이 하면 된다.

해당 작업을 전부 하고, service 로 올리기 위해 sudo ./svc.sh install 작업을 한다.

그 후, 서비스를 실행한다. sudo ./svc.sh start

서비스를 종료하고 싶으면 sudo ./svc.sh uninstall 한다.

 

완료


이제 모든 작업이 완료 되었다!!!

프로젝트를 수정해서 master push 하면 이제 자동으로 배포 작업을 할 것이다!!

아주 편리해졌다!!

 

아래 사진은 Action 을 수행한 모습이다.

 

CI/CD 로 엄청 많은 프로세스를 생략시켜 삶의 질이 향상 되었다!!

3 0
CI/CD
애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법
Yesterday: 291
Today: 35