개발 문제 해결 기록/프론트

[Spring] 깃허브 : 사이트 배포하기 (서버 내, Github Actions: 실습 예정)

육츠 2024. 10. 3. 17:09

GitHub Actions 공식 문서

GitHub Actions 사용시 장점

  • 자동화된 CI/CD 파이프라인
    • 코드가 GitHub 저장소에 푸시될 때마다 자동으로 테스트, 빌드, 배포 등의 프로세스를 실행할 수 있습니다. 이를 통해 코드 품질을 유지하고 배포 과정을 자동화할 수 있습니다.
    • CI/CD - 지속적 통합 Continuous Integration / 지속적 배포 Continuous Deployment, Continuous Delivery
      지속적 통합, 제공 및 배포를 포함한 앱 개발 단계를 자동화하는 방법을 말한다.
  • 유연성
    • GitHub Actions는 워크플로우를 정의할 수 있는 YAML 파일을 제공하므로 다양한 이벤트에 반응하도록 쉽게 설정할 수 있습니다. 예를 들어, 코드 푸시, 풀 리퀘스트 생성, 이슈 발생 등 특정 조건에 맞춰 작업을 트리거할 수 있습니다.
  • 확장성
    • GitHub Actions는 커뮤니티에서 만든 다양한 액션을 활용할 수 있어, 커스텀 스크립트나 도구를 쉽게 추가할 수 있습니다. 예를 들어, Docker 컨테이너 빌드, 테스트 자동화, 클라우드에 배포 등의 작업을 다양한 플러그인으로 처리할 수 있습니다.
  • 분산 실행
    •  GitHub Actions는 병렬 처리가 가능하며, 여러 플랫폼(MacOS, Windows, Linux)에서 워크플로우를 실행할 수 있습니다. 이로 인해 다양한 환경에서 코드를 테스트하고 빌드하는 것이 용이합니다.

 

과정 시작

1. 우선 깃허브 - 레퍼지토리 - main/origin 브랜치에 모든 코드를 올린다.

 

2. 서버 내

build.gradle 에 아래 코드를 추가한다.

Main-Class :
처음 프로젝트를 만든 경로를 넣으면 되며 마지막 [] 에는 프로젝트명 + APP / Application/-app 같이 다르게 넣으면 되는 것 같다.

jar {
    archiveBaseName = ''  // 원하는 JAR 파일 이름
    archiveVersion = '0.0.1'     // 버전 정보, 필요시 변경
    
	// 메인 클래스 정보 추가
    manifest {
        attributes(
            'Main-Class': '[].[].[]'  // 여기에 메인 클래스 경로를 입력하세요
        )
    }

 

터미널에서 gradle 빌드

./gradlew build

성공적으로 build가 된다면 

cd build/libs
ls

안에 [파일 이름]-[버전]-SNAPSHOT.jar 라는 파일이 존재할 것이다.

 

만약 여기서 -SNAPSHOT.jar 은 없고 -plain.jar 만 있다면, 아래 코드를 치면 된다. 
또한, 과정 중에 계속 생긴 파일들을 지우면서 만들고 싶다면 clean 을 가운데에 넣으면 된다.

./gradlew (clean) bootJar

-plain.jar 은 일반 JAR 파일이라 실행 파일이 아니므로, 배포를 위해서는 -SNAPSHOT.jar 파일을 사용해야한다.

 

build/libs 안에서 아래 명령문을 치면 서버 내 배포 완료

java -jar [파일이름].jar

 

서버 내 배포 확인 방법

우선 터미널에 아래 명령어를 쳐 inet 항목을 찾으면 나의 ip를 알 수 있다.

ifconpig

 

주소에 localhost:8080 대신 [ip]:8080 을 치면 제대로 배포 되었는지 확인할 수 있다.

만약 8080 말고 따로 지정한 포트가 있다면, 내가 지정한 포트 번호로 쳐야한다.

 

만약 터미널에서 Port 8080 was already in use. 오류가 뜬다면?

내가 현재 프로젝트를 열고 있는지 확인해보면 된다. 수정 중이라면 사용중인 터미널을 없애면 된다.

위: 원래 사용 / 아래: 터미널 사용 이었다면 다시 빌드하려는 터미널만 남겨두면 된다.

 


시도 예정

배포 

레퍼지토리 탭에 Actions 로 넘어가면 템플릿 선택하거나 워크플로우를 직접 생성하는 방법도 있다.

우선 포트폴리오 실습을 위해 연습하기 때문에 Java with Gradle 템플릿을 사용한다.

두 템플릿 차이

 

  • Publish Java package with Gradle:
    • 주로 Java 패키지를 배포하는 작업에 중점을 둔 워크플로우입니다.
    • Gradle을 사용하여 프로젝트를 빌드한 후, 패키지를 생성하고 Maven Central, JitPack, 또는 GitHub Packages와 같은 패키지 레지스트리에 배포하는 과정이 포함됩니다.
    • 즉, 이 워크플로우는 배포 단계까지 포함한 전체 라이프사이클을 관리합니다.
    • 주로 라이브러리나 모듈을 다른 프로젝트에서 사용할 수 있도록 패키지를 배포할 때 사용됩니다.
  • Java with Gradle:
    • Java 프로젝트를 빌드 및 테스트하는 기본적인 워크플로우입니다.
    • Gradle을 사용하여 코드를 빌드하고, 테스트를 실행하는 작업이 포함됩니다.
    • 패키지 배포는 포함되지 않으며, 주로 개발 중에 빌드/테스트를 자동화하는 데 사용됩니다.
    • 이 워크플로우는 애플리케이션의 코드를 자주 빌드하고 테스트할 때 사용되며, 배포는 별도의 단계로 처리합니다.