1. Spring Boot Application을 GitHub Actions로 배포하기
개념도
코드를 GitHub에 push하면 Github Actions가 cloudtype에 배포해준다.
2. pull request 생성할 때 테스트하고, main에 push 할 때 배포하기
- feature/* 브랜치를 만들어서 test 코드를 포함한 수정 작업을 완료한 뒤 pull request 생성
- Github Actions가 pull request 이벤트를 감지하고 해당 브랜치에 대해 gradle test를 수행
- test가 실패한 경우, test 코드를 수정하여 pull request에 반영
- pull request가 승인되면 main 브랜치에 merge되고
- cloudtype 서버에 배포
3. cloudtype이란?
cloudtype은 컨테이너 기반의 Paas(Platform as a Service) 클라우드 서비스이다.
3 - 1. 주요 특징
- 간편한 배포 프로세스
- GitHub 코드를 클라우드 서버에 직접 배포 가능
- 무료 서비스 제공
- 프리뷰 도메인과 HTTPS(TLS) 인증서 자동 발급
4. yml 파일 생성
.github/workflows에 deploy-main.yml 파일과 test-pr.yml 파일을 만든다.
위에서 설명한 것 처럼 pull request 이벤트가 감지되면 test-pr.yml에 의해 Github Actions가 동작하게 되고,
main에 push 이벤트가 감지되면 deploy-main.yml 에 의해 동작하게 된다.
4 - 1. test-pr.yml
name: test every pr
on:
workflow_dispatch:
pull_request:
permissions:
contents: read
pull-requests: read
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: setup jdk
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
- name: gradlew test
run: ./gradlew test
steps 항목에서 맨 마지막에 ./gradlw test를 수행하고 있다.
4 - 1 - 1. `./gradlew test` 와 `./gradelw clean test`
일반적인 개발 과정에서는 `./gradlew test`를 사용하는 것이 효율적이다.
`./gradlew clean test`는 이전 빌드의 영향을 받지 않는 깨끗한 환경에서 테스트를 실행하므로
- 빌드나 테스트에 문제가 있을 때
- CI/CD 파이프라인에서 실행할 때
- 최종 검증이 필요할 때
사용하면 적절하다.
따라서, 맨 마지막을 `./gradlew clean test`로 고치자
- name: gradlew test
run: ./gradlew clean test
4 - 2. deploy-main.yml
name: Deploy to cloudtype
on:
workflow_dispatch:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Connect deploy key
uses: cloudtype-github-actions/connect@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
ghtoken: ${{ secrets.GHP_TOKEN }}
- name: Deploy
uses: cloudtype-github-actions/deploy@v1
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
project: gotjd9773/github-ci-cd
stage: main
yaml: |
name: cicd
app: java@17
options:
ports: 8080
context:
git:
url: git@github.com:${{ github.repository }}.git
ref: ${{ github.ref }}
preset: java-springboot
현 시점에서 동작하지 않는 설정 파일이고,
cloudtype 토큰들을 입력해야하고 과 project 항목을 적절하게 변경해야 한다.
5. Github 설정 - cloudtype과 연동하기 위한 설정
https://github.com/settings/tokens 로 이동
5 - 1. Github Personal Token 발급하기
Github Personal Token을 생성하고 설정에서 secret으로 추가하는 작업이 필요하다.
Developer setting > Personal access tokens (classic)
Generate new token - Generate new token(classic)
필요 권한
- repo
- admin:public_key
토큰 생성이 완료되면 토큰 값이 표시된다.
토큰은 생성 시 최초 한 번만 값을 확인할 수 있으므로,
메모장에 복사에서 안전하게 관리해야 한다.
5 - 2. cloudtype 설정
cloudtype의 API Key 발급
오른쪽 상단 톱니바퀴 아이콘을 클릭하여 스페이스 설정 화면
계정 설정 탭에 인증 카테고리를 선택하고 새로운 API 키 생성 버튼 클릭
표시된 API 키 값은 다시 조회할 수 없으므로 메모장에 보관해야 한다.
5 - 3. cloudtype 프로젝트 생성
언어 프레임워크에 Spring Boot가 없다면, JVM 또는 Java를 선택한다.
버전을 프로젝트에 맞게 설정한다.
배포하기를 누르면 일단 실패한다.
아직 토큰들을 입력해주지 않았기 때문이다.
5 - 4. Github 설정
앞서 생성한 GitHub Personal Token을 저장소에 추가해준다.
Settings > Secrets > New repository secret
GitHub Personal token: GHP_TOKEN
cloudtype API Key: CLOUDTYPE_TOKEN
6. deploy-main.yml 에 project 항목 수정
cloudtype의 워크스페이스 이름과 프로젝트 이름을 확인한뒤
워크스페이스명/프로젝트명
을 project 항목에 기입해준다.
with:
token: ${{ secrets.CLOUDTYPE_TOKEN }}
project: gotjd9773/github-ci-cd
stage: main
yaml: |
7. Actions 탭에서 deploy 확인
8. 배포 확인
cloudtype에서 접속하기 버튼을 클릭
'인프라 > CI, CD' 카테고리의 다른 글
GitHub Actions로 구현하는 자동화된 테스트 기반 CI 파이프라인 (0) | 2024.12.10 |
---|---|
2024 12 9 TIL - GitHub Actions로 CI/CD 파이프라인 구축하기(Feat. AWS ECR, ECS) (2) | 2024.12.09 |
2024 12 6 TIL - AWS ECS, ECR, Gitlab CI로 CI/CD 파이프라인 구축하기 (2) | 2024.12.06 |
2024 12 5 TIL - CI/CD (1) | 2024.12.05 |