API 서버를 구축하기 전에 편리한 개발환경을 조성하는게 좋을 것 같다.
이런건 해본적도 없고 문외한이긴 하지만... 뭐 어떻게든 되겠지.
일단 내가 원하는 건 타겟 브랜치에 푸시 혹은 pr 이 될 경우 자동으로 API 서버에 배포되고 API 서버가 재시작하는 그림이고, 이걸 GitHub Actions 를 사용해서 구현하고자 한다.
사전에 GitHub 레파지토리를 생성하고 테스트를 위한 App.js 를 미리 푸시해두었다. (https://github.com/crazydj2/blog-backend)
import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.get('/', (req, res) => {
console.log('access......');
res.end('Test......');
});
// // [RUN SERVER]
const port = process.env.PORT || 8080;
const server = app.listen(port, () => {
console.log("Express server has started on port " + port)
});
// // CONNECT TO MONGODB SERVER
const db = mongoose.connection;
db.on('error', console.error);
db.once('open', function(){
// CONNECTED TO MONGODB SERVER
console.log("Connected to mongod server");
});
mongoose.connect('mongodb://localhost/test');
console.log('start......');
실제로 GitHub Actions 를 적용하기 전에, 내가 참조한 링크를 보는 게 더 도움이 될 것이다.
여기가 더 정리가 잘되어 있다;;;;;
runner 란?
Github Actions 를 실제로 돌리는 프로그램으로 하나의 Runner 당 하나의 Workflow를 수행할 수 있으며, Github 이 호스팅하는 Github-hosted Runner 와 직접 호스팅하는 self-hoted Runner로 두 가지 종류가 있다. (https://hyperconnect.github.io/2021/11/08/github-actions-for-everyone-1.html)
난 내 서버에서 돌려야 하니까 self-hosted runner 를 설치해야겠지?
먼저 GitHub 레포 -> Settings -> Actions -> Runners 화면으로 들어가 "New self-hosted runner" 버튼을 클릭해보자
이 버튼을 누르면 개발 환경에 맞게 Runner 를 설치할 수 있는 명령어들을 안내해준다.
난 리눅스니까 리눅스를 클릭하고 가이드대로 명령어를 실행해봤다.
먼저 다운로드 명령어부터...
# Create a folder
$ mkdir actions-runner && cd actions-runner
# Download the latest runner package
$ curl -o actions-runner-linux-x64-2.288.1.tar.gz -L https://github.com/actions/runner/releases/download/v2.288.1/actions-runner-linux-x64-2.288.1.tar.gz
# Optional: Validate the hash
$ echo "325b89bdc1c67264ec6f4515afda4534f14a6477d9ba241da19c43f9bed2f5a6 actions-runner-linux-x64-2.288.1.tar.gz" | shasum -a 256 -c
# Extract the installer
$ tar xzf ./actions-runner-linux-x64-2.288.1.tar.gz
난 리눅스에 shasum 이 안깔려있어서 추가로 설치하고 진행했었음... (yum install perl-Digest-SHA -y
)
마지막 명령어까지 다 입력하고 정상적으로 실행되었으면 아래와 같이 나온다.
이제 runner 환경설정 차례다.
뭐 똑같이 가이드한 명령어치면 된다. (명령어 내용을 보니 토큰을 가지고 GitHub 이랑 짝짜쿵하는듯)
# Create the runner and start the configuration experience
$ ./config.sh --url https://github.com/crazydj2/blog-backend --token ANUWPMEC45YHYTHQHVANN3LCGAO4A
# Last step, run it!
$ ./run.sh
다시 GitHub 레포 -> Settings -> Actions -> Runners 화면으로 들어가보면 방금 생성한 runner 가 추가되어 있는 것을 확인할 수 있다.
이제 YAML 파일을 작성해서 워크플로우를 정의하면 될듯하다.
먼저 .github/workflows 에 YAML 파일을 작성한다. (파일명은 상관없을듯?)
뭐 여러가지 시행착오를 겪었지만... 일단은 아래와 같이 작성해서 실행되는 것 확인했다.
name: api-server-deploy
on:
push:
branches: [ master ]
jobs:
api-server-deploy:
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
- name: remove
run: rm -rf /home/opc/api-server/*
- name: cp
run: cp -r ./* /home/opc/api-server/
- name: yarn install
run: yarn install
working-directory: /home/opc/api-server/
name: api-server-deploy
on: ...
jobs: ...
api-server-deploy:
runs-on: self-hosted
steps:
uses: actions/checkout@v2
name: remove
name: cp
name: yarn install
GitHub 내에서 나의 워크플로우 리스트, 러너 실행 내역들을 볼 수 있으며, 에러 내용도 나오니까 뭔가 잘 안되면 여기서 확인해보면 될듯.