우리 회사에서는 다양한 유형의 건물들을 대상으로 건물 에너지 관리 솔루션을 구축 및 운영하고 있다.
그 중 대학교 캠퍼스
건물의 네트워크 및 보안 환경이 가장 까다로워 항상 배포할 때마다 아쉬움이 많았다. 예를 들어 릴리즈 빌드 파일이 로컬에 있어도 scp 또는 sftp 방식을 사용할 수가 없다. 무조건 해당 대학교 캠퍼스의 VPN 접속 프로그램으로 1차 접속 후, 원격 접속 프로그램으로 최종 서버 터미널에 접근하여 우분투 환경에서 git 브랜치 소스를 직접 내려받아 서버에서 빌드를 해야하는데, 빌드 시간이 너무 오래 걸리기도 하고 빌드 에러나는 경우가 잦았다. (이건 기존 패키지 관리가 제대로 안되어있어서 그런 것 같다.)
결론적으로 한 대학교 사이트의 서버에 원격 접속하여 배포 완료까지 평균 소요 시간이 약 20~25분
정도였다.
그래서 나는 나를 위해 우리 팀의 업무 효율성을 위해 이 부분을 너무 개선하고 싶어서 bitbucket 에서 제공하는 기능들을 통해
좀 더 간편하고 빠르게 배포하는 방법을 결국 찾아내었다. 우선 프로세스를 요약하자면 아래와 같다.
🔎 bitbucket 기능을 이용한 배포 개선 프로세스 요약
빌드 파일을 zip 형식으로 압축한 후, bitbucket 저장소의 [
다운로드
] 페이지에 업로드bitbucket 저장소의 환경설정(Repository Settings) 이동 후
Access tokens
페이지에서 릴리즈 버전명으로 Access token 생성
pm2 stop <프로세스명>
명령어를 통해해당 앱 프로세스 정지
시키기서버 환경에서 앱 프로젝트 경로에 있는 기존 빌드(
.next
) 파일 삭제아래의 형식에 맞춰
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
내려받은 빌드 압축파일을
unzip
패키지로 압축 풀고 zip 파일 삭제
pm2 restart <프로세스명>
명령어로 애플리케이션 재시작
먼저 로컬 환경에서 릴리즈 빌드 파일을 생성하여 zip 파일로 압축한다.
그 후, bitbucket 저장소의 Downloads 페이지에 빌드 zip 파일을 업로드 한다.
빌드 파일 준비를 완료하였다면 Bitbucket 에서 공식적으로 제공하는 API 를 통해 원격 저장소에 접근하여 다운로드 페이지에 업로드된 파일을 읽기 위한 key 를 발급해야한다.
Access token 은 저장소의 환경설정 페이지 > 보안 설정 - Access tokens
메뉴 페이지에서 아래와 같이 생성할 수 있다.
(저장소에 대한 읽기 권한만 요구
되므로 나머지 권한은 굳이 부여하지 않았다.)
클라이언트 우분투 서버로 접속하여 pm2 list && pm2 stop <프로세스명>
명령어를 통해 현재 가동 중인 애플리케이션 프로세스를 중지시킨다.
(나는 web 애플리케이션에 대한 릴리즈를 하기 위해 web 관련 프로세스를 중지시켰다.)
그리고 ~/project/<프로젝트명>
경로에서 rm -rf .next
명령어로 기존 빌드 파일 (.next
) 을 삭제합니다.
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이다. <다운로드 파일>은 다운로드하려는 파일의 실제 이름으로 바꿔야 한다.
unzip <릴리즈 빌드 파일>
명령어를 이용하여 압축 해제한다. (unzip 패키지가 설치되지 않았을 경우, sudo apt install unzip
명령어로 설치).next
파일을 확인한 다음 pm2 restart enbrix-web
명령어로 프로세스를 재시작 한다..zip
파일은 삭제해준다.)5분
정도 소요되어 기존 대비 약 75%
정도 빌드 작업 소요 시간을 단축시키는 결과를 만들어내어 이번 9월달 팀의 Web, Server 릴리즈 작업이 이전 대비 매우 간편해졌다는 것을 모두가 체감할 수 있었다.