๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring & Spring Boot

[CI/CD] ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์ ํŠธ - GitHub Actions๋ฅผ ํ†ตํ•œ CI/CD ๊ตฌ์ถ•ํ•˜๊ธฐ - (2)

๐Ÿ“– ๋ชฉ์ฐจ

 

 

 


 

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ CI/CD๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.

[CI/CD] ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์ ํŠธ - GitHub Actions๋ฅผ ํ†ตํ•œ CI/CD ๊ตฌ์ถ•ํ•˜๊ธฐ - (1)

 

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ธํŒ…๊ณผ ๋”๋ถˆ์–ด GitHub Actions๋ฅผ ํ™œ์šฉํ•ด ์ง์ ‘ CI/CD๋ฅผ ๊ตฌ์ถ•ํ•ด ๋ณด์ž.

 

 

 

 

 

 

 

๐Ÿ“Œ  GitHub์—์„œ ์„ค์ •ํ•˜๊ธฐ

  ์ธํ…”๋ฆฌ์ œ์ด์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์—ฐ๊ฒฐํ•ด ์ฃผ๊ฑฐ๋‚˜ ๊นƒํ—ˆ๋ธŒ์—์„œ ๋ฐ”๋กœ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด๋„ ๋œ๋‹ค.

<๊นƒํ—ˆ๋ธŒ์—์„œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ƒ์„ฑ ํ›„>

  ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋‚˜์˜ค๋Š” ํŽ˜์ด์ง€์—์„œ Actions ํƒญ์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ creating new file์„ ์„ ํƒ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€์ค€๋‹ค. Actions ํƒญ์„ ์„ ํƒํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๊ณ , creating new file์„ ์„ ํƒํ•˜๋ฉด ๋ฐ”๋กœ ymlํŒŒ์ผ ํŽธ์ง‘ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

<ํ…œํ”Œ๋ฆฟ ์„ ํƒ ํŽ˜์ด์ง€>

  ์ด๋ฏธ ์ง€์›ํ•˜๊ณ  ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ๋“ค์ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์›ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค. gradle ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— Java with Gradle์„ ์„ ํƒํ•ด ์ค€๋‹ค.

 

 

 

 

 

<ymlํŒŒ์ผ ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ>

  ์ด์ œ ์›ํ•˜๋Š” ๋Œ€๋กœ ymlํŒŒ์ผ์„ ํŽธ์ง‘ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

 

 

 

 

 

* creating new file์„ ์„ ํƒํ•ด์„œ ๋ฐ”๋กœ ํŒŒ์ผ ํŽธ์ง‘ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด์˜จ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์ง์ ‘ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

/.github/workflows/gradle.yml

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

๐Ÿ’ก ymlํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์—, GitHub Actions์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด์ž.

<GitHub Actions์˜ ๊ตฌ์กฐ-1>
<GitHub Actions์˜ ๊ตฌ์กฐ-2>

 

 

 

  • Workflow
    • ์ตœ์ƒ์œ„ ๊ฐœ๋…์œผ๋กœ ์—ฌ๋Ÿฌ Job์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
    • Event์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ ๋  ์ˆ˜ ์žˆ๋Š” ์ž๋™ํ™”๋œ ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

  • Event
    • Github Repository์—์„œ ๋ฐœ์ƒํ•˜๋Š” push, pull request open, issue open, ํŠน์ • ์‹œ๊ฐ„๋Œ€ ๋ฐ˜๋ณต(cron) ๋“ฑ์˜ ํŠน์ •ํ•œ ๊ทœ์น™์ด๋‹ค.
    • workflow๋ฅผ ์‹คํ–‰(trigger)ํ•œ๋‹ค.

  • Runner
    • Github Action Runner app์ด ์„ค์น˜๋œ VM
    • Workflow๊ฐ€ ์‹คํ–‰๋  instance๋กœ, ๊ฐ๊ฐ์˜ Job ๋“ค์€ ๊ฐœ๋ณ„์ ์ธ runner์—์„œ ์‹คํ–‰๋œ๋‹ค.

  • Job
    • ํ•˜๋‚˜์˜ runner์—์„œ ์‹คํ–‰๋  ์—ฌ๋Ÿฌ step์˜ ๋ชจ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

  • Step
    • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•˜๋‚˜์˜ shell script ๋˜๋Š” action์„ ์˜๋ฏธํ•œ๋‹ค.

  • Actions
    • Workflow์˜ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„๋กœ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • Job์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Step๋“ค์„ ์—ฐ๊ฒฐํ•œ๋‹ค.

 

 

 

GitHub Actions์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์•˜๋‹ค.

์•„๋ž˜์—์„œ ์ง์ ‘ ymlํŒŒ์ผ์„ ์ž‘์„ฑํ•ด ๋ณด์ž.

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

๐Ÿ“Œ  ymlํŒŒ์ผ ์ž‘์„ฑํ•˜๊ธฐ

  ymlํŒŒ์ผ ์˜ˆ์‹œ์ด๋‹ค. develop์ด๋‚˜ feature๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๊ฐ€ push ๋˜๊ฑฐ๋‚˜ develop์„ destinination์œผ๋กœ ํ•˜๋Š” pull request๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ./gradlew clean test๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. 

# Actions ์ด๋ฆ„ github ํŽ˜์ด์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
name: Run Test

# Event Trigger ํŠน์ • ์•ก์…˜ (Push, Pull_Request)๋“ฑ์ด ๋ช…์‹œํ•œ Branch์—์„œ ์ผ์–ด๋‚˜๋ฉด ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
on: 
    push:
        # ๋ฐฐ์—ด๋กœ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
        branches: [ develop, feature/* ]
    # github pull request ์ƒ์„ฑ์‹œ
    pull_request:
        branches: 
            - develop # -๋กœ ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜๋ฅผ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ

    # ์‹ค์ œ ์–ด๋–ค ์ž‘์—…์„ ์‹คํ–‰ํ• ์ง€์— ๋Œ€ํ•œ ๋ช…์‹œ
jobs:
  build:
  # ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ํ™˜๊ฒฝ (OS)
  # ๋ฐฐ์—ด๋กœ ์„ ์–ธ์‹œ ๊ฐœ์ˆ˜ ๋งŒํผ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰ํ•œ๋‹ค. ( ์˜ˆ์ œ : 1๋ฒˆ ์‹คํ–‰)
    runs-on: [ ubuntu-latest ] 

    # ์‹ค์ œ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ
    steps: 
      # uses๋Š” github actions์—์„œ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‹คํ–‰ํ•œ๋‹ค.(git checkout ์‹คํ–‰)
      - name: checkout
        uses: actions/checkout@v4

      # with์€ plugin ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋‹ค. (java 17๋ฒ„์ „ ์…‹์—…)
      - name: java setup
        uses: actions/setup-java@v2
        with:
          distribution: 'adopt' # See 'Supported distributions' for available options
          java-version: '17'

      - name: make executable gradlew
        run: chmod +x ./gradlew

      # run์€ ์‚ฌ์šฉ์ž ์ง€์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
      - name: run unittest
        run: |
          ./gradlew clean test

 

๋”๋ณด๊ธฐ
* name: github actions์˜ ์ด๋ฆ„์„ ์ •ํ•˜๋Š” ๋ถ€๋ถ„
* on: action์ด ์–ธ์ œ ์‹คํ–‰๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ถ€๋ถ„
* jobs: ์‹ค์ œ ์‹คํ–‰ํ•  ๋‚ด์šฉ์— ๋Œ€ํ•œ ๋ถ€๋ถ„
* runs-on: ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š”์ง€ ๊ธฐ์ˆ 
* steps: ์‹ค์ œ ์‹คํ–‰ํ•  ๋‹จ๊ณ„๋“ค์„ ๊ธฐ์ˆ 
* name: ์‹คํ–‰์— ํ‘œ์‹œ๋  ์ด๋ฆ„
* uses: ์—ฌ๋Ÿฌ ๊ฐ€์ง€ plugin๊ณผ action์„ ์‚ฌ์šฉ

 

 

 

 

  ์ง์ ‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ž‘์„ฑํ•œ ymlํŒŒ์ผ์ด๋‹ค. Spring Boot ๊ธฐ๋ฐ˜์˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œํ•˜๊ณ , Docker ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜์—ฌ AWS EC2๋ฅผ ํ™œ์šฉํ•ด ๋ฐฐํฌํ•˜๋Š” CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค. ์ฃผ์š” ํ๋ฆ„์€ ์ด๋ ‡๋‹ค.

name: CI/CD

# main ๋ธŒ๋žœ์น˜์— push ๋˜๋Š” pull_request ๋ฐœ์ƒ ์‹œ ์‹คํ–‰
on:
  push: 
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

# deploy job ์‹คํ–‰: ubuntu-latest ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰
# contents: read ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์šฉ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
jobs:
  deploy:
    runs-on: ubuntu-latest
    permissions:
      contents: read

# actions/checkout@v3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    steps:
      - name: Checkout
        uses: actions/checkout@v3

# actions/setup-java@v3๋ฅผ ์ด์šฉํ•ด Java 17 ํ™˜๊ฒฝ ์„ค์ •
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'adopt'

# chmod +x ./gradlew๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Gradle Wrapper(gradlew) ์‹คํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌ
      - name: Give execute permission to gradlew
        run: chmod +x ./gradlew

# ./gradlew bootJar ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋นŒ๋“œ
      - name: Build with Gradle Wrapper
        run: ./gradlew bootJar
    
# docker build๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Docker ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ
      - name: Build Docker Image
        run: |
          echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
          docker build -t ${{ secrets.DOCKER_USERNAME }}/chat-app:latest .
          docker push ${{ secrets.DOCKER_USERNAME }}/chat-app:latest

# AWS ์„œ๋ฒ„์— ๋ฐฐํฌ
      - name: Deploy to AWS
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.AWS_HOST }}
          username: ubuntu
          key: ${{ secrets.AWS_KEYPAIR }}
          script: |
            sudo docker pull ${{ secrets.DOCKER_USERNAME }}/chat-app:latest
            sudo docker run -d --name chat-app -p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/chat-app:latest
            sudo docker image prune -f

 

 

 

 

 

 

 

๐Ÿ“Œ  ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ

  ๊ณ„์ • ์ •๋ณด์™€ ๊ฐ™์ด ๋…ธ์ถœ๋˜์–ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

Settings ํƒญ์—์„œ Secrets and variables-actions๋ฅผ ์„ ํƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ๋‹ค. New repository secret๋ฅผ ์„ ํƒํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒˆ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์„ฑ ๋’ค์—๋„ ์ˆ˜์ •์ด๋‚˜ ์‚ญ์ œ๋ฅผ ํ†ตํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

<ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ-1>

 

 

 

 

  

<ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ-2>

 

 

 

 

 

<ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ-3>

 

 

 

 

 

 

 

๐Ÿ“Œ  CI/CD ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ

  ํ™˜๊ฒฝ๋ณ€์ˆ˜๊นŒ์ง€ ์ „๋ถ€ ์„ธํŒ…๋˜์—ˆ๋‹ค๋ฉด, main ๋ธŒ๋žœ์น˜๋กœ push ๋˜์—ˆ์„ ๋•Œ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค. ์ˆœ์ฐจ์ ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ๊ฒฐ๊ณผ๋Š” Actions ํƒญ์—์„œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

<CI/CD ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ-1>

 

 

  ์‹คํŒจํ•œ ๋‚ด์—ญ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ , ๋‹น์—ฐํžˆ ์™œ ์‹คํŒจํ–ˆ๋Š”์ง€๋„ ์ƒ์„ธํ•˜๊ฒŒ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

<CI/CD ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ-2>

 

 

 

  ํ™”์‚ดํ‘œ๋ฅผ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด ์‹คํŒจํ•œ ๋ถ€๋ถ„์˜ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•„์ž ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

DockerFile์—์„œ jdk ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ๊ณ„์ • ๋กœ๊ทธ์ธ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์€ Docker์—์„œ token์„ ๋ฐœ๊ธ‰ํ•˜๊ณ  ์„ค์ •ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ๋‹ค.

์ตœ์ข…์ ์œผ๋กœ๋Š” ์„ฑ๊ณตํ•œ ๊ฒƒ์„ ์œ„์˜ ์ด๋ฏธ์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

<CI/CD ๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ-3>

 

 

 

 

 

 

 


 

 

 

 

 

 

 

๐Ÿ’ก ์—ฌ๊ธฐ๊นŒ์ง€ GitHub Actions๋ฅผ ํ†ตํ•ด CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.

 

์ด๋ฒˆ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ฒ˜์Œ CI/CD๋ฅผ ๊ฒฝํ—˜ํ•ด ๋ณด์•„์„œ ๊ทธ๋Ÿฐ์ง€

๊ฐ„๋‹จํ•œ ๋‚ด์šฉ์ด์—ˆ์ง€๋งŒ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๊ฑธ๋ ธ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

์ฒ˜์Œ ์ ‘ํ•ด๋ณด๋Š” ๋‚ด์šฉ์ด๋ผ ์ตœ๋Œ€ํ•œ ์ž์„ธํ•˜๊ฒŒ ํฌ์ŠคํŒ…ํ•ด ๋‘์—ˆ์œผ๋‹ˆ

๋‹ค์Œ๋ฒˆ์— CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ผ์ด ์ƒ๊ธฐ๋ฉด ์กฐ๊ธˆ์€ ๋” ๋นจ๋ฆฌ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค.

* ํฌ์ŠคํŒ…์ด ๊ธธ์–ด์ ธ์„œ AWS EC2 ๋ฐฐํฌ ๊ณผ์ •์€ ์ฐธ๊ณ  ๋งํฌ๋ฅผ ์˜ฌ๋ ค๋‘์—ˆ๋‹ค. 

 

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋„ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์ ํŠธ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ค.

 

 

 

 

 

 

 

 

 

๐Ÿ“Œ  ์ฐธ๊ณ 

 

SpringBoot ํ”„๋กœ์ ํŠธ EC2 ๋ฐฐํฌํ•˜๊ธฐ

๊นƒํ—™์— ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ AWS EC2์— git clone์„ ํ†ตํ•ด ๋‚ด๋ ค๋ฐ›์•„ jar ํŒŒ์ผ ๋นŒ๋“œ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.(EC2 ์ธ์Šคํ„ด์Šค๋Š” ์šฐ๋ถ„ํˆฌ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋”ฐ๋กœ ๋ฐฐํฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜์ง€ ์•Š๊ณ  ์ˆ˜๋™์œผ๋กœ ๋ฐฐํฌํ•˜๋Š”๊ฒƒ๋งŒ

velog.io

 

 

 

[CI/CD] Github Action์„ ํ™œ์šฉํ•œ SpringBoot CI/CD ๊ตฌ์ถ•

๋ชฉ์ฐจ 0. ํฌ์ŠคํŒ… ๊ณ„๊ธฐ 1. CI/CD ๊ฐœ๋… 2. OverView : Github Action + Docker + Nginx + AWS EC2 3. ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์— .yml ํŒŒ์ผ ์ž‘์„ฑ 4. ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€์— Dokerfile ์ž‘์„ฑ 5. Github Actions์˜ Secrets ๊ฐ’ ์„ค์ • 6. Github

aeeazip.tistory.com

 

 

 

[CICD] GitHub Action์œผ๋กœ CI/CD ๊ตฌ์ถ•ํ•˜๊ธฐ

Github Action์œผ๋กœ CI/CD ๊ตฌ์ถ•ํ•˜๊ธฐ

velog.io

 

 

 

Docker์™€ GitHub Actions

GitHub Actions๋Š” GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.GitHub Actions๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ ์–ด๋–ค ์ด๋ฒคํŠธ(event)๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํŠน์ • ์ž‘์—…์ด ์ผ์–ด๋‚˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์ฃผ๊ธฐ์ ์œผ๋กœ ์–ด๋–ค ์ž‘

velog.io