코드 그라데이션

CI / CD 적용하기 본문

SpringBoot [예제] 블로그 만들기/CI, CD

CI / CD 적용하기

완벽한 장면 2023. 10. 26. 17:14

AWS IAM에 들어가 사용자 만들기

1
2

 

3

 

4

 

생성된 boot3을 클릭하여 [액세스 키 생성] 버튼 클릭 후 작업 시작

5

 

6

 

7

 

 

이제 값을 등록하기 위해

github 에 접속 후 Settings -> Secrets and Variables -> Actions 순서로 클릭

8

 

9

 

10

 

이러면 기본 세팅은 끝

 


이제 파일을 작성하면

가장 바깥 폴더에 .github 디렉토리 생성하고 workflow 디렉토리 하위에 생성 후 안에 cicd.yml 만들기

1

 

cicd.yml

name: CI/CD  # 이 워크플로의 이름

on:
  push:
    branches: [main]  # main 브랜치로 푸시되었을 때만 실행

jobs:
  build:
    runs-on: ubuntu-latest  # Ubuntu 환경에서 실행

    steps:
      - uses: actions/checkout@v3  # GitHub 리포지토리를 체크아웃

      - uses: actions/setup-java@v3  # Java를 설정합니다.
        with:
          distribution: 'corretto'  # Amazon Corretto를 사용
          java-version: '17'  # Java 17을 설치

      - name: Grant execute permission for gradlew  # gradlew 스크립트에 실행 권한 부여
        run: chmod +x gradlew

      - name: Build with Gradle  # Gradle을 사용하여 빌드
        run: ./gradlew clean build

      - name: Get current time  # 현재 시간을 가져옵니다.
        uses: josStorer/get-current-time@v2.0.2
        id: current-time
        with:
          format: YYYY-MM-DDTHH-mm-ss  # 시간 형식 지정
          utcOffset: "+09:00"  # UTC 오프셋 설정 (한국 시간: +09:00)

      - name: Set artifact  # 빌드 아티팩트를 환경 변수에 설정
        run: echo "artifact=$(ls ./build/libs)" >> $GITHUB_ENV

      - name: Beanstalk Deploy  # AWS Elastic Beanstalk로 배포
        uses: einaregilsson/beanstalk-deploy@v20
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}  # AWS 액세스 키 ID
          aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}  # AWS 시크릿 액세스 키
          application_name: Boot3  # Elastic Beanstalk 애플리케이션 이름
          environment_name: Boot3-env  # Elastic Beanstalk 환경 이름
          version_label: github-action-${{steps.current-time.outputs.formattedTime}}  # 배포 버전 레이블 설정
          region: ap-northeast-2  # AWS 리전 설정 (아시아 태평양 - 서울)
          deployment_package: ./build/libs/${{env.artifact}}  # 배포 패키지 경로 지정

 

작성 후 커밋, 푸시 완료하면

2

 

자동 배포 성공까지 확인할 수 있음.

 

그런데, 이 상태에서 주의할 점이 하나 있다.

테스트 코드에 대해서 계속 실패하므로,

설정을 하나 살짝 변경해준 게 있다.

 

build.gradle

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.0.2'
	id 'io.spring.dependency-management' version '1.1.3'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'

	implementation 'io.jsonwebtoken:jjwt:0.9.1'
	implementation 'javax.xml.bind:jaxb-api:2.3.1'

	implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

	implementation 'mysql:mysql-connector-java'

	runtimeOnly 'com.h2database:h2'

	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.projectlombok:lombok'

	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

// 이거
test.onlyIf {
	!project.hasProperty('test')
}

// 이거
jar {
	enabled = false
}

 

프로젝트가 다 마무리 되고, 배포를 중단하고 싶다면!

1

환경 종료를 선택하면 된다.

2

안내 메시지가 나오는데, 모든 것이 다 종료되므로, 주의해야 한다.

 

728x90

'SpringBoot [예제] 블로그 만들기 > CI, CD' 카테고리의 다른 글

[사전 지식] CI / CD  (0) 2023.10.25
Comments