Slack Bot 슬랙 봇을 이용한 Live Deploy (배포) 기능 만들기 (Feat. AWS CodeDeploy)

  • 실제 Live Deploy 사이트들은 훨씬 많지만, 예시를 위해 대표 사이트들만 보임
  • 그리고 마지막에 Cancel 선택한 이유는 진짜로 눌렀으면 Live Deploy 하는거라...;;

처음에는 슬랙 봇에 대한 막연한 관심(?)만 있었을 뿐인데, 이걸 제대로 해봐야지 했던 이유는 바로 TeamCity 때문이다.

TeamCity는 무료로 20개의 build configurations + 1 build agent 를 제공한다.
# TeamCity 로 AWS + GitHub + .NET Continuous Integration 만들어보기 (1) 에서 보면, 하나의 사이트를 Build + Staging + Production 구성으로 진행하다보니 사이트 몇 개 등록 했을 뿐인데 금방 20개가 다 차버리더라. 돈 내고 하나 올리려고 보니 돈이 꽤나 비싸더라 (+3 Agents 부터 시작하고 $1,999 라서...)

Live(Production) Deploy를 따로 Build 구성으로 빼뒀었다. 누구나 쉽게 Run 버튼 누르면 배포 될 수 있도록 하여 팀내 누구던 쉽게 배포 가능했고, 사람은 누구나 실수를 할 수 있었기 때문에 잘 확인해서 눌러주세요 하는 마음으로 빌드 구성을 따로 만들었었다.
하지만 회사에서는 계속 프로젝트가 생겨나고, 그에 따라서 여러 개의 프로젝트들을 계속 빌드 + 배포 해야 하는데, 빌드 구성이 모자라더라. 그래서 잘 사용하고 있는 slack 을 이용하여 배포를 할 수 있었으면 좋겠다고 생각, 바로 행동으로 옮겼다.

인지 하기 쉬워야했고, 쉽게 할 수 있는 방법을 찾다보니, Slack Real Time Message API 가 가장 좋았고, 그 후 선택은 interactive message menus 를 선택하여 추가 해두었다. AWS CodeDeploy를 사용하여 배포 구성이 되어져 있었기 때문에, CodeDeploy를 실행하는 것 까지가 Slack 이 해주는 역할이었다.

TeamCity 빌드 구성에 비하여 장점은 당연히 Live Deploy 빌드 구성을 삭제하였고, 그 삭제된 숫자 만큼 다른 프로젝트들의 Auto Build 와 Auto Staging Deploy가 생겨났다. (+ 돈도 굳었다...;)
단점은 동영상에도 말했듯이 예측 시간을 알 수가 없다. TeamCity 빌드 구성에서는 Agent로 하여금 해당 명령이 진행되고 있음을 ProgressBar로 남은 시간과 함께 열려주는데, 그에 대한 부분이 사라졌다. 사라진 부분은 좀 메꾸기 위해서 중간 단계에서 S3 Upload가 완료 되면 slack 으로 메시지를 쏴주었다. 또 하나의 단점은 Bot Server를 유지해야 한다는 점도 하나의 구성 단점이다. Teamcity만 보면 될 일을 이제는 Slack Bot Server가 꺼졌는지 확인을 해야 하는 정도? (Green Light 들어오면 되는거겠쥬ㅎㅎㅎ)


개발 이야기를 써야 하는데....

RTM API 를 사용하기 위해서 Slack Client 를 찾았다. node, python 쪽으로 아주 편하게(?) 만들어진 Client 들이 있다.
NodeJS를 이용하여 Botkit을 설치한 후 prototype 코드를 작성하고, bot server를 띄워서 확인한다.

이후 interactive message menus 를 만들기 위한 코드를 작성 하고, (사실 UI의 문제가 더 시간을 잡아먹는다-_-) Response URL을 설정하여 응답 payload에 대한 처리를 진행한다.

응답에 대한 처리를 진행하는 과정에서는 windows server를 사용하였는데, bat 배치 파일 실행 권한 문제를 쉽게 해결하고(?) - local system 으로 application pool setting - 그에 따라서 code deploy 배치파일이 실행됨

배치파일을 실행하면 S3 에 deploy 될 zip을 올림. S3 object created(PUT) lambda Event 로 slack 에 메시지 날림. 이후 Code Deploy 실행함. Code Deploy 성공/실패에 따라 SNS 로 알리고 lambda 로 slack 에 메시지 날림.

이렇게가 해당 기능의 spec; swag! -_- 언제 풀어 쓰냐?

Ssemi

Read more posts by this author.