코딩과 결혼합니다

YAML 코드 분석 본문

청첩장/결혼식장 : 코린이의 저장소

YAML 코드 분석

코딩러버 2023. 8. 7. 00:06
728x90
name: Build and Deploy Spring Boot to AWS EC2

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

permissions:
  contents: read

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - name: Set up JDK 17
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'temurin'

    # 새로 추가된 부분
    - name: Grant execute permission to gradlew
      run: chmod +x ./gradlew
    # 여기까지

    - name: Build with Gradle
      uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
      with:
        arguments: build

    - name: Deploy Prod use SCP
      uses: appleboy/scp-action@master
      with:
        username: ubuntu
        host: ${{ secrets.HOST }}
        key: ${{ secrets.PASSWORD }}
        source: "./build/libs/*.jar"
        target: "/home/ubuntu/deploy"
        strip_components: 2
        
    - name: Transfer Deploy Script use SCP
      uses: appleboy/scp-action@master
      with:
          username: ubuntu
          host: ${{ secrets.HOST }}
          key: ${{ secrets.PASSWORD }}
          source: "deploy.sh"
          target: "/home/ubuntu/deploy"

    - name: Execute Server Init Script
      uses: appleboy/ssh-action@master
      with:
          username: ubuntu
          host: ${{ secrets.HOST }}
          key: ${{ secrets.PASSWORD }}
          script_stop: true
          script: chmod +x /home/ubuntu/deploy/deploy.sh && sh /home/ubuntu/deploy/deploy.sh

위 코드는 GitHub Actions을 사용하여 Spring Boot 애플리케이션을 빌드하고 AWS EC2 인스턴스에 배포하는 작업을 정의한 YAML 파일입니다. 여기에서는 Gradle을 사용하여 애플리케이션을 빌드하고 SCP를 사용하여 빌드된 JAR 파일과 배포 스크립트를 AWS EC2 인스턴스로 전송한 후 SSH를 사용하여 인스턴스에서 배포 스크립트를 실행합니다.

여러 단계로 구성된 작업은 다음과 같이 실행됩니다:

  1. GitHub 저장소에 변경 사항이 푸시 또는 풀 리퀘스트가 생성될 때 작업이 실행됩니다. 브랜치는 "main"으로 설정되어 있습니다.
  2. 빌드 단계: Ubuntu 환경에서 실행됩니다.
  3. GitHub Actions에서 소스 코드를 체크아웃합니다.
  4. JDK 17을 설치합니다.
  5. gradlew 스크립트에 실행 권한을 부여합니다.
  6. Gradle을 사용하여 프로젝트를 빌드합니다.
  7. 애플리케이션 JAR 파일을 SCP를 사용하여 AWS EC2 인스턴스로 전송합니다. $secrets.HOST, $secrets.PASSWORD는 GitHub Secrets로 설정된 값을 사용하여 인스턴스에 연결합니다.
  8. 배포 스크립트 deploy.sh를 AWS EC2 인스턴스로 전송합니다.
  9. SSH를 사용하여 AWS EC2 인스턴스에서 배포 스크립트를 실행합니다. chmod +x 명령을 사용하여 스크립트에 실행 권한을 부여하고, sh를 사용하여 스크립트를 실행합니다.

위 코드에서 ${{ secrets.HOST }}와 ${{ secrets.PASSWORD }}는 GitHub Secrets에 저장된 호스트 및 비밀번호 값으로 대체됩니다. 이러한 값들은 보안을 위해 저장소의 Secrets에 설정되어야 합니다.

이 작업을 사용하려면 다음 단계를 따라야 합니다:

  1. AWS EC2 인스턴스를 설정하고 SSH 키를 생성합니다.
  2. AWS EC2 인스턴스에 대한 호스트 및 비밀번호 정보를 GitHub Secrets에 저장합니다.
  3. Gradle 빌드 스크립트와 배포 스크립트를 프로젝트 루트에 생성합니다.
  4. 위의 YAML 파일(.github/workflows/build-and-deploy.yml)을 프로젝트 루트에 생성합니다.

GitHub Actions를 설정하여 Spring Boot 애플리케이션을 자동으로 빌드하고 배포할 수 있습니다. 하지만 주의할 점은 보안에 유의해야 하며, Secrets에 민감한 정보를 저장하는 경우 반드시 적절한 보안 조치를 취해야 합니다.