Server

Github Actions로 push 이벤트 발생 시 내 서버로 배포 자동화하기

LimeLee 2023. 9. 5. 19:58

Github에 만든 리포지토리를 보면 Actions라는 탭이 존재한다.

Github Actions은 CI/CD 플랫폼으로 빌드, 테스트, 배포 등을 자동화할 수 있다.

공식 문서

이 Actions 기능을 이용해 브랜치에 push하는 이벤트가 발생할 경우, 설정해 놓은 서버에 배포하는 작업을 자동화해보기로 한다.

 

리포지토리마다 Actions 탭이 존재함
직접 작성할 거기 때문에 "set up a workflow yourself" 선택

 

workflow 파일의 Syntax  문서 를 참고하여 작성

 

Workflow syntax for GitHub Actions - GitHub Docs

A workflow is a configurable automated process made up of one or more jobs. You must create a YAML file to define your workflow configuration.

docs.github.com

 

name: github actions - test
on: 
  push:
    branches:
      - main
    
jobs:
  build:
    runs-on: ubuntu-latest
    steps:

 

on은 워크플로를 트리거하기 위한 이벤트를 정의한다.

이벤트는 main branch에 push가 발생했을 때로 정의했다.

 

이벤트가 발생했을 경우 어떤 작업을 수행할지는 jobs에서 정의할 수 있다.
build라는 이름의 job을 추가해두었고 해당 job은 github가 호스팅하는 ubuntu 머신을 실행한다.

이 머신이 steps 에 정의한 작업들을 실행할 것인데 여기다 서버에 자동 배포하는 코드를 입력하면 된다.

배포는 ubuntu 머신이 내 서버에 SSH 접근한 후 git pull 명령어를 사용해주는 방식으로 구현한다.

그리고 SSH 접속을 위해 appleboy/ssh-action 를 사용한다.
해당 깃헙에 메뉴얼이 잘 되어있어 어려움 없이 따라할 수 있다.

name: github actions - test
on:
  push:
    branches:
      - main

jobs:

  build:
    runs-on: ubuntu-latest
    steps:
    - name: executing remote ssh commands using password
      uses: appleboy/ssh-action@v1.0.0
      with:
        host: ${{ secrets.REMOTE_IP }}
        username: ${{ secrets.REMOTE_USER }}
        password: ${{ secrets.REMOTE_PW }}
        port: ${{ secrets.REMOTE_PORT }}
        script:
          cd ${{ secrets.REMOTE_PATH }};
          git pull origin main

 

해당 yml 파일을 레포에 추가한 후 이벤트가 발생하면 자동 배포가 된다.


여기서 ${{ secret.~~~ }} 으로 되어있는 부분은 원래라면 내 서버와 게정 정보들이 들어갈텐데 그렇게 되면 내 서버의 계정 정보가 노출되는 문제가 발생한다. 이를 방지하기 위해 Actions Secrets이라는 기능을 이용한다.

 


Settings -> Security -> Secrets and variables -> Actions 에서 New repository secret 을 통해 노출되면 안되는 정보들을 입력한다.

 


이런 식으로 등록하게 되면 이제 ${{ secret.HOST }} 를 통해 HOST 명을 호출할 수 있게 된다.

 


변수 설정과 yml 파일 설정을 마쳤다면
main 브랜치에 임의의 push 요청을 시도한다.

"자동 배포 테스트"라는 문구 추가 후 커밋

 

 


서버에 있던 README.md 파일도 수정된 것을 확인할 수 있다.

'Server' 카테고리의 다른 글

SFTP Chroot 감옥 사용자 생성  (0) 2024.04.01
아파치 HTTP 인증(Basic/Digest authentication) 적용  (0) 2022.04.28
MYSQL 외부접근 허용하기  (0) 2019.04.11
아파치 보안 설정  (0) 2018.04.11