Build-Up νλ‘μ νΈμ GitHub Actions CI/CD νμ΄νλΌμΈ μ€μ κ°μ΄λμ λλ€.
- CI νμ΄νλΌμΈ κ°μ
- νμ μ€μ
- μ νμ μ€μ
- GitHub Secrets λ±λ‘ λ°©λ²
- CD νμ΄νλΌμΈ μ€μ
- Pull Request:
main,developλΈλμΉλ‘μ PR μμ± μ - Push:
main,developλΈλμΉμ μ§μ νΈμ μ
1. μ½λ 체ν¬μμ
2. Java 21 μ€μ
3. ν
μ€νΈ μ€ν (H2 λ©λͺ¨λ¦¬ DB μ¬μ©)
4. μ ν리μΌμ΄μ
λΉλ
5. JAR μν°ν©νΈ μ
λ‘λ
6. Docker μ΄λ―Έμ§ λΉλ (PRμΈ κ²½μ°)
7. Docker 컨ν
μ΄λ ν
μ€νΈ (PRμΈ κ²½μ°)
8. Discord μλ¦Ό (μ νμ¬ν)
CI νμ΄νλΌμΈμ λ³λμ GitHub Secrets μ€μ μμ΄λ μ μ λμν©λλ€.
ν μ€νΈ λ° λΉλμ νμν νκ²½ λ³μλ μλμΌλ‘ μ 곡λ©λλ€:
JWT_SECRET: test-secret-key-min-256-bits-long-for-hs256-algorithm-test
ENCRYPTION_KEY: 0123456789abcdef0123456789abcdef
β οΈ μ£Όμ: μ κ°λ€μ ν μ€νΈ μ μ©μ΄λ©°, μ λ μ΄μ νκ²½μμ μ¬μ©νλ©΄ μ λ©λλ€.
λΉλ κ²°κ³Όλ₯Ό Discordλ‘ λ°κ³ μΆμ κ²½μ° μ€μ ν©λλ€.
μ€μ νμ§ μμλ CIλ μ μ λμν©λλ€.
- Discord μλ² μ€μ β μ°λ β Webhooks
- "μ μΉν " ν΄λ¦
- μΉν μ΄λ¦ μ€μ (μ: "Build-Up CI")
- μ±λ μ ν
- "μΉν URL 볡μ¬" ν΄λ¦
Settings β Secrets and variables β Actions β New repository secret
- Name:
DISCORD_WEBHOOK - Value: 볡μ¬ν Webhook URL
CD νμ΄νλΌμΈμ μ¬μ©νμ¬ μ€μ μλ²μ λ°°ν¬νλ €λ κ²½μ° μλ Secretsκ° νμν©λλ€.
| Secret μ΄λ¦ | μ€λͺ | μμ |
|---|---|---|
JWT_SECRET |
μ΄μμ© JWT λΉλ°ν€ | openssl rand -hex 32 κ²°κ³Ό |
ENCRYPTION_KEY |
μ΄μμ© μνΈν ν€ | openssl rand -hex 32 κ²°κ³Ό |
SPRING_DATASOURCE_URL |
μ΄μ DB URL | jdbc:mysql://... |
SPRING_DATASOURCE_USERNAME |
DB μ¬μ©μλͺ | buildup_user |
SPRING_DATASOURCE_PASSWORD |
DB λΉλ°λ²νΈ | your_password |
ADMIN_USERNAME |
κ΄λ¦¬μ κ³μ λͺ | admin |
ADMIN_PASSWORD |
κ΄λ¦¬μ λΉλ°λ²νΈ | your_password |
AWS_S3_ENABLED |
S3 νμ±ν μ¬λΆ | true |
AWS_S3_BUCKET |
S3 λ²ν· μ΄λ¦ | buildup-files |
AWS_REGION |
AWS 리μ | ap-northeast-2 |
AWS_ACCESS_KEY_ID |
AWS μ‘μΈμ€ ν€ | AKIA... |
AWS_SECRET_ACCESS_KEY |
AWS λΉλ° ν€ | ... |
DOCKERHUB_USERNAME |
Docker Hub μ¬μ©μλͺ | your_username |
DOCKERHUB_TOKEN |
Docker Hub ν ν° | dckr_pat_... |
AWS_EC2_HOST |
EC2 μλ² IP | 3.37.234.173 |
AWS_EC2_USERNAME |
SSH μ¬μ©μλͺ | ubuntu |
AWS_EC2_SSH_KEY |
SSH Private Key | -----BEGIN... |
GitHub Repository β Settings β Secrets and variables β Actions
- Name: Secret μ΄λ¦ (μ ν μ°Έκ³ )
- Secret: μ€μ κ° μ λ ₯
νμν λͺ¨λ Secretμ λ±λ‘ν λκΉμ§ λ°λ³΅ν©λλ€.
# JWT Secret μμ± (32λ°μ΄νΈ)
openssl rand -hex 32
# Encryption Key μμ± (32λ°μ΄νΈ)
openssl rand -hex 32- Docker Hub λ‘κ·ΈμΈ
- Account Settings β Security β New Access Token
- Token μμ± ν λ³΅μ¬ (μ¬νμΈ λΆκ°νλ―λ‘ μμ νκ² λ³΄κ΄)
# AWS CLIλ‘ νμΈ
aws configure list
# λλ ~/.aws/credentials νμΌ νμΈ
cat ~/.aws/credentialsCD νμ΄νλΌμΈ(.github/workflows/cd.yml)μ λΈλμΉμ νΈμλ λ μλμΌλ‘ μ€νλ©λλ€.
| λΈλμΉ | νκ²½ | Docker νκ·Έ | Spring νλ‘νμΌ |
|---|---|---|---|
main |
Production | latest |
prod |
develop |
Staging | develop |
dev |
1. μ½λ 체ν¬μμ
2. Java 21 μ€μ
3. μ ν리μΌμ΄μ
λΉλ
4. Docker μ΄λ―Έμ§ λΉλ λ° Push
5. .env νμΌ μμ±
6. EC2 μλ²μ .env νμΌ μ μ‘
7. EC2μμ Docker Composeλ‘ λ°°ν¬
8. ν¬μ€μ²΄ν¬
9. Discord μλ¦Ό
GitHub Actions νμμ CD Pipeline β Run workflowλ₯Ό ν΅ν΄ μλμΌλ‘ λ°°ν¬ν μ μμ΅λλ€.
μμΈ: νκ²½ λ³μκ° μ λ¬λμ§ μμ
ν΄κ²°: CI νμΌμ νκ²½ λ³μ μ€μ νμΈ (μλμΌλ‘ μ€μ λμ΄μΌ ν¨)
μμΈ: Docker Hub μ격 μ¦λͺ λ¬Έμ
ν΄κ²°:
- CD νμ΄νλΌμΈμμλ§ Docker Hub λ‘κ·ΈμΈ νμ
- CI νμ΄νλΌμΈμ λ‘컬 λΉλλ§ μν
μμΈ: DISCORD_WEBHOOK Secret λ―Έμ€μ
ν΄κ²°:
- Discord Webhook URLμ GitHub Secretsμ λ±λ‘
- λλ μλ¦Ό μμ΄ CI κ³μ μ¬μ© (μ νμ¬ν)
μμΈ: EC2 SSH ν€ λλ νΈμ€νΈ μ 보 μ€λ₯
ν΄κ²°:
AWS_EC2_HOST: μ νν IP μ£Όμ νμΈAWS_EC2_SSH_KEY: Private Key μ 체 λ΄μ© λ³΅μ¬ (BEGIN/END ν¬ν¨)- EC2 보μ κ·Έλ£Ήμμ GitHub Actions IP νμ© (λλ μ 체 νμ©)
- GitHub Actions 곡μ λ¬Έμ
- Docker Hub Token μμ±
- AWS IAM μ¬μ©μ μμ±
- Discord Webhook μ€μ
- νμν μ€μ : μμ (μλ λμ)
- μ νμ μ€μ :
DISCORD_WEBHOOK
- νμν μ€μ : μμ λͺ¨λ μ΄μ νκ²½ Secrets
- μΆκ° μ€μ : Docker Hub, AWS EC2, SSH ν€
μ²μμλ CIλ§ μ€μ νκ³ , λ°°ν¬κ° νμν λ CDλ₯Ό μΆκ°νλ κ²μ κΆμ₯ν©λλ€.