Server

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

LimeLee 2023. 9. 5. 19:58

GitHub 리포지토리의 Actions 탭에서 CI/CD 플랫폼을 이용해 빌드, 테스트, 배포 등을 자동화할 수 있다. 공식 문서

이 GitHub Actions를 이용해 특정 브랜치에 push 이벤트가 발생할 때 설정된 서버로 자동 배포를 구현해보기로 한다.

 

1. GitHub Actions 설정

리포지토리의 Actions 탭을 클릭하면 자동화된 워크플로우를 설정할 수 있다. 

리포지토리마다 Actions 탭이 존재함

"Set up a workflow yourself" 옵션을 선택하여 직접 작성할 수 있다.

직접 작성할 거기 때문에 "set up a workflow yourself" 선택

 

 

GitHub Actions의 워크플로우는 YAML 파일로 작성되며, 공식 문서를 참고하여 문법을 확인할 수 있다.

 

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

 

예시 워크플로우 설정

아래는 main 브랜치에 push 이벤트가 발생할 때 서버에 자동으로 배포하는 간단한 예시이다.

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.HOST }}
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        port: ${{ secrets.PORT }}
        script: |
          cd ${{ secrets.PATH }}
          git pull origin main

 

  • on: 워크플로를 트리거하기 위한 이벤트를 정의
    main 브랜치에 push 이벤트가 발생할 때 워크플로우가 실행된다.
  • jobs: 이벤트가 발생했을 경우 수행할 작업을 정의
    build라는 이름의 작업이 정의했고, GitHub가 호스팅하는 최신 Ubuntu 머신에서 실행된다.
  • steps: 실행할 명령, 설정 작업
    서버에 자동 배포하는 명령을 수행한다. SSH 접근 후 git pull 명령어를 실행하는 식으로 구현했고 SSH 접근은  appleboy/ssh-action 을 사용하였다.

 

 

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

 

2. Actions Secrets 설정


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

 

Actions Secrets 설정 방법

1. 리포지토리의 Settings로 이동한다.

2. Security 섹션에서 Secrets and variables > Actions로 이동한다.

3. New repository secret을 클릭한다.

 

4. 아래와 같이 필요한 정보를 입력한다.

  • HOST: 서버의 IP 주소
  • USERNAME: SSH 사용자명
  • PASSWORD: SSH 비밀번호
  • PORT: SSH 포트 번호
  • PATH: 배포할 서버 경로

이렇게 설정하면, YAML 파일 내에서 ${{ secrets.HOST }} 같은 형태로 해당 정보를 안전하게 호출할 수 있다.

 

 

3. 자동 배포 테스트

설정이 완료되면, 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