[GitHub Actions]war 파일 빌드/배포하기
- -
농실농실 서비스를 운영하면서 매번 빌드/배포를 수동으로 하고 있었는데 언젠가 이 작업을 자동으로 바꾸고 싶었습니다. 해당 서비스는 Cafe24의 Tomcat 호스팅 서비스를 사용하고 있습니다. 자주는 아니었지만 서비스에 기능이 수정되거나 버그를 고칠때면 로컬에서 빌드 후 war 파일을 FTP로 올려주고 있었습니다.
오늘은 GitHub에서 제공하는 Git Actions을 통해 빌드된 war 파일을 Cafe24 서버로 배포하는 과정에 대해 알아보겠습니다.
※ 테스트 환경
- Spring Boot
- JDK 1.8
- Gradle
GitHub Actions
GitHub Actions는 GitHub에서 공식적으로 제공하는 빌드, 테스트 및 배포 파이프라인 자동화 도구입니다. 이를 통해 저장소에 특정 이벤트(Push, Pull Request)를 트리거하여 워크 플로우를 구성할 수 있습니다.
워크 플로우는 yml파일에 의해 구성되며 빌드, 테스트, 배포 등 기능에 따라 여러 개의 플로우를 만들 수도 있습니다.
1. Git Actions 설정
저장소에서 Actions - Java with Gradle 클릭합니다.
2. yml 파일 작성
영역 부분에 아래 코드를 붙여넣습니다.
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# This workflow will build a Java project with Gradle and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle
name: Java CI with Gradle
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 1.8
uses: actions/setup-java@v4
with:
java-version: '8.0.432+6'
distribution: 'temurin'
# Make properties
- run: touch ./src/main/resources/application.properties
- run : echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.properties
- uses: actions/upload-artifact@v4
with:
name: application.properties
path: ./src/main/resources/application.properties
- name: Execute permission for gradlew
run: chmod +x ./gradlew
# Build
- name: Build with Gradle
run: ./gradlew clean build
- name: Show war file
run: ls -ahl ./build/libs/*.war
# Deploy
- name: Deploy file
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:
server: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
local-dir: "./build/libs/"
server-dir: ${{ secrets.REMOTE_DIR }}
각 플로우를 하나씩 살펴보겠습니다.
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
- on.push.branches : 특정 브랜치에 푸쉬가 발생하면 워크플로우가 실행
- on.pull_request.branches : 특정 브랜치에 병합될 때 워크플로우가 실행
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Set up JDK 1.8
uses: actions/setup-java@v4
with:
java-version: '8.0.432+6'
distribution: 'temurin'
- jobs : 하나 이상의 단계로 구성된 작업
- runs-no : job이 실행될 환경을 정의
- permissions.contents : read - 저장소에 대한 읽기 권한만 부여
- steps : 빌드, 테스트, 배포 과정을 수행하는 액션으로 구성
- uses : 각 단계별 사용되는 액션
- with : 해당 액션에 정의되는 파라미터
- actions/checkout@v4 : 저장소의 코드를 체크아웃
- actions/setup-java@v4 : Java 개발에 필요한 도구를 설치
- name : 단계의 이름 설정(선택사항)
uses 액션에는 GitHub 마켓플레이스에 등록된 액션들을 사용할 수 있습니다.
# Make properties
- run: touch ./src/main/resources/application.properties
- run : echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.properties
- uses: actions/upload-artifact@v4
with:
name: application.properties
path: ./src/main/resources/application.properties
- run : 커맨드 실행
- touch ./src/main/resouces/application.properties / echo "${{ secrets.APPLICATION }}" > ./src/main/resources/application.properties : properties 파일 생성 후 secrets에 저장된 값을 복사
보통 properties 파일은 저장소에 보관되지 않기 때문에 환경변수로 등록한 후 배포시 파일을 생성/추가하는 방식으로 관리가 가능합니다. 환경변수 등록방법은 글 아래 3번을 확인해 주세요.
- name: Execute permission for gradlew
run: chmod +x ./gradlew
# Build
- name: Build with Gradle
run: ./gradlew clean build
- chmod +x ./gradlew : gradlew 파일 실행 권한을 부여
- ./gradle clean build : 빌드 실행
- name: Show war file
run: ls -ahl ./build/libs/*.war
- ls -ahl ./build/libs/*.war : 생성된 war 파일 확인
# Deploy
- name: Deploy file
uses: SamKirkland/FTP-Deploy-Action@v4.3.5
with:
server: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
local-dir: "./build/libs/"
server-dir: ${{ secrets.REMOTE_DIR }}
- SamKirkland/FTP-Deploy-Action@v4.3.5 : 마켓플레이스에 등록된 FTP 액션을 사용
- server : 호스팅 서버(카페24주소)
- username : 아이디
- password : 패스워드
- local-dir : 업로드할 로컬 폴더 경로
- server-dir : 원격 폴더 경로
3. 환경변수 설정
저장소에서 Settings - Secrets and variables - Actions을 통해 환경변수를 등록합니다.
4. Cafe24 설정
FTP를 통해 업로드되는 서버는 Cafe24입니다. Deploy 부분에서 몇번의 오류가 있었는데 오류의 원인은 Cafe24의 접속 설정을 수정함으로써 해결할 수 있었습니다. 해당 부분의 접속 제한을 해제합니다.
5. 테스트
이제 main 브랜치로 Push가 발생하게 되면 아래와 같이 build가 실행됩니다.
ROOT.war 파일이 정상적으로 전송된 것을 확인할 수 있습니다.
카페24에서 제공하는 호스팅 서비스는 기본적으로 ROOT.war 파일을 실행하게 됩니다. 따라서 build.gralde 파일에 아래와 같이 파일명을 ROOT로 만들수 있도록 수정했습니다.
war {
archiveBaseName = 'ROOT'
archiveFileName = 'ROOT.war'
archiveVersion = '0.0.0'
}
참고문서
'SCM & CI,CD' 카테고리의 다른 글
[Slack]Jenkins + Slack 연동 (0) | 2024.10.08 |
---|---|
[Jenkins]Git 연동 (0) | 2023.03.16 |
[Jenkins]SFTP를 이용해 배포하기 (0) | 2022.08.11 |
[Jenkins]Linux 환경 젠킨스 설치 (0) | 2021.12.20 |
.gitignore 관리하기 (0) | 2020.12.22 |
소중한 공감 감사합니다.