Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refact/project setting #18

Merged
merged 6 commits into from
Sep 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions .github/workflows/deploy-dev-manual.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Deploy-dev-manual

on:
workflow_dispatch:
inputs:
branch:
description: 'Branch name'
required: true
default: 'develop'

jobs:
deploy:
name: deploy dev
runs-on: ubuntu-latest

env:
IMAGE_TAG: ${{ github.run_number }}
ECR_REPOSITORY: waffledotcom-dev/waffledotcom-server

steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ inputs.branch }}

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2

- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1

- name: Build, tag, and push image to ECR to be deployed for K8S
id: build-image-k8s
uses: docker/build-push-action@v4
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
with:
context: .
push: true
tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
build-args: |
ENV=dev
5 changes: 0 additions & 5 deletions .github/workflows/deploy-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,3 @@ jobs:
tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
build-args: |
ENV=dev
DB_HOST=${{ secrets.DB_HOST_DEV }}
DB_PORT=${{ secrets.DB_PORT_DEV }}
DB_NAME=${{ secrets.DB_NAME_DEV }}
DB_USERNAME=${{ secrets.DB_USERNAME_DEV }}
DB_PASSWORD=${{ secrets.DB_PASSWORD_DEV }}
11 changes: 3 additions & 8 deletions .github/workflows/deploy-prod.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@ name: Deploy-prod

on:
push:
branches: [main]
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*'

jobs:
deploy:
name: deploy prod
runs-on: ubuntu-latest

env:
IMAGE_TAG: ${{ github.run_number }}
IMAGE_TAG: ${{ github.ref_name }}
ECR_REPOSITORY: waffledotcom-prod/waffledotcom-server

steps:
Expand All @@ -28,7 +29,6 @@ jobs:
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1


- name: Build, tag, and push image to ECR to be deployed for K8S
id: build-image-k8s
uses: docker/build-push-action@v4
Expand All @@ -40,8 +40,3 @@ jobs:
tags: ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}
build-args: |
ENV=prod
DB_HOST=${{ secrets.DB_HOST_PROD }}
DB_PORT=${{ secrets.DB_PORT_PROD }}
DB_NAME=${{ secrets.DB_NAME_PROD }}
DB_USERNAME=${{ secrets.DB_USERNAME_PROD }}
DB_PASSWORD=${{ secrets.DB_PASSWORD_PROD }}
75 changes: 75 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,78 @@ alembic downgrade <revision_id>
- With **ArgoCD**, `waffle-cluster` lets the new image to be deployed as a **Deployment** API resource.
- Define a manifest file in [waffle-world/apps/](https://github.com/wafflestudio/waffle-world/tree/main/apps)[projectName] including **Deployment**, **ServiceAccount**, **Service**, **VirtualService**, etc.
- DevOps tools(ex. Istio, Prometheus, etc.) have been managed by **Helm**([/charts](https://github.com/wafflestudio/waffle-world/tree/main/charts)) and **kubectl** command([/misc](https://github.com/wafflestudio/waffle-world/tree/main/misc)).


## PN Rules
와플닷컴에서는 3단계로 간소화된 Pn 룰을 사용합니다.
- P1: 꼭 반영해주세요. (Request Changes)
- P2: 웬만하면 반영해주세요. (Comment)
- P3: 사소한 의견입니다. (Approve)


## Deployment Strategy

![git-flow-diagram](https://nvie.com/img/[email protected])

배포 시 브랜치 전략은 git-flow를 사용합니다.
이 레포에는 영원히 존재하는 2개의 메인 브랜치가 존재합니다:

* `main`
* `development`

그리고 메인 브랜치를 뒷받침하는 3 종류의 브랜치들이 있습니다. 이 브랜치들은 제한된 생명주기를 갖습니다:

* `feature`
* `release`
* `hotfix`

### Feature
먼저 feature 브랜치는 다음 규약을 지켜야합니다.

* branch off from
* `develop`
* merge back into
* `develop`
* naming convention
* `feat/*`, `refact/*`, `fix/*`...

feature 브랜치는 다음 릴리즈에 포함될 기능들의 개발을 위해 사용됩니다. `develop` 브랜치에서 분기하여 `develop` 브랜치에 머지합니다. 최대한 작은 단위로 개발하는 것을 지향합니다.

### Release
release 브랜치는 다음 규약을 지켜야합니다.

* branch off from
* `develop`
* merge back into
* `develop` and `main`
* naming convention
* `release-v<major>.<minor>.<patch>`

release 브랜치는 이전 릴리즈 이후 추가된 기능들을 배포하기 위해 사용되며, `develop` 브랜치에서 분기 후 QA 기간 동안 추가적인 커밋이 생길 수 있습니다. 이러한 사항을 반영하기 위해 `develop` 브랜치와 `main` 브랜치에 동시에 머지하며, `main` 브랜치 머지 직후 새로운 버전의 태그를 따서 배포합니다.

### Hotfix
hotfix 브랜치는 다음 규약을 지켜야합니다.

* branch off from
* `main`
* merge back into
* `develop` and `main`
* naming convention
* `hotfix/*`

hotfix 브랜치는 main 브랜치에서 발견된 심각한 버그를 수정하기 위해 존재합니다. 최신의 `main` 브랜치에서 분기하여, 버그 수정 후 `develop` 과 `main` 브랜치에 동시에 머지합니다. release 브랜치와 마찬가지로 `main` 브랜치에 머지 직후 새로운 버전의 태그를 따서 배포합니다.

참고: https://nvie.com/posts/a-successful-git-branching-model/

### Versioning

![Semantic Versioning](https://miro.medium.com/v2/resize:fit:1400/0*s9t0r3aU04Mi5n3t)

배포를 위해 만들어지는 태그들의 이름은 Semantic Versioning에 기반합니다.
각 버전에 대한 간략한 설명은 다음과 같습니다.

* MAJOR version: API의 변경이 기존 버전과 호환되지 않을 때 바꾼다.
* MINOR version: 이전 버전과의 호환성을 유지하며 새로운 기능을 추가할 때 바꾼다.
* PATCH version: 이전 버전과의 호환성을 유지하며 버그를 수정했을 때 바꾼다.

그 외 자세한 명세는 https://semver.org/ 에서 볼 수 있습니다.
Loading