https://supersfel.tistory.com/368
이전에 라즈베리파이를 활용하여 서버를 만들어서 배포하는 작업을 했었는데, gitHub Action을 활용해서 main에 push가 될때마다 자동 배포를 진행해보고자 한다.
gitHub Action을 활용하면 깃허브에서 이벤트(push,commit,pull Request 등) 이 발생하였을때 특정 작업을 자동으로 진행하게 도와준다.
Event
push, pull request 등 깃헙에서 일어나는 여러 이벤트들을 의미하며 해당 이벤트와 작업을 연결하게 된다.
Workflows
Event와 연결되는 작업으로 Workflows 안에는 Job과 Step으로 구성되게 된다.
Job & Step
위 그림에서 볼 수 있듯이 Workflow의 구성요소이다. Job은 Step들로 이루어지게 된다.
step에는 명령어들을 직접 사용할수도 있고, 이미 만들어져 있는 action들을 활용할 수도 있다.
gitHub Action에 들어가면 현재 레포에 어울리는 여러 템플릿들을 소개시켜주는데, 필자는 node.js를 이용해서 빌드를 진행할 것이기 때문에
Node.js를 검색하여 사용해주겠다.
다음과 같은 창이 나오는데 차례대로 생각해보자.
on :
이벤트를 관리하는 부분이다. 어떤 이벤트랑 github action을 활용할 것인지 선택하면 된다.
jobs :
실행될 내용을 적어주는 부분이다.
strategy:
여러 버전들을 동시에 관리할 수 있게 해주는건데.. 필자는 사용하진 않았다.
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
name: Node.js CI
on:
push:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Deploy to Server
uses: appleboy/ssh-action@v0.1.7
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
script: |
cd pi
sudo ./deploy.sh
본인이 사용한 방식은 다음과 같다. 우선, 라즈베리파이에 ssh연결을 해야 했는데 github action에 올라와져 있는걸 활용했다.
yml파일을 적을때 우측에 나오는 marketplace에서 사용법을 보다 자세히 알 수 있다.
쓱 보면 알겠지만, hlst,username,password,port 를 통해서 해당 정보로 ssh에 접속하고 들어가서 script를 실행시켜 준다.
그런데 해당 부분들이 변수로 되어있는데 이는 secret key이다.
각 레포 - 설정 - security - secrets and variables - Actions 탭에 들어간 후
New repository secret를 눌러 해당변수의 값을 지정해줄 수 있다.
필자의 script는 배포를 하기엔 상당히 간단하게 되어 있는데
접속을 한 후, pi란 폴더에 들어간 후 deploy.sh 쉘 스크립트 파일을 실행하게 해 두었다.
즉, 배포에 필요한 명령어들은 deploy.sh 안에 적어두었다.
필자는 쉘 스크립트를 잘 다루지는 못한다... 따라서 기본적인 방식으로 배포를 진행하였다.
fe,be를 각각 빌드시키고 실행해주었다.. 이부분은 조금 더 학습이 필요해 보인다.
아무튼 해당 yml파일을 다 만들고 commit을 하면 yml 파일이 저장되고 곧바로 build파일이 실행된다.
만약, main 브런치에 push가 동작하게 되면
다음처럼 Action 탭에서 자동 배포가 진행되는것을 확인할 수 있다.
안을 들어가면 어떠한 방식으로 진행되는지, 오류가 나도 어디서 오류가 나왔는지 확인할 수 있다.
'BackEnd > Server' 카테고리의 다른 글
서버 도메인 달아주기 (0) | 2023.01.27 |
---|---|
ncloud MySQL 서버 배포 (0) | 2022.09.14 |