엄격한 접속 환경의 서버에 bitbucket 기능들로 편하게 배포 하는 방법

BinaryWoo_dev·2023년 9월 23일
0

배포

목록 보기
1/1
post-thumbnail

서론


우리 회사에서는 다양한 유형의 건물들을 대상으로 건물 에너지 관리 솔루션을 구축 및 운영하고 있다.
그 중 대학교 캠퍼스 건물의 네트워크 및 보안 환경이 가장 까다로워 항상 배포할 때마다 아쉬움이 많았다. 예를 들어 릴리즈 빌드 파일이 로컬에 있어도 scp 또는 sftp 방식을 사용할 수가 없다. 무조건 해당 대학교 캠퍼스의 VPN 접속 프로그램으로 1차 접속 후, 원격 접속 프로그램으로 최종 서버 터미널에 접근하여 우분투 환경에서 git 브랜치 소스를 직접 내려받아 서버에서 빌드를 해야하는데, 빌드 시간이 너무 오래 걸리기도 하고 빌드 에러나는 경우가 잦았다. (이건 기존 패키지 관리가 제대로 안되어있어서 그런 것 같다.)

결론적으로 한 대학교 사이트의 서버에 원격 접속하여 배포 완료까지 평균 소요 시간이 약 20~25분 정도였다.
그래서 나는 나를 위해 우리 팀의 업무 효율성을 위해 이 부분을 너무 개선하고 싶어서 bitbucket 에서 제공하는 기능들을 통해 좀 더 간편하고 빠르게 배포하는 방법을 결국 찾아내었다. 우선 프로세스를 요약하자면 아래와 같다.

🔎 bitbucket 기능을 이용한 배포 개선 프로세스 요약

  1. 빌드 파일을 zip 형식으로 압축한 후, bitbucket 저장소의 [다운로드] 페이지에 업로드

  2. bitbucket 저장소의 환경설정(Repository Settings) 이동 후 Access tokens 페이지에서 릴리즈 버전명으로 Access token 생성

  3. pm2 stop <프로세스명> 명령어를 통해 해당 앱 프로세스 정지 시키기

  4. 서버 환경에서 앱 프로젝트 경로에 있는 기존 빌드(.next) 파일 삭제

  5. 아래의 형식에 맞춰 bitbucket 공식 API 명령문 실행 (API 공식 문서)

    curl -H "Authorization: Bearer <Access token hash key 입력>" -L -o <빌드 압축파일명>.zip https://api.bitbucket.org/2.0/repositories/<workspace명>/<저장소명(repo_slug 형식)>/downloads/<빌드 압축파일명>.zip
  6. 내려받은 빌드 압축파일을 unzip 패키지로 압축 풀고 zip 파일 삭제

  7. pm2 restart <프로세스명> 명령어로 애플리케이션 재시작

본론


1. 빌드 파일 준비하기 📦

먼저 로컬 환경에서 릴리즈 빌드 파일을 생성하여 zip 파일로 압축한다.

그 후, bitbucket 저장소의 Downloads 페이지에 빌드 zip 파일을 업로드 한다.

2. Access token 생성하기 🗝️

빌드 파일 준비를 완료하였다면 Bitbucket 에서 공식적으로 제공하는 API 를 통해 원격 저장소에 접근하여 다운로드 페이지에 업로드된 파일을 읽기 위한 key 를 발급해야한다.
Access token 은 저장소의 환경설정 페이지 > 보안 설정 - Access tokens 메뉴 페이지에서 아래와 같이 생성할 수 있다.
(저장소에 대한 읽기 권한만 요구되므로 나머지 권한은 굳이 부여하지 않았다.)

3. 애플리케이션 프로세스 가동 중지 및 기존 빌드 파일 삭제 🛑

  • 클라이언트 우분투 서버로 접속하여 pm2 list && pm2 stop <프로세스명> 명령어를 통해 현재 가동 중인 애플리케이션 프로세스를 중지시킨다.
    (나는 web 애플리케이션에 대한 릴리즈를 하기 위해 web 관련 프로세스를 중지시켰다.)

  • 그리고 ~/project/<프로젝트명> 경로에서 rm -rf .next 명령어로 기존 빌드 파일 (.next) 을 삭제합니다.

4. 릴리즈 빌드 파일 다운로드 📦

  • 아래의 명령어를 통해 새로 릴리즈할 버전의 빌드 파일을 bitbucket repo 다운로드 페이지로부터 내려받는다. (bitbucket 에서 제공하는 공식 API)
    curl -H "Authorization: Bearer <Access token hash key 입력>" -L -o <빌드 압축파일명>.zip https://api.bitbucket.org/2.0/repositories/<workspace명>/<저장소명(repo_slug 형식)>/downloads/<빌드 압축파일명>.zip

    API 상세 설명 🔎

    • curl: HTTP 요청을 만드는 데 사용되는 명령어.
    • -H "권한 부여: Bearer <액세스 토큰 해시 키 입력>": 이 옵션은 요청에 HTTP 헤더를 설정한다. 이 경우 "Bearer<액세스 토큰 해시 키 입력>" 값으로 "Authorization" 헤더를 설정합니다.
    • -L: 이는 HTTP 리디렉션을 따르도록 지시하는 curl의 또 다른 옵션이다. 요청된 URL이 리디렉션(예: 3xx HTTP 상태 코드)으로 응답하는 경우 curl은 자동으로 이를 따라 최종 목적지로 이동한다.
    • -o <다운로드 파일>: 이 옵션은 다운로드한 콘텐츠의 출력 파일을 지정한다. <파일명>은 다운로드한 파일에 부여하려는 실제 이름으로 바꿔야 한다. 이 파일은 현재 작업 디렉터리에 zip 파일로 저장된다. 예를 들어 파일 이름을 "mydownload.zip"으로 지정하려면 <압축 파일 이름 빌드>를 "mydownload"로 바꿔야 한다.
    • https://api.bitbucket.org/2.0/repositories/nxtechnologies/enbrix-web-app/downloads/<다운로드 파일>: HTTP GET 요청을 보내는 URL 즉, Bitbucket 저장소에서 파일을 다운로드하기 위한 Bitbucket 공식 API URL이다. <다운로드 파일>은 다운로드하려는 파일의 실제 이름으로 바꿔야 한다.

5. 릴리즈 빌드 파일 세팅 및 프로세스 재시작 🔄

  • 현재 경로로 다운로드 받은 zip 형식의 릴리즈 빌드 파일을 unzip <릴리즈 빌드 파일> 명령어를 이용하여 압축 해제한다. (unzip 패키지가 설치되지 않았을 경우, sudo apt install unzip 명령어로 설치)
  • 압축 해제 후, 생성된 새로운 .next 파일을 확인한 다음 pm2 restart enbrix-web 명령어로 프로세스를 재시작 한다.
    (정상 작동 확인 후, .zip 파일은 삭제해준다.)

결론


  • 💡 위의 방법대로 릴리즈를 시행했을 때, 총 소요 시간이 약 5분 정도 소요되어 기존 대비 약 75% 정도 빌드 작업 소요 시간을 단축시키는 결과를 만들어내어 이번 9월달 팀의 Web, Server 릴리즈 작업이 이전 대비 매우 간편해졌다는 것을 모두가 체감할 수 있었다.
  • 🧐 하지만, 앞으로 더 편하고 빠르게 빌드할 수 있는 방법이 얼마든지 존재할 것이라 생각하며, 계속 더 개선해나갈 생각이다. 왜냐하면 나는 이런거에 욕심이 많기 때문이다.
    수고 많았다. 내 자신. 토닥토닥
profile
매일 0.1%씩 성장하는 Junior Web Front-end Developer 💻🔥

0개의 댓글