일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- db
- MySQL
- Spring
- php
- laravel
- Design Patterns
- java
- Oracle
- Spring Batch
- redis
- it
- ubuntu
- AWS
- Spring Boot
- springboot
- IntelliJ
- tool
- ReactJS
- Gradle
- Git
- linux
- jsp
- 맛집
- jenkins
- elasticsearch
- javascript
- JVM
- 요리
- devops
- Web Server
Archives
- Today
- Total
아무거나
Gradle Multi Project 기반 Jenkins + S3 + Codedeploy + Codecommit 을 사용한 빌드 및 배포 구성 본문
Infra/AWS
Gradle Multi Project 기반 Jenkins + S3 + Codedeploy + Codecommit 을 사용한 빌드 및 배포 구성
전봉근 2021. 7. 21. 02:22반응형
java-example-code/sample-multi-module at master · bkjeon1614/java-example-code (github.com)
Project 최상위 경로에 Codedeploy로 배포에 사용할 appspec_api.yml
추가 (appspec_{원하는명칭}.yaml) 및 scripts/base-api
폴더 생성 후 deploy-before.sh
파일 생성
[appspec_api.yml]
version: 0.0
os: linux
files:
- source: /
destination: /home/ec2-user/build/
permissions:
- object: /
pattern: "**"
owner: ec2-user
group: ec2-user
hooks:
BeforeInstall:
- location: deploy-before.sh
runas: ec2-user
ApplicationStart:
- location: deploy.sh
runas: ec2-user
[deploy-before.sh]
if [ -d /home/ec2-user/build ]; then
sudo rm -rf /home/ec2-user/build/
fi
sudo mkdir -vp /home/ec2-user/build/
- Jenkins Job 추가
- Git 설정
- Jenkins Item > 구성 > 소스 코드 관리 항목에서
Git
선택 후Repository URL
입력 후Credentials
에서Add > Jenkins
클릭 후 하기 내용 입력- Domain: Global credentials (unrestricted)
- Kind: Username with password
- Scope: Global (Jenkins, nodes, items, all child items, etc)
- Username: Codecommit 계정정보 입력
- Password: Codecommit 계정정보 입력
- Jenkins Item > 구성 > 소스 코드 관리 항목에서
- Gradle Build 설정
- Jenkins Item > 구성 > Build 항목에서
Use Gradle Wrapper
선택 후Make gradlew executable
선택한 다음Wrapper location
에서${workspace}
입력 ( ${workspace}는 jenkins job item location ) - Tasks에 명령입력
// 매개변수 예시 포함 :base-api:clean :base-api:build -Pprofile=local -Djasypt.encryptor.password=bkjeon@! -Dmysql.aeskey=bkjeon@!
- Build 시작
- Jenkins Item > 구성 > Build 항목에서
- Jenkins Item > 구성 >
Execute Shell
추가 (Codedeploy 관련 파일들을 미리 압축하여 S3로 Upload해야 Codedeploy로 배포 또는 배포후에 관련 스크립트 파일들을 따로 실행할 수 있다. => Gradle Multi Project인 경우는 최상위 루트에 여러 모듈이 있으므로 모듈별 appspec.yml, buildspec.yml 등의 파일들이 명칭별로 관리가 필요)rm -rf build mkdir build cp ./base-api/build/libs/*.jar ./build cp ./appspec_api.yml ./build cp ./scripts/base-api/deploy-before.sh ./build cp ./scripts/base-api/deploy.sh ./build cd build zip -r base-dev.zip *
- S3 Upload 연동
- S3 publisher plugin 설치
- Jenkins 관리 > 시스템 설정 >
Amazon S3 profiles
에 계정정보 입력 후 Test Connection - Jenkins Item > 구성 > 빌드 후 조치 >
Publish artifacts to S3 Bucket
추가 Files to upload
추가 후 정보 입력- Source: Execute shell 에서 지정한 폴더위치와 파일을 입력한다. (ex: build/base-dev.zip)
- Destination bucket: 옮겨질 S3 버킷을 지정한다. (만약 버킷이 없다면 에러발생) (ex: bk.bucket/build/base/dev)
- Bucket Region: 버킷이 저장될 지역을 지정한다. ap-norheast-2 는 한국 리전이다.
- Code Deploy 생성
- Code Deploy 용도 IAM 생성
- IAM > 엑세스 관리 > 역할 >
AWS 서비스에서 Code Deploy 선택
> 선택 후 다음페이지에는 권한이 지정되어있으니다음 다시 클릭
> 태그는 생략(향후 필요시 사용) > 역할이름(ex: codedeploy-base-service-role) 입력 후역할 만들기
클릭하면 생성이 완료된다.
- IAM > 엑세스 관리 > 역할 >
- 배포할 EC2에 Code Deploy Agent 설치
$ sudo yum install -y ruby $ wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install $ chmod +x ./install $ sudo ./install auto $ rm -rf install $ sudo service codedeploy-agent status
- 애플리케이션 생성 > 애플리케이션 구성
- 애플리케이션 이름:
base-s3-ec2-deploy
- 컴퓨팅 플랫폼: EC2/온프레미스
- 애플리케이션 이름:
- 배포그룹 생성
- 배포그룹 이름:
base-dev
- 서비스 역할: 상기 생성한 Code Deploy
codedeploy-base-service-role
선택 - 배포유형: 현재위치(향후 필요시 변경가능)
- 환경구성:
Amazon EC2 인스턴스
> 기존 EC2에 설정한 Tag를 활용하여 지정 - AWS Systems Manager를 사용한 에이전트 구성:
지금 업데이트 및 업데이트 일정 예약
- 배포설정:
CodeDeployDefault.OneAtATime
설정- CodeDeployDefault.AllAtOnce:한 번에 가급적 많은 수의 인스턴스 어플리케이션 개정을 배포시도한다. 하나 이상의 인스턴스에 애플리케이션 개정이 배포되면 전체 배포 상태가 성공으로 표시.
- CodeDeployDefault.HalfAtATime:최대 절반의 인스턴스에 한번에 배포한다. 절반이상이 배포성공하면 전체 배포를 성공으로 표시.
- CodeDeployDefault.OneAtATime:한 번에 한 인스턴스에만 배포한다. 하나라도 틀리면 배포실패.
- 로드 밸런서 -> 로드 밸런싱 활성화 정책은 필요시 설정(해당 설명에서는 로드밸런싱을 안하므로 체크를 해제한다.)
- 배포그룹 이름:
- 배포생성
- 배포그룹: 상기 생성한 배포그룹인
base-dev
선택 - 개정유형:
플리케이션을 Amazon S3에 저장
- 개정위치: S3 업로드된 파일의
S3 URL 복사
후 입력 (ex: s3://bk.bucket/build/base/dev/base-dev.zip) - 그 외 다른 설정은 필요하면 선택하고 아니면
배포 만들기
클릭하면 배포가 진행되는것을 볼 수 있다.
- 배포그룹: 상기 생성한 배포그룹인
- Code Deploy 용도 IAM 생성
반응형
'Infra > AWS' 카테고리의 다른 글
[DynamoDB] Java 에서 BatchGetItem 사용 (WHERE IN) (0) | 2023.05.02 |
---|---|
AWS Lambda 와 SES(=Simple Email Service) 를 이용한 간단한 메일 발송 (NodeJS) (0) | 2022.12.01 |
AWS RDS MySQL VS Aurora (0) | 2021.06.30 |
elasticcache 도입 사례 및 사용법 (0) | 2019.12.24 |
[aws-sdk-java] s3에 파일업로드하기 (0) | 2019.06.24 |
Comments