[CI/CD] CI/CD 파이프라인 구축 (Github Actions) + 코드 수정으로 CI/CD 확인

2023. 12. 28. 21:09· DevOps/CI,CD
목차
  1. 1. Github Actions로 CI/CD 파이프라인 구축 방법
  2. 2. 코드 수정을 통해 통합 + 제공 + 배포 자동화 확인

2023.12.28 - [CI,CD] - [CI/CD] Docker로 프로젝트 배포 및 중단

 

[CI/CD] Docker로 프로젝트 배포 및 중단

2023.12.28 - [CI,CD] - [CI/CD] AWS EC2 인스턴스 SSH 접속 + Docker 설치 [CI/CD] AWS EC2 인스턴스 SSH 접속 + Docker 설치 2023.12.28 - [CI,CD] - [CI/CD] AWS EC2 인스턴스 생성 방법 [CI/CD] AWS EC2 인스턴스 생성 방법 1. 기본

blogan99.tistory.com

 

1. Github Actions로 CI/CD 파이프라인 구축 방법

  • 이전 게시글에서 생성해 둔 레포지토리와 샘플 프로젝트 사용

 

1-1. Github Actions 시작

  • 레포지토리에 들어가서 Actions 탭 클릭

 

  • Get started with GitHub Actions > Java with Gradle 클릭 (없다면 검색)

 

  • 생성된 gradle.yml 에 아래 코드 붙여넣기 -> 커밋
# Workflow 이름
name: Spring Boot & Gradle CI/CD

# 어떤 이벤트가 발생하면 workflow 실행할 지 명시
on:
  # main 브랜치에 push나 pull request 발생 시
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

# 위 이벤트 발생 시 실행될 작업들
jobs:
  build:
    # VM의실행 환경 지정 => 우분투 최신 버전
    runs-on: ubuntu-latest

    # 실행될 jobs를 순서대로 명시
    steps:
    - name: Checkout
      uses: actions/checkout@v3

    # JDK 21 설치
    - name: Set up JDK 21
      uses: actions/setup-java@v3
      with:
        java-version: '21'
        distribution: 'temurin'

    # Gradle Build를 위한 권한 부여
    - name: Grant execute permission for gradlew
      run: chmod +x gradlew

    # Gradle Build (test 제외)
    - name: Build with Gradle
      run: ./gradlew clean build --exclude-task test

    # DockerHub 로그인
    - name: DockerHub Login
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_PASSWORD }}

    # Docker 이미지 빌드
    - name: Docker Image Build
      run: docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.PROJECT_NAME }} .

    # DockerHub Push
    - name: DockerHub Push
      run: docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.PROJECT_NAME }}

    # EC2 인스턴스 접속 및 애플리케이션 실행
    - name: Application Run
      uses: appleboy/ssh-action@v0.1.6
      with:
        host: ${{ secrets.EC2_HOST }}
        username: ${{ secrets.EC2_USERNAME }}
        key: ${{ secrets.EC2_KEY }}

        script: |
          sudo docker kill ${{ secrets.PROJECT_NAME }}
          sudo docker rm -f ${{ secrets.PROJECT_NAME }}
          sudo docker rmi ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.PROJECT_NAME }}
          sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.PROJECT_NAME }}

          sudo docker run -p ${{ secrets.PORT }}:${{ secrets.PORT }} \
          --name ${{ secrets.PROJECT_NAME }} \
          -e SPRING_DATASOURCE_URL=${{ secrets.DB_URL }} \
          -e SPRING_DATASOURCE_USERNAME=${{ secrets.DB_USERNAME }} \
          -e SPRING_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }} \
          -d ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.PROJECT_NAME }}

 

 

1-2. 개인 정보를 위해 변수로 선언한 정보를 설정

  • Settings > Secrets and Variables > Actions 클릭

 

  • New repository secret 클릭 (환경 변수 추가) 

  • Name : Secret 형식
    • DOCKERHUB_USERNAME : 회원가입 한 Docker Hub의 username
    • DOCKERHUB_PASSWORD : 회원가입 한 Docker Hub의 비밀번호
    • PROJECT_NAME : 프로젝트 이름
      • 해당 이름으로 Docker Hub에 올라가게 됨
      • 또한 Docker Container도 해당 이름으로 설정됨
    • PORT : 8080
    • DB_URL : jdbc:mysql://[RDS의 엔드포인트]:[포트번호]/[DB 이름]
    • DB_USERNAME : RDS의 마스터 사용자 이름
    • DB_PASSWORD : RDS의 마스터 비밀번호
    • EC2_HOST : 인스턴스의 퍼블릭 IPv4 DNS
    • EC2_USERNAME : 인스턴스의 username (ex: ubuntu)
    • EC2_KEY : 생성한 key pair (pem 키) 값
      • 터미널에서 명령어   cat [pem 키 경로]    를 통해서 확인
      • -----BEGIN RSA PRIVATE KEY----- 와 -----END RSA PRIVATE KEY----- 포함한 값 붙여넣기

 

1-3. Actions 동작 확인

  • 다시 Actions 탭으로 돌아가서 Re-run

  • build 가 완료되면 Github Actions 를 통한 CI/CD 파이프라인 구축 완료

 

 

2. 코드 수정을 통해 통합 + 제공 + 배포 자동화 확인

 

2-1. 배포 결과 확인

  • 주소창에 [인스턴스 퍼블릭 IPv4 DNS]:8080 입력하여 배포 결과 확인

 

2-2. 코드 수정 후 깃허브에 푸시

  • 수정된 결과가 자동으로 통합부터 배포까지 이루어지는 지를 확인하기 위함
  • 수정 결과를 한 눈에 보기 쉽게 "회원가입 한 유저 리스트" -> "회원가입 명단 리스트" 로 변경
  • 변경 후 깃허브에 푸시
  • 푸시 후 2~3분 후에 새로고침

 

깃허브에 코드 수정 내용을 푸시만 했을 뿐인데 자동으로 수정 결과 반영되어 배포됨

즉, CI/CD 파이프라인이 제대로 구축되었음을 확인

저작자표시 변경금지 (새창열림)

'DevOps > CI,CD' 카테고리의 다른 글

[CI/CD] Spring 프로젝트 AWS CodePipeline 사용한 배포 자동화 적용 방법  (0) 2024.11.12
[CI/CD] Docker로 프로젝트 배포 및 중단  (0) 2023.12.28
[CI/CD] AWS EC2 인스턴스 SSH 접속 + Docker 설치  (0) 2023.12.28
[CI/CD] AWS EC2 인스턴스 생성 방법  (0) 2023.12.28
[CI/CD] AWS RDS 생성 방법 + MySQL 워크벤치와 연동  (0) 2023.12.27
  1. 1. Github Actions로 CI/CD 파이프라인 구축 방법
  2. 2. 코드 수정을 통해 통합 + 제공 + 배포 자동화 확인
'DevOps/CI,CD' 카테고리의 다른 글
  • [CI/CD] Spring 프로젝트 AWS CodePipeline 사용한 배포 자동화 적용 방법
  • [CI/CD] Docker로 프로젝트 배포 및 중단
  • [CI/CD] AWS EC2 인스턴스 SSH 접속 + Docker 설치
  • [CI/CD] AWS EC2 인스턴스 생성 방법
공대생안씨
공대생안씨
전자공학과 학부생의 코딩 일기
공대생의 코딩 일기전자공학과 학부생의 코딩 일기
티스토리
|
로그인
공대생안씨
공대생의 코딩 일기
공대생안씨
글쓰기
|
관리
전체
오늘
어제
  • All Categories (153)
    • Spring Boot (46)
      • JPA (7)
      • Lombok (2)
    • Java (21)
    • DevOps (3)
      • CI,CD (8)
      • Monitoring (2)
    • Database (7)
      • MySQL (5)
      • MongoDB (1)
      • H2 (1)
    • Trouble Shooting (5)
    • FE (4)
    • IntelliJ (3)
    • Git (3)
    • Algorithm (41)

블로그 메뉴

  • 홈
  • 태그
  • Github

공지사항

인기 글

hELLO · Designed By 정상우.v4.2.2
공대생안씨
[CI/CD] CI/CD 파이프라인 구축 (Github Actions) + 코드 수정으로 CI/CD 확인
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.