Spring Boot App Build With Gradle Using Jenkins In AWS EC2
지난글 Install Jenkins In AWS EC2 에서 EC2 를 생성하고 Jenkins 를 설치하는 것을 정리해보았다.
Bucket 이름은 자유롭게 알아서 해준다. 나의 경우 spring-boot-app-jars 라는 이름을 정했고, region 은 서울로 했다.
여기서 중요한 포인트는 버전 관리를 하는 것이다. 동일한 이름으로 jar 를 S3에 저장할 것이다. 따라서 S3 에 jar Object 를 올릴 때 마다 S3가 해당 jar 파일의 버전을 관리해 줄것이다.
필자는 해당 S3에 대한 모든 퍼블릭 액세스를 허용했다. 아래의 이미지에서도 보이겠지만, 경고 메세지를 띄워주고 체크해줘야 한다. 실제 운영에서는 ACL 이나 Bucket Policy 를 통해서 접근제한을 해야한다.
자 이제 S3 Bucket 생성이 끝났다.
EC2 를 선택하고
아래와 같이 AmazonS3FullAccess 역할을 선택한다.
그리고 역할 이름은 임의로 설정한다.
그리고 EC2 로 돌아와서 Jenkins 가 설치된 인스턴스에 IAM 역할 연결/바꾸기를 한다.
방금 생성한 jenkins-s3-full-access 역할을 해당 EC2 인스턴스에 부여한다.
sudo wget https://services.gradle.org/distributions/gradle-6.4.1-bin.zip
sudo unzip -d /opt/gradle gradle-6.4.1-bin.zip
PATH=$PATH:/opt/gradle/gradle-6.4.1/bin
그리고 Global Tool Configuration 으로 들어간다.
Freestyle project 를 선택하고 item name 은 알아서 작성해주면 된다. Spring-Boot-App-Gradle-Build 라는 이름을 지어주었다.
Credential 은 Add 를 통해 새롭게 만들어준다. Username 과 Password 그리고 ID 를 Git 계정과 바르게 입력해주고 Add 를 통해 생성하고 지정해준다.
그리고 Build section 에서 Execute shell 을 선택하고, 이제 script 를 작성한다.
이번에는 설치한 Jenkins 를 이용해서 Spring Boot App 을 Build 하고 S3 에서 jar 를 관리하는 것을 정리해보겠다.
먼저, Spring Boot 프로젝트는 Git Repository 가 있다는 전제하에 진행하겠다.
필자의 경우 최근에 공부한 spring-security 프로젝트를 build 해 볼 예정이다.
그리고 Build Tool 은 Gradle 을 이용할 것이다.
또한, S3 에 build 한 jar 를 올릴거니까, S3 가 있어야 되며, EC2 안에서 AWS CLI 를 이용할 것이다.
Jenkins 로 Build 하려면 Jenkins 에게 권한을 줘야한다.
따라서, 정리하자면 아래의 순서대로 진행하겠다.
- Generate S3 for jar
- EC2 에 S3 FullAccess Role 부여
- Install Git
- Install Gradle
- Grant SU to Jenkins
- Jenkins JAVA_HOME, GRADLE_HOME, GIT PATH 설정
- Build Script 작성
먼저, jar 용 S3 를 aws console 을 이용해서 만든다.
다음은, Jenkins 가 설치된 EC2 가 S3 에 jar 를 올릴 수 있도록, Role 을 부여한다.
IAM 에 들어가서 역할을 만든다.
아래와 같이 AmazonS3FullAccess 역할을 선택한다.
그리고 역할 이름은 임의로 설정한다.
그리고 EC2 로 돌아와서 Jenkins 가 설치된 인스턴스에 IAM 역할 연결/바꾸기를 한다.
그렇다면, 지난번에 Jenkins 를 설치한 EC2 에 SSH 접속을 한다.
이제 Git 을 설치해보자.
sudo yum install git -y
설치가 완료되면, git --version 을 통해서 version 을 확인해본다.
다음은, Gradle 을 설치하자.
cd ~
sudo mkdir /opt/gradle
cd /opt/gradle
sudo mkdir /opt/gradle
cd /opt/gradle
sudo wget https://services.gradle.org/distributions/gradle-6.4.1-bin.zip
sudo unzip -d /opt/gradle gradle-6.4.1-bin.zip
PATH=$PATH:/opt/gradle/gradle-6.4.1/bin
gradle --version
Gradle 설치도 끝이났다. 그렇다면 다음에는 Jenkins 에게 SU 권한을 줘야한다. 왜냐면 Build 를 하는 과정에서 Jenkins 가 mkdir 등의 명령어를 수행할 수 있는 권한이 필요하다.
sudo su - 를 통해서 ec2-user -> root 로 변경된 것을 확인할 수 있다.
visudo 명령어를 통해서 vi editor 를 통해 su 의 권한을 설정합니다.JAVA_HOME, GRADLE_HOME, GIT_PATH 을 설정해서, Jenkins 에서 명령어를 사용할 수 있도록 하자.
Jenkins 에 어드민 계정으로 로그인하고 Jenkins 관리로 들어간다.
이제 앞서 설치했었던, JDK, Gradle, Git path 설정을 해준다.
이제 드디어 모든 준비가 되었고, Build Script 를 작성해보자.
새로운 Item 을 선택한다.
소스 코드 관리 section 에서 Git 을 선택하고 Repository URL Build 하려는 Repository URL 을 넣어준다.
나의 경우 https://github.com/ndgndg91/security 을 build 할 것이다.
아래와 같이 script 를 작성했다.
echo "spring-boot-app build start"
export PATH=$PATH:/opt/gradle/gradle-6.4.1/bin
gradle build --daemon
aws s3 cp /var/lib/jenkins/workspace/Spring-Boot-App-Gradle-Build/build/libs/*.jar s3://spring-boot-app-jars/security/spring-boot-app.jar
aws s3api list-object-versions --bucket spring-boot-app-jars --prefix security/spring-boot-app.jar
echo "spring-boot-app build end"
gradle 명령어를 사용할 수 있도록 export 문을 작성했고,
gradle build 명령문을 통해서 jar 를 생성한다.
생성된 jar 를 aws cli 를 이용해서 s3 에 올린다.
방금 올린 jar 에 관련된 version 정보를 출력하고 종료한다.
이제 생성한 프로젝트를 Build 를 하고 성공을 했다. log 를 확인하며 아래와 같이 확인이가능하다.
그리고 S3 에도 정상적으로 올라간 것이 확인이 된다.
이번 글은 여기까지이다.
다음은 Jenkins 를 이용해서 Spring Boot App 을 AWS Elastic Beanstalk 에 Blue/Green Deploy 를 정리해보겠다.
댓글
댓글 쓰기