[DevOps] Github Actions CI/CD
🥪 AWS 사용하기
대체로 서버 환경을 하나 만들어서 배포하는 것이 일반적인데, 그래서 AWS라는 클라우스 서비스를 많이 사용한다.
집에 PC가 많다면 24시간 PC를 구동시켜 서버를 돌려도 되지만..! 우리는 클라우드 서비스를 사용할 것이요! ☁️ ☁️
Github Actions를 통해서 CI/CD를 진행할 때 사용할 AWS 서비스는 크게 3가지다.
저장공간을 제공해주는 S3(Simple Storage Service), 어플리케이션 배포를 도와주는 CodeDeploy,
그리고 우리가 만든 결과물을 올릴 서버 인스턴스인 EC2(Elastic Compute Cloud)가 있다!
이번 포스팅에서 진행하는 전체적인 과정을 위 그림에 정리했다! 글로 조금 풀어서 다시 정리하자면..
1️⃣ 개발자가 깃허브에 코드를 push
2️⃣ Github Actions가 특정 브랜치에 push 발생한 것을 감지
→ 이 둘은 크게 CI(Continuous Integration) 과정이라고 볼 수 있다!
3️⃣ Github Actions가 deploy와 관련된 yml 파일을 읽고, 다음 동작을 수행
3️⃣-1️⃣ S3에 zip 형태로 파일 업로드
3️⃣-2️⃣ CodeDeploy를 통해 코드 배포
→ 여기까지 진행된거면 코드의 배포는 완료된 것이다!
4️⃣ EC2 인스턴스에 연결된 서버에서 Spring Boot로 실행
→ 배포한 어플리케이션이 잘 동작하는지 AWS가 제공한 서버에서 실행할 수 있다!
🍣 Github Actions 사용해서 CI/CD 진행해보기
github action과 aws code deploy를 이용하여 spring boot 배포하기(1)
Repository = action_codedeploy
isntyet.github.io
Github Action으로 CI/CD 구축하기 - 1편 : AWS EC2 생성 및 설정
Index
goodgid.github.io
Github Actions를 사용해서 CI/CD를 먼저 구현해보신 선배님들이 많으신데, 그 중에서 2개의 포스팅이 도움이 많이 되었다!
이미 잘 써놓으신 글보다 내가 더 잘 설명할 수도 없을 뿐더러.. 다시 쓰자니 남의 글을 카피하는 느낌 같아서 링크만 첨부하겠다!
3일 정도 삽질을 많이 해서.. 결국 Github Actions로 CI/CD에 성공했다! (중요한 건 꺾이지 않는 배포.. ㅡㅅㅡ)
블로그 2개의 글을 합쳐서 보다보니, 중간에 몇몇 단계들을 잘못 설정해서 서버로부터 200 OK를 받기까지 꽤 오랜 시간이 걸렸다..
아래 깃허브 링크는 배포 연습을 진행했던 리포지토리이다. 유출 방지를 위해 인스턴스랑 고정 IP는 블로그 포스팅 후 삭제했다!
GitHub - limjustin/Deploy-Practice: Github Actions, AWS Code Deploy 사용하여 CI/CD 연습
Github Actions, AWS Code Deploy 사용하여 CI/CD 연습. Contribute to limjustin/Deploy-Practice development by creating an account on GitHub.
github.com
위에서 말했는데, 중간에 몇몇 단계들을 잘못 설정하거나, 추가로 헷갈리는 부분들이 많았다.
서버로부터 200 OK를 띄우기 전까지, 내가 좀 애를 먹었던(?) 부분들을 이제 소개하겠다.
🍔 삽질의 흔적
1. CodeDeploy 설치를 위한 ruby의 버전
CodeDeploy Agent 라는 것이 과정 도중에 필요한데, 이는 ruby 언어로 쓰여져 있다고 한다.
그래서 Agent 설치 전, ruby를 설치해주어야하는데, 버전이 다른 각 ubuntu 환경마다 알맞은 ruby 버전이 있는 것 같다!
ubuntu에 맞는 ruby 버전은 구글링을 통해 찾아보면 되고, Agent 설치 방법과 ruby 설치 방법은 다음 포스팅을 참고했다.
[CodeDeploy]EC2 우분투 인스턴스에 CodeDeploy Agent 설치하기
배포할 서버에 접속하여 최초 한 번만 설치해주면 된다. 1. apt 저장소 업데이트1sudo apt-get update 2. ruby 설치CodeDeploy Agent는 ruby라는 프로그래밍 언어로 작성되어있다. 따라서 ruby를 설치해주어야 한
jinmay.github.io
Ruby, Ubuntu 20.04에 설치하는 다른 방법
다음 기사에서는 간단한 방법으로 Ubuntu 20.04에 다양한 버전의 Ruby를 설치하는 세 가지 방법을 살펴 보겠습니다.
ubunlog.com
그리고 ubuntu에서 패키지를 설치할 때 apt를 쓰는 사람도 있고, apt-get을 쓰는 사람도 있었다.
둘의 차이(로 인해 깔리는 파일이 달라지는 것은 아니다)에 대해 알고 싶다면 다음 포스팅을 참고하면 된다!
[Linux] apt와 apt-get 차이점
데비안 계열(Ubuntu, Mint 등)에서 사용하는 apt와 apt-get의 차이점
ksbgenius.github.io
2. deploy.yml에서 ubuntu 버전 체크
처음 EC2 인스턴스를 생성할 때, ubuntu의 버전을 고르는 화면이 있다.
그리고 Github Actions에서 작동하는 deploy.yml 파일에, 실행될 ubuntu 버전을 써주어야하는데, 이 둘을 꼭 일치시켜주어야 한다!
명심하자! 버전은 사소한 부분 같지만 매우 중요하다는 것을.. 🥲🥲
3. 배포 진행 관련 로그를 확인하고 싶다면?
CodeDeploy를 사용해서 배포할 때 단점 아닌 단점이.. 진행 상황을 보려면 로그를 직접 뜯어봐야 한다는 것이다.
개발자에게 로그를 뜯어보는 것은 일상이지만.. ㅋㅋㅋ 인스턴스에서 배포 로그를 확인하려면 다음 글을 참조하면 된다!
CodeDeploy EC2/온프레미스 배포에 대한 로그 데이터 보기 - AWS CodeDeploy
AWS Lambda 또는 Amazon ECS 배포에 대한 로그가 지원되지 않습니다. EC2/온프레미스 배포에만 사용할 수 있습니다.
docs.aws.amazon.com
4. Missing credentials
IAM(Identity and Access Management)은 말 그대로, AWS 리소스에 대한 '접근을 관리'한다.
EC2에서 배포를 담당하는 CodeDeploy에 접근하기 위해서 서로의 IAM Role을 설정해주어야하는데,
이 과정에서 'Missing credentials' 이라는 오류가 많이 뜬다. 다음 포스팅을 참고해서 해결한 경험이 있다!
[Tip] CodeDeploy 실패서, 조치방법.(Missing credentials)
Tech Note 정보 혀뇽뇽이 님이 작성하신 글입니다. 카테고리: [ Amazon Web Services ] 게시됨: 09 August 2018 작성됨: 09 August 2018 최종 변경: 09 August 2018 조회수: 9566 CodeDeploy 실패 원인은 많지만, Console에서
sarc.io
5. 배포 과정에서 생긴 문제
AWS 배포 화면에서 바로 초록불이 뜨면 좋겠건만..! 빨간불이 뜰 때도 있다 ㅠㅠ 그럴 때는 아래 포스팅도 자주 참고했었다!
[Codedeploy] 에러메세지 및 해결방법 정리
Codedeploy + Github actions 로 CI/CD를 구축하면서 엄청나게 많은 시도와 많은 에러메세지들을 만났었는데, 시도하면서 만난 에러메세지들과 해결방법들을 정리해두려고 한다. (Github actions에서 겪은 문
suyeoniii.tistory.com
여기에 참고된 포스팅들을 참고한다면, 대부분 문제는 잘 해결될 것이다..!!!
맨날 localhost에서 서버를 띄우다가, 할당 받은 웹 서버 IP에 내 코드의 결과를 띄우니 기분이 남달랐다.
먼가 우물 안에 있다가 큰 세상으로 한 발짝 나아간 느낌..? 로컬에서.. 실제 클라우드 웹 서버로!!
Github Actions가 젠킨스나 트래비스보다 더 간단하다고 하는데, 다음 번에는 젠킨스를 한번 사용해보고 싶다! 😃😃
🍰 Github Actions에서 민감 정보 다루기
Github Actions는 CI/CD 환경이 통합되어 있다. 그래서 최종적으로 push한 파일들이 모두 배포되는 형태이다.
하지만 DB를 연결하려고 하는데 문득 든 생각.. DB 관련 정보는 application.properties(혹은 yml) 파일에 넣어야하는데..
근데 민감한 파일 정보이므로 Github에 공개적으로 올라가지 않도록 .gitignore 파일에 등록한다면 파일이 안 올라가는데?
그러면 빌드, 배포 과정에서 application.properties 파일이 없으므로 DB에 관한 설정을 할 수 없다! 음.. 어떡하지? 🤔🤔
생각을 조금만 더 해보면 답이 나온다. 바로 배포 과정에서 application.properties 파일을 생성해주면 된다!!
Github Actions를 사용한다면 deploy.yml 이라는 파일을 통해 배포를 진행하는데, 이 단계 중에 파일 생성을 넣어주면 된다!
자세한 내용은 아래 블로그 포스팅을 참고했다! 그리고 actions/checkout 에 관련된 간단한 설명 포스팅도 올려놓았다!
[Github Action] Spring Application.properties 민감정보 관리하기
나의 Spring Boot project를 빌드/테스트 과정과 배포과정을 자동화 하기 위해 GitHub Action을 선택했다. Github Action을 통한 자동화는 너무 크게 어렵진 않았다. 하지만 고민거리가 하나 생겼다. application.
velog.io
GitHub Actions의 체크아웃(Checkout) 액션으로 코드 내려받기
Engineering Blog by Dale Seo
www.daleseo.com