현재 Tiggle 프로젝트에서 NAS 서버에 도커를 통해 서버를 배포하고 있다.
배포자동화를 위해 Github Actions를 도입하였고 SSH 연결 부분에서 무지해서 발생한 일과 공부한 내용, 해결 방법을 적어보려한다.
server.sh
스크립트가 존재하여 docker-compose를 실행하고 있다.not found
: docker-compose.ymlls -al
명령어 실행 시 docker-compose.kafka.yml만 존재하는 문제가 있었다.docker-compose.yml을 상위 util 폴더에 생성하고 Tiggle 프로젝트 폴더에서 심볼릭 링크를 생성해서 사용하여 Github Actions에서 동작할 때 정상적으로 불러오지 못하는 문제가 발생했다.
name: Deploy to NAS Server
on:
push:
branches: [ main ]
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: ssh connect
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.PORT }}
- name: Run server.sh
run: |
ls -al
./server.sh
정답은 가까운 곳에 있었지만 팀원이 공유해준 내용과 한참을 찾은 뒤 알 수 있었다.
/home/runner/work/{repository}/{repository}
와 같은 경로가 사용된다.기존 util -> 프로젝트 폴더로 docker-compose.yml을 옮겨주면서 docker-compose.yml 인식은 정상적으로 해결 되었다.
배포가 성공적으로 이루어졌고, server.sh 스크립트도 제대로 실행된 것처럼 보이지만, 실제로는 실서버에 있는 Docker 컨테이너에 전혀 반영되지 않는 문제를 나타낸다.
pwd와 cd로 Tiggle 폴더를 찾았으나 이상한게 보였다.
cd /home
실행 후ls -al
실행하니 예상한 결과와 너무 달랐다.
GitHub Actions 공식 문서에 따르면, runner는 jobs에서 실행할 동작들을 실제로 실행하는 서버를 의미
GitHub Actions는 워크플로우를 실행하기 위한 다양한 운영체제를 제공하며, 여기에는 Ubuntu Linux, Microsoft Windows, macOS 등이 포함된다.
jobs를 통해 어떤 작업들을 어떤 환경에서 실행할 지 runs-on을 정해준다.
ubuntu-latest
Ubuntu 서버에서 작업이 실행됨을 의미ls -al
은 가상 환경의 runner 디렉토리 구조를 보여준다.
SSH 연결 후 script 사용
- ssh-action을 통해 원격 서버에 접속한 후, script 필드를 사용하여 명령어를 실행하면, 실서버에서 직접 실행할 수 있다.
- 실제 서버에서 스크립트를 실행하거나, 서버의 상태를 변경할 때 사용
대기업에서 Self-hosted runner를 이용한 CI/CD를 사용하고 있는 내용들이 있어 다음 내용으로 정리해봐야겠다.