GitHub Actions๋ฅผ ์ฌ์ฉํ์ฌ CI/CD(์ง์์ ํตํฉ ๋ฐ ์ง์์ ๋ฐฐํฌ) ํ์ดํ๋ผ์ธ์ ์ค์ ํ๋ ์ํฌํ๋ก์ฐ
# ์ํฌํ๋ก์ ์ด๋ฆ ์ง์
name: CI/CD
#์ํฌ ํ๋ก๊ฐ ์์๋ ์กฐ๊ฑด ์ง์
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest #์คํํ๊ฒฝ ์ง์
#์คํ ์คํ
์ง์
steps:
- uses: actions/checkout@v3
- uses: actions/setup-java@v3
with:
distribution: 'corretto'
java-version: '17'
# ์คํ ๊ถํ ๋ถ์ฌ
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# Gradle๋ก ๋น๋ํ๊ธฐ
- name: Build with Gradle
run: ./gradlew clean build
# ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ
- name: Get current time
uses: josStorer/get-current-time@v2.0.2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"
# ๋ฐฐํฌ์ฉ ํจํค์ง ๊ฒฝ๋ก ์ ์ฅ
- name: Set artifact
run: echo "artifact=$(ls ./build/libs)" >> $GITHUB_ENV
# ๋น์คํ ํฌ ๋ฐฐํฌ
- name: Beanstalk Deploy
uses: einaregilsson/beanstalk-deploy@v20
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: springboot-developer
environment_name: Springboot-developer-rel-env
version_label: github-action-${{ steps.current-time.outputs.formattedTime }}
region: ap-northeast-2
deployment_package: ./build/libs/${{ env.artifact }}
# ํ์ฌ ์๊ฐ ๊ฐ์ ธ์ค๊ธฐ
- name: Get current time
uses: josStorer/get-current-time@v2.0.2
id: current-time
with:
format: YYYY-MM-DDTHH-mm-ss
utcOffset: "+09:00"
ํ์ฌ ์๊ฐ์ ๊ฐ์ ธ์ต๋๋ค.
get-current-time ์ก์
์ ์ฌ์ฉํ์ฌ ํ์ฌ ์๊ฐ์ ํน์ ํ์์ผ๋ก ๊ฐ์ ธ์ค๊ณ , UTC+9 ์๊ฐ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
# ๋ฐฐํฌ์ฉ ํจํค์ง ๊ฒฝ๋ก ์ ์ฅ
- name: Set artifact
run: echo "artifact=$(ls ./build/libs)" >> $GITHUB_ENV
์ด ๋จ๊ณ์์๋ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ธ ์ํฐํฉํธ์ ๊ฒฝ๋ก๋ฅผ ํ๊ฒฝ ๋ณ์ artifact์ ์ ์ฅํฉ๋๋ค.
build/libs ๋๋ ํ ๋ฆฌ์ ์๋ ๋ชจ๋ ํ์ผ์ ๋์ดํ์ฌ ๊ฐ์ฅ ์ต๊ทผ์ ๋น๋ ๊ฒฐ๊ณผ๋ฅผ GITHUB_ENV ํ๊ฒฝ ๋ณ์์ ์ ์ฅํฉ๋๋ค.
# ๋น์คํ ํฌ ๋ฐฐํฌ
- name: Beanstalk Deploy
uses: einaregilsson/beanstalk-deploy@v20
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: springboot-developer
environment_name: Springboot-developer-rel-env
version_label: github-action-${{ steps.current-time.outputs.formattedTime }}
region: ap-northeast-2
deployment_package: ./build/libs/${{ env.artifact }}
AWS Elastic Beanstalk์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํฉ๋๋ค.
- aws_access_key: AWS์ ์ ๊ทผํ๊ธฐ ์ํ ์ก์ธ์ค ํค
- aws_secret_key: AWS์ ์ ๊ทผํ๊ธฐ ์ํ ๋น๋ฐ ํค
- application_name: ๋ฐฐํฌํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฆ
- environment_name: ๋ฐฐํฌํ ํ๊ฒฝ์ ์ด๋ฆ
- version_label: ๋ฐฐํฌ ๋ฒ์ ์ ๋ผ๋ฒจ๋งํฉ๋๋ค. ํ์ฌ ์๊ฐ์ผ๋ก ์์ฑ๋ ๋ผ๋ฒจ์ ์ฌ์ฉํฉ๋๋ค.
- region: AWS ๋ฆฌ์ (์ฌ๊ธฐ์๋ ap-northeast-2, ์ฆ ์์ธ ๋ฆฌ์ )
- deployment_package: ๋ฐฐํฌํ ํจํค์ง์ ๊ฒฝ๋ก. ์์ ์ ์ฅํ artifact ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ต๊ทผ ๋น๋ ๊ฒฐ๊ณผ๋ฅผ ์ง์
์ด YAML ํ์ผ์ GitHub Actions๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ํธ์ ์ ์๋์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ณ AWS Elastic Beanstalk์ ๋ฐฐํฌํ๋ ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค. ๊ฐ ๋จ๊ณ๋ ์๋ก ์์กดํ๋ฉฐ, CI/CD ํ์ดํ๋ผ์ธ์ ํตํด ๊ฐ๋ฐ๊ณผ ๋ฐฐํฌ์ ํจ์จ์ฑ์ ๋์ด๋ ๋ฐ ๋์์ ์ค๋๋ค.
ํด๋น ๊ธ์ ์๋ ๋์์ ๋ด์ฉ์ ์ฐธ๊ณ ํ๋ฉฐ ์ ๋ฆฌํ ๊ฐ์ธํ์ต์ฉ ๊ธ์
๋๋ค.
์คํ๋ง ๋ถํธ 3 ๋ฒก์๋ ๊ฐ๋ฐ์ ๋๊ธฐ - ์๋ฐ ํธ, ์ ์ ์
'study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ธ๋ฆฌ์ผ ํ์คํธ 2024 ์ฐธ์ฌ ํ๊ธฐ (0) | 2024.09.09 |
---|---|
๊ตฌ๊ธ ํด๋ผ์ฐ๋ ์ฝ์์์ OAuth2 ๋ฑ๋กํ๊ธฐ (0) | 2024.08.27 |
vue vite + spring boot ํตํฉ์ผ๋ก ์ฐ๊ฒฐํ๊ธฐ (0) | 2024.04.02 |
Vue js ์ค์น vue cli (0) | 2024.03.12 |
git. pull request ๊ทธ๋ฆฌ๊ณ ์ํ์น (1) | 2024.01.24 |