AWS DevOps
https://aws.amazon.com/ko/devops/what-is-devops/
1-1. 지속적 통합(CI; Continuous Integration)
빌드 및 테스트가 완료된 코드들을 중앙 레포지토리에 정기적으로
병합하는 소프트웨어 개발 방식
개발 및 테스트 ~ 통합
1-2. 지속적 전달(CD; Continuous Dilivery OR COntinuous Deploy)
프로덕션에 릴리즈(배포)하기 위한 코드 변경이 자동으로 빌드, 테스트 및
준비되는 소프트웨어 개발 방식
프로덕션 ~ 배포
1-3. 마이크로 서비스
1-4. 코드형 인프라
1-5. 모니터링 및 로깅
1-6. 커뮤니케이션 및 협업
DevOps를 사용하는 이유는?
CI/CD on AWS Workshop(Code Pipeline)
https://catalog.workshops.aws/cicdonaws/ko-KR
Source -> Build & Test -> Deploy
Source(AWS Code Commit)
Build(AWS Code Build)
Test(AWS Code Build & third party)
Deploy(AWS Code Deploy)
지속적인 통합을 통해 개발자는 Git과 같은 버전 관리 시스템을 사용하여 공유 저장소에 커밋.
각 커밋 전 개발자는 통합 전에 추가 검증 단계로 로컬 단위 테스트를 실행할 수 있다.
지속적 통합 서비스는 새 코드 변경사항을 자동으로 빌드하고, 단위 테스트를 실행하여
오류를 빠르게 발견한다.
지속적 통합은 소프트웨어 릴리스 프로세스의 빌드 및 단위 테스트 단계를 나타낸다.
커밋된 모든 리비전은 자동화된 빌드 및 테스트를 실행
지속적 전달을 통해 코드 변경 사항은 자동으로 빌드, 테스트 및 프로덕션 릴리스를 위해
준비된다.
빌드 단계 이후에 테스트 환경 또는 프로덕션 환경에 모든 코드 변경사항을 배포함으로써
지속적인 통합을 확장한다.
지속적 배포를 통해 개발자는 단순한 단위 테스트 이상의 테스트를 자동화할 수 있으므로
고객에게 배포하기 전에 여러 차원에서 애플리케이션 업데이트를 확인할 수 있다.
테스트의 종류에는 UI 테스트, 부하 테스트, 통합 테스트, API 안정성 테스트 등이 있다.
다양한 테스트를 통해 개발자는 업데이트를 보다 철저하게 검증하고 문제를 사전에 발견할 수
있다.
클라우드를 사용하면 이전에는 온프레미스에서 수행하기 어려웠던 테스트를 위해 여러 환경의
생성 및 복제를 쉽고 비용 효율적으로 자동화할 수 있다.
온프레미스(On-Premis)
기업의 서버를 클라우드와 같은 원격 환경에서 운영하는 방식이 아닌, 자체적으로
보유한 서버에 직접 설치해 운영하는 방식을 의미한다.
CI/CD Test
Virtual Box 포트포워딩 tomcat port:5000으로 변경
backend-test-cicd-main 접근해서 빌드
sh ./gradlew build
java -jar ./build/libs/codepipeline-0.0.1-SNAPSHOT.jar
접속 확인
깃허브 연동하기
- echo "# backend-cicd" >> README.md
- git init
- git branch -M main
- git remote add origin [Repository URL]
- git add -A & git add .
- git commit -m "Commit Message"
- git push -u origin main
AWS Code Pipeline
3-1. 1단계 - 파이프라인 기본 설정 추가
3-2. 변수 설정 & 고급 설정
기본값이 없을 경우 첫 번째 파이프라인 실행이 실패
아티팩트 스토어
기본 위치 또는 사용자 지정 위치를 설정하여 S3를 생성하거나 위치를 선택
암호화 키
기본 AWS 관리형 키 or 고객 관리형 키
4. Source 설정
Git 또는 Source Stage라고 하는 중앙(통합) 레파지토리를 추가
소스 공급자 설정(예제의 경우 GitHub ver2)
GitHub ver1과 ver2 차이점 : 깃허브 앱 사용 여부(ver1의 경우 ID, PW만 입력)
- All Repository
현재 파이프라인으로 내 깃허브 모든 레파지토리 연결
- Only Select Repository
특정 레파지토리만 연결
=> 나중에 수정하여 추가가 가능하다.
- 출력 아티팩트 형식
CodePipeline 기본 값 : zip 형태 사용
- 전체 복제
GitHub에 대한 메타데이터 전달(CodeBuild 시 사용이 가능)
트리거(Trigger)
소스 코드에 어떤 변화가 있을 경우에 동작을 위한 설정
필터 없음
필터 지정
특정 필터에 대해서만 파이프라인 시작(Commit Copy)
변경 사항 감지 안함
파이프라인을 자동으로 트리거 하지 않음(수동으로 실행)
5. 빌드 스테이지 추가
빌드 공급자 선택
AWS Codebuild
Jenkins 추가 : Jenkins Server 지정
환경
운영체제
Amazon Linux
Ubuntu
런타임
Standard
이미지 및 이미지 버전
서비스 역할(새 서비스, 기존 서비스)
만들기가 매우 귀찮음
환경 유형
Buildspec
1). 빌드 명령 삽입
편집기에 직접 명령어를 삽입하여 실행시킬 수 있다.
version: 0.2
phases:
install:
runtime-versions:
java: corretto17
# name: version
build:
commands:
- chmod 755 ./gradlew
- ./gradlew build
- mv build/libs/*.jar app.jar
artifacts:
files:
- app.jar
2). buildspec 파일 사용
3). 배치 구성
4). 로그
6. 배포 스테이지 추가
배포 공급자
AWS Elastic beanstalk
리전
아시아 태평양(서울)
애플리케이션 이름
환경 이름
7. 검토 후 파이프라인 생성 클릭
Source
Build
Deploy
파이프라인 생성 성공
소스 - 빌드 - 배포 테스트
자동화 진행 중
자동화 성공
파이프라인 편집
좌측 상단 편집하기 클릭
파이프라인 속성 수정
변수 설정 수정
트리거 수정
Source 수정
Build 수정
Deploy 수정
편집 완료 시 변경사항 릴리즈