본문 바로가기

프로젝트

[ AWS ] Jenkins과 Elastic beanstalk을 통한 애플리케이션 배포

1. EC2 인스턴스 생성

   - Amazon Linux 프리티어 환경

   - SSD 30GB [ 프리티어 제한 ]

   - 보안 그룹으로 제한 [ SSH 접근은 내 IP만 가능하게 적용 ]

2. EC2 SSH 접속

Key-Pair(*.pem) 파일 권한 변경

chmod 400 {파일 이름}.pem

 

pem 파일을 사용해 EC2에 접속

ssh -i "{파일 이름}.pem" {IAM유저}@{접속IP OR 접속URL}

3. Java 및 Jenkins 설치

sudo yum upgrade

# jenkins 저장소를 yum에 다운로드 
sudo wget -O /etc/yum.repos.d/jenkins.repo \
    https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

# 아마존 자바 17버전[팀 자바 버전] 설치 [ 11버전 이상만 쓰면 문제 X ]
sudo yum install java-17-amazon-corretto.x86_64

# jenkins 설치
sudo yum install jenkins

# jenkins 시작
sudo service jenkins start

4. EC2 보안정책 변경

Jenkins 기본포트 8080을 TCP 프로토콜로 보안정책에 추가

5. 브라우저에서 Jenkins 접속 확인 및 Jenkins Unlock

Unlock 비밀번호 확인

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

 

AWS EC2의 URL의 8080포트로 접속 및 비밀번호로 입력 

6. Git 설치

sudo yum install git

7. EC2 jenkins 유저 sudo 권한 부여

이유

   jenkins 유저 /var/lib/jenkins/workspace 접근을 위해 sudo 권한 부여

 

이슈

   jenkins 유저에게 sudo 권한을 부여하는 것이 옳은지 고민하고 다른 방법이 있는지 고민이 필요

 

sudo 권한 파일 접근

sudo visudo

 

jenkins 권한 부여

root    ALL=(ALL)       ALL
jenkins ALL=(ALL)       NOPASSWD: ALL (추가해야 하는 부분)

 

8. Jenkins에 Git Credentials 설정

Git Token 발급

   ( Settings - Developer Settings - Personal access tokens - Tokens )

 

Jenkins에 Git Credentials 등록 

   ( Dashboard - Jenkins 관리 - Credentials - Global Credentials - New Credentials)

   Kind : Username with password 선택

   Scope : Gobal 선택

   Username : Git 아이디 입력

   Password : 발급받은 Git Token 입력

   ID : 임의의 값 입력 ( Git에서 Jenkins Credential로 전달하는 식별 값 )

9. AWS Credentials 등록

   ( Dashboard - Jenkins 관리 - Configure System )

   Global Properties의 Environment variables에 AWS 정보 입력

      - AWS_ACCESS_KEY_ID AWS_DEFAULT_REGION, AWS_SECRET_ACCESS_KEY 

 

10. Jenkins에 배포 등록

build 단계

   Repository URL : 가져올 Git URL 입력

   Credentials : 등록해 놓은 Git Credentials 선택

   Branches to build : 가져올 Branch 입력 

 

     Build Steps : Excute Shell 선택 

./gradlew clean buildZip

upload 단계

   Build Steps: Excute Shell 선택

aws s3 cp {EC2의 업로드할 파일 경로} {S3 업로드 경로} --region ap-northeast-2

 

deploy 단계

   Build Steps : Excute Shell 선택

Version=$(date '+%Y-%m-%d_%H%M')

# ELB에 배포 버전 생성
aws elasticbeanstalk create-application-version --region ap-northeast-2 \
--application-name {ELB application 이름} --version-label $Version \
--source-bundle S3Bucket="{버킷 이름}",S3Key="{S3 파일 경로}"

# ELB에 Application 배포
aws elasticbeanstalk update-environment --region ap-northeast-2 \
--environment-name {ELB application env 이름} \
--version-label $Version