특정 서버에 자동 배포 업무를 맡게 되면서 Jenkins와 AWS의 CodeDeploy, S3를 사용하였는데
설치 과정에서 만난 오류 과정을 공유하려 한다.
(특히 Ubuntu 20.04 버전에서 codeDeploy-agent 설치)
- 코드를 작성하고
Github
에 PR을 웹훅에 연결된 브랜치에 남기고 MERGE 하면
Jenkins
로 웹훅이 작동한다.Jenkins
에서 자동으로 빌드와 테스트가 이뤄지며 빌드의 결과물은AWS S3
에 보내주고,
AWS CodeDeploy
에 배포 요청을 한다.AWS CodeDeploy
는 연결된EC2
에 zip 파일을 풀고 배포 스크립트를 실행해 JAR 파일을 실행한다.
위 순서의 자동 배포 과정을 구현하는데 EC2에 codeDeploy-Agent를 설치하는데 많은 시간을 소모해서 정리해봤다.
상세하게 기록하고 싶었지만 맞이한 이슈와 해결과정만 기록한 점 양해 부탁드립니다.
제목에서 언급했듯이 서버 환경은 Ubuntu 20.04 버전입니다.
Jenkins
설치를 완료하고 AWS CodeDeploy
와 S3 버킷
과도 연결을 했고, Github
웹훅도 제대로 동작을 확인했을때 다음과 같은 오류를 맞이했다.
Jenkins
에서는 SUCESS BUILD
라고 나왔고, CodeDeploy
를 확인해본 결과 다음과 같은 오류 내용이 있었다.
이때만해도 '다행히 연동은 잘 됐나보다'
라고 긍정할 수 있었다.
그리고 View Details
에서 상세 오류 내용을 확인하면
EC2
에 codeDeploy-agent
가 실행되고 잘 연결되어야 codeDeploy
가 동작하는데 이전에 설치한 codeDeploy-agent
가 잘 실행되지 않았는지 확인해보았다.
확인 결과 활성화 상태가 failed
이다.
Amazon Linux 또는 RHEL용 CodeDeploy 에이전트 설치 - AWS CodeDeploy
위 글을 기반으로한 다양한 블로그 글을 따라해보았다.
(이때까지만해도 공식 홈페이지 글은 재미없고 그림이 별로 없어 기피했다.)
cd ~
wget https://aws-codedeploy-us-east-1.s3.us-east-1.amazonaws.com/releases/codedeploy-agent_1.3.2-1902_all.deb
바로 error
가 발생했다.
error
내용은 명령어가 잘못됐다는 내용이었다.
공식 홈페이지의 region-identifier
을 면밀히 확인한 결과 ap-northeast2
를 ap-northeast-2
로 바꾸니 해결되는 문제였다.
설치에 성공했고
chmod +x ./install
sudo ./install auto
에서 에러가 발생했다.
도저히 해결할 수 없어서 방법을 바꿨다.
검색 끝에 나와 비슷한 이슈를 가진 codeDeploy 설치 Issue 글에서 찾아 따라서 해보았다.
sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
- mkdir codedeploy-agent_1.3.2-1902_ubuntu20
- dpkg-deb -R codedeploy-agent_1.3.2-1902_all.deb codedeploy-agent_1.3.2-1902_ubuntu20
- sed 's/Depends:.*/Depends:ruby3.0/' -i ./codedeploy-agent_1.3.2-1902_ubuntu20/DEBIAN/control
- dpkg-deb -b codedeploy-agent_1.3.2-1902_ubuntu20/
- sudo dpkg -i codedeploy-agent_1.3.2-1902_ubuntu20.deb
잘 되다가 마지막 패키지를 설치할 때 설치가 잘 안되는 문제가 발생했다.
ruby
버전이 3.x 대가 아니어서 나는 문제 같아 ruby
를 설치하려고 노력했다.
(날로 먹으려 했지만 되지 않았다.)
ruby 3.0
설치는 간단한 명령어로 되지 않아 다른 방법으로 ruby 3
버전 대를 설치하려했다.
Ubuntu 20.04에서 Ruby 다른 방법으로 설치
검색 끝에 다른 방법으로ruby 3버전
을 설치하는 글이 있어 따라해 보았다.
- sudo apt install ruby-full
- ruby --version
- sudo apt update
- sudo apt install curl g++ gcc autoconf automake bison libc6-dev libffi-dev libgdbm-dev libncurses5-dev libsqlite3-dev libtool libyaml-dev make pkg-config sqlite3 zlib1g-dev libgmp-dev libreadline-dev libssl-dev
- gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
- curl -sSL https://get.rvm.io | bash -s stable
- source ~/.rvm/scripts/rvm
- rvm install 3.0.0
또 잘 되다가 마지막 install
부분에서 오류가 다음과 같은 발생했다.
해결을 하기위해 검색과 시도를 한 끝에 rvm 3 버전 설치 글을 발견해 과정을 따라갔다.
- rvm pkg install openssl
- rvm install ruby -3.0.0 --with-openssl-dir=/usr/share/rvm/usr
그러다 또 install
부분에서 비슷한 에러가 발생했다.
무슨 에러인지 정확한 원인을 모르겠지만 3.0.0 버전
의 설치가 안되는 것 같다.
그래서 최근 버전인 3.0.6 버전
으로 설치하니 잘 동작했다.
- rvm install 3.0.6 --default
위 명령어로 버전을 바꾸니 설치할 수 있었다.
그리고 위의 글(rvm 3 버전 설치)의 절차를 다시 따라가는데
- rvm group add rvm $USER
- rvm fix-permissions
자 이제 rvm
을 통해 설치를 마쳤으니 우분투 20.04 Ruby 3버전 설치을 따라 rvm 버전
을 적용하러 갔다.
- rvm use 3.0.6 --default
다행히도 재접속 후 명령어를 입력하니 해결되었다.
자 이제 다시 돌아가 CodeDeploy-Agent를 설치하는데
이전의 오류는 변하지 않았다. 무심코 욕이 나와버렸다.
이제 뭘 더 해야될지 감이 안 잡히다가 다시 처음으로 돌아가봤다.
AWS 공식 CodeDeploy-Agent 설치 글을 보고있는데 중간에 잘 안되니까 못 내려가서 못 봤었는데 예외 부분에Ubuntu 20.04
가 있는 것이었다. 아뿔싸!
공식 문서를 제대로 안 읽어본 나한테 열이 받으면서도 한편으로는 아직 희망이 있어 좋았다.
이제는 진짜AWS
만 믿고 가보자!!!
- sudo apt update
- sudo apt install ruby-full
- sudo apt install wget
- cd /home/ubuntu
- sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
일단 wget
명령어까지는 성공적
- sudo chmod +x ./install
- sudo ./install auto > /tmp/logfile
설명을 보니 install
할 때 ubuntu 20.04
문제는 logfile
지정에서 나는 오류인가보다. 그래서 ubuntu 20.04
에만 별도로 install
시에 로그 파일 위치를 따로 지정해준다. 다행히 여기까지 성공적이다.
aws s3 ls s3://aws-codedeploy-ap-northeast-2/releases/ | grep '\.deb$'
위 명령어를 통해 설치 가능한 버전을 확인한다.
AWS
말에 따르면 codeDeploy-agent
작동 최소 버전은 1.5
부터니까 가장 최근 1.6
으로 깔아본다.
- sudo ./install auto -v releases/codedeploy-agent-1.6.0-57_all.deb > /tmp/logfile
위 명령어를 쳤을때 따로 install
이 일어나지 않는다. (긴장된다. 이제 다른 방법이 떠오르지 않는다.) 찾아보다가 한 github issue
글에서 auto -> deb
으로 바뀌면 해결된다는 글을 보고 명령어를 바꿨다.
- sudo ./install deb
다행히 설치를 시작했고
설치 종료 후 상태 명령어를 쳐봤다.
- sudo service codedeploy-agent status
결과는????
드디어 ACTIVE
라는 선물을 얻을 수 있었다. 굉장히 뿌듯했다. 활성화 상태를 확인하고 또 다른 시련이 오기까지 뭐든지 할 수 있다는 자신감을 얻을 수 있었다.
배포 관련해서도 몇가지 문제가 있었다.
- IAM 권한이 없던 문제 ->
CodeDeployInstanceRole
IAM 부여로 해결overwrite
가 안되고 마지막 실패 케이스와 같은 이슈만 생기는 문제
-> 관련 배포 결과물 모두 삭제로 해결- 배포 스크립트가 일부 실행 안되는 문제
-> hooks 공식 문서를 참고하여 후크 목록을 언급돼있는 것만 사용해서 해결
성공만 해버리는 자동 배포가 되도록 만들 수 있었다.
어렸을 때부터 글이 많고, 그림이 없는 글은 기피하는 경향이 있었는데 요즘까지도 그러고있는 내 모습을 보니 개탄스러웠다. (하지만 아직도 AWS 글이 가독성이 떨어진다는 생각은 변함이 없다.)
앞으로의 문제는 가장 공신력있는 글에서 시작하고, 잘 기록하는 습관을 만들어야겠다고 생각된다.
그리고 확실히 인프라와 관련한 부분은 생각보다 어렵다. 환경설정부터 설치 부분에서 생각보다 초반에 어려움을 많이 겪어 예상보다 시간을 많이 잡아먹었다. 앞으로의 기한을 설정할때 초기 세팅을 고려해야겠다.