diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..7f4e4fd --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,234 @@ +pipeline { + agent any + + parameters { + choice( + name: 'ENVIRONMENT', + choices: ['dev', 'staging', 'prod'], + description: 'Target environment' + ) + choice( + name: 'SKIP_SONARQUBE', + choices: ['true', 'false'], + description: 'Skip SonarQube Analysis' + ) + } + + environment { + // Container Registry + REGISTRY = 'acrdigitalgarage02.azurecr.io' + IMAGE_ORG = 'hgzero' + + // Azure + RESOURCE_GROUP = 'rg-digitalgarage-02' + AKS_CLUSTER = 'aks-digitalgarage-02' + NAMESPACE = 'hgzero' + + // Image Tag + IMAGE_TAG = "${new Date().format('yyyyMMddHHmmss')}" + + // Services + SERVICES = 'user meeting stt ai notification' + + // Credentials + ACR_CREDENTIALS = credentials('acr-credentials') + DOCKERHUB_CREDENTIALS = credentials('dockerhub-credentials') + SONAR_TOKEN = credentials('sonar-token') + GIT_CREDENTIALS = credentials('git-credentials') + } + + stages { + stage('Checkout') { + steps { + script { + echo "๐Ÿ”„ Checking out code..." + checkout scm + } + } + } + + stage('Setup Java') { + steps { + script { + echo "โ˜• Setting up Java 21..." + // Jenkins์— JDK 21์ด ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•จ + // Global Tool Configuration์—์„œ 'JDK21' ์ด๋ฆ„์œผ๋กœ ์„ค์ • + } + } + } + + stage('Load Environment Variables') { + steps { + script { + echo "๐Ÿ“‹ Loading environment variables for ${params.ENVIRONMENT}..." + + def configFile = ".github/config/deploy_env_vars_${params.ENVIRONMENT}" + if (fileExists(configFile)) { + def config = readFile(configFile) + config.split('\n').each { line -> + if (line && !line.startsWith('#')) { + def parts = line.split('=', 2) + if (parts.size() == 2) { + def key = parts[0].trim() + def value = parts[1].trim() + + if (key == 'resource_group') { + env.RESOURCE_GROUP = value + } else if (key == 'cluster_name') { + env.AKS_CLUSTER = value + } + } + } + } + } + + echo "Registry: ${env.REGISTRY}" + echo "Image Org: ${env.IMAGE_ORG}" + echo "Resource Group: ${env.RESOURCE_GROUP}" + echo "AKS Cluster: ${env.AKS_CLUSTER}" + } + } + } + + stage('Build with Gradle') { + steps { + script { + echo "๐Ÿ”จ Building with Gradle..." + sh 'chmod +x gradlew' + sh './gradlew build -x test' + } + } + } + + stage('SonarQube Analysis') { + when { + expression { params.SKIP_SONARQUBE == 'false' } + } + steps { + script { + echo "๐Ÿ” Running SonarQube Analysis..." + + withSonarQubeEnv('SonarQube') { + env.SERVICES.split().each { service -> + echo "Analyzing ${service}..." + sh """ + ./gradlew :${service}:test :${service}:jacocoTestReport :${service}:sonar \ + -Dsonar.projectKey=hgzero-${service}-${params.ENVIRONMENT} \ + -Dsonar.projectName=hgzero-${service}-${params.ENVIRONMENT} \ + -Dsonar.host.url=\${SONAR_HOST_URL} \ + -Dsonar.token=\${SONAR_TOKEN} \ + -Dsonar.java.binaries=build/classes/java/main \ + -Dsonar.coverage.jacoco.xmlReportPaths=build/reports/jacoco/test/jacocoTestReport.xml \ + -Dsonar.exclusions=**/config/**,**/entity/**,**/dto/**,**/*Application.class,**/exception/** + """ + } + } + } + } + } + + stage('Archive Artifacts') { + steps { + script { + echo "๐Ÿ“ฆ Archiving build artifacts..." + archiveArtifacts artifacts: '**/build/libs/*.jar', fingerprint: true + } + } + } + + stage('Docker Build & Push') { + steps { + script { + echo "๐Ÿณ Building and pushing Docker images..." + + // Login to Docker Hub (prevent rate limit) + sh """ + echo ${DOCKERHUB_CREDENTIALS_PSW} | docker login -u ${DOCKERHUB_CREDENTIALS_USR} --password-stdin + """ + + // Login to Azure Container Registry + sh """ + echo ${ACR_CREDENTIALS_PSW} | docker login ${REGISTRY} -u ${ACR_CREDENTIALS_USR} --password-stdin + """ + + // Build and push each service + env.SERVICES.split().each { service -> + echo "Building ${service}..." + + def imageTag = "${env.REGISTRY}/${env.IMAGE_ORG}/${service}:${params.ENVIRONMENT}-${env.IMAGE_TAG}" + + sh """ + docker build \ + --build-arg BUILD_LIB_DIR="${service}/build/libs" \ + --build-arg ARTIFACTORY_FILE="${service}.jar" \ + -f deployment/container/Dockerfile-backend \ + -t ${imageTag} . + """ + + echo "Pushing ${service}..." + sh "docker push ${imageTag}" + + echo "โœ… ${service} image pushed: ${imageTag}" + } + } + } + } + + stage('Update Manifest Repository') { + steps { + script { + echo "๐Ÿ“ Updating manifest repository..." + + // Clone manifest repository + sh """ + rm -rf manifest-repo + git clone https://${GIT_CREDENTIALS_USR}:${GIT_CREDENTIALS_PSW}@github.com/hjmoons/hgzero-manifest.git manifest-repo + """ + + dir('manifest-repo') { + // Install Kustomize + sh """ + curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash + chmod +x kustomize + """ + + // Update manifest + dir("hgzero-back/kustomize/overlays/${params.ENVIRONMENT}") { + env.SERVICES.split().each { service -> + sh """ + ../../../kustomize edit set image ${env.REGISTRY}/${env.IMAGE_ORG}/${service}:${params.ENVIRONMENT}-${env.IMAGE_TAG} + """ + } + } + + // Git commit and push + sh """ + git config user.name "Jenkins" + git config user.email "jenkins@hgzero.com" + git add . + git commit -m "๐Ÿš€ Update hgzero ${params.ENVIRONMENT} images to ${params.ENVIRONMENT}-${env.IMAGE_TAG}" + git push origin main + """ + } + + echo "โœ… Manifest repository updated. ArgoCD will auto-deploy." + } + } + } + } + + post { + success { + echo "โœ… Pipeline completed successfully!" + echo "Environment: ${params.ENVIRONMENT}" + echo "Image Tag: ${env.IMAGE_TAG}" + } + failure { + echo "โŒ Pipeline failed!" + } + always { + // Clean workspace + cleanWs() + } + } +} diff --git a/ai-java-back/.run/ai-service.run.xml b/ai-java-back/.run/ai-service.run.xml deleted file mode 100644 index 854373b..0000000 --- a/ai-java-back/.run/ai-service.run.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - true - true - - - - - false - false - - - \ No newline at end of file diff --git a/deployment/jenkins/JENKINS_SETUP.md b/deployment/jenkins/JENKINS_SETUP.md new file mode 100644 index 0000000..da375fc --- /dev/null +++ b/deployment/jenkins/JENKINS_SETUP.md @@ -0,0 +1,256 @@ +# Jenkins Pipeline ์„ค์ • ๊ฐ€์ด๋“œ + +## ๊ฐœ์š” +GitHub Actions๊ฐ€ ๋ง‰ํ˜€ ์žˆ์„ ๋•Œ Jenkins๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HGZero ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค. + +## ์ „์ œ ์กฐ๊ฑด + +### 1. Jenkins ์„œ๋ฒ„ ์š”๊ตฌ์‚ฌํ•ญ +- Jenkins 2.x ์ด์ƒ +- Docker๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•จ +- Kustomize CLI ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ +- ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ (Docker Hub, Azure Container Registry, GitHub ์ ‘๊ทผ) + +### 2. ํ•„์ˆ˜ Jenkins ํ”Œ๋Ÿฌ๊ทธ์ธ +๋‹ค์Œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ด ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค: +- Pipeline (๊ธฐ๋ณธ ํฌํ•จ) +- Git Plugin +- Docker Pipeline Plugin +- SonarQube Scanner Plugin (์„ ํƒ์‚ฌํ•ญ) +- Credentials Plugin (๊ธฐ๋ณธ ํฌํ•จ) + +## Jenkins ์„ค์ • ๋‹จ๊ณ„ + +### 1๋‹จ๊ณ„: Credentials ์„ค์ • + +Jenkins ๊ด€๋ฆฌ โ†’ Manage Credentials โ†’ Global credentials์—์„œ ๋‹ค์Œ credential๋“ค์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค: + +#### 1.1 ACR Credentials +- **ID**: `acr-credentials` +- **Type**: Username with password +- **Username**: Azure Container Registry ์‚ฌ์šฉ์ž๋ช… +- **Password**: Azure Container Registry ๋น„๋ฐ€๋ฒˆํ˜ธ +- **Description**: Azure Container Registry Credentials + +#### 1.2 Docker Hub Credentials +- **ID**: `dockerhub-credentials` +- **Type**: Username with password +- **Username**: Docker Hub ์‚ฌ์šฉ์ž๋ช… +- **Password**: Docker Hub ๋น„๋ฐ€๋ฒˆํ˜ธ ๋˜๋Š” Access Token +- **Description**: Docker Hub Credentials (rate limit ๋ฐฉ์ง€์šฉ) + +#### 1.3 SonarQube Token (์„ ํƒ์‚ฌํ•ญ) +- **ID**: `sonar-token` +- **Type**: Secret text +- **Secret**: SonarQube authentication token +- **Description**: SonarQube Token + +#### 1.4 Git Credentials +- **ID**: `git-credentials` +- **Type**: Username with password +- **Username**: GitHub ์‚ฌ์šฉ์ž๋ช… +- **Password**: GitHub Personal Access Token (repo ๊ถŒํ•œ ํ•„์š”) +- **Description**: GitHub Credentials for Manifest Repository + +> **์ค‘์š”**: GitHub Personal Access Token ์ƒ์„ฑ ์‹œ ๋‹ค์Œ ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค: +> - `repo` (Full control of private repositories) + +### 2๋‹จ๊ณ„: JDK 21 ์„ค์ • + +Jenkins ๊ด€๋ฆฌ โ†’ Global Tool Configuration โ†’ JDK์—์„œ: +1. "Add JDK" ํด๋ฆญ +2. **Name**: `JDK21` +3. "Install automatically" ์ฒดํฌ +4. Install from adoptium.net ์„ ํƒ +5. Version: jdk-21.x.x ์„ ํƒ + +> **์ฐธ๊ณ **: ๋˜๋Š” Jenkins ์„œ๋ฒ„์— JDK 21์ด ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๋ฉด, ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +### 3๋‹จ๊ณ„: SonarQube ์„œ๋ฒ„ ์„ค์ • (์„ ํƒ์‚ฌํ•ญ) + +SonarQube ๋ถ„์„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด: + +Jenkins ๊ด€๋ฆฌ โ†’ Configure System โ†’ SonarQube servers์—์„œ: +1. "Add SonarQube" ํด๋ฆญ +2. **Name**: `SonarQube` +3. **Server URL**: SonarQube ์„œ๋ฒ„ URL +4. **Server authentication token**: ์•ž์„œ ์ƒ์„ฑํ•œ `sonar-token` credential ์„ ํƒ + +### 4๋‹จ๊ณ„: Pipeline Job ์ƒ์„ฑ + +1. Jenkins ๋ฉ”์ธ ํ™”๋ฉด์—์„œ "New Item" ํด๋ฆญ +2. Job ์ด๋ฆ„ ์ž…๋ ฅ (์˜ˆ: `hgzero-backend-pipeline`) +3. "Pipeline" ์„ ํƒ +4. "OK" ํด๋ฆญ + +Pipeline ์„ค์ •: +1. **General** + - "This project is parameterized" ์ฒดํฌ (์ž๋™์œผ๋กœ Jenkinsfile์˜ parameters๊ฐ€ ์ธ์‹๋จ) + +2. **Pipeline** + - **Definition**: Pipeline script from SCM + - **SCM**: Git + - **Repository URL**: `https://github.com/hjmoons/HGZero.git` (๋˜๋Š” ์‹ค์ œ ์ €์žฅ์†Œ URL) + - **Credentials**: ํ•„์š”์‹œ Git credentials ์„ ํƒ + - **Branch Specifier**: `*/main` (๋˜๋Š” ์›ํ•˜๋Š” ๋ธŒ๋žœ์น˜) + - **Script Path**: `Jenkinsfile` + +3. "Save" ํด๋ฆญ + +## Pipeline ์‹คํ–‰ + +### ์ˆ˜๋™ ์‹คํ–‰ +1. ์ƒ์„ฑํ•œ Pipeline Job ์„ ํƒ +2. "Build with Parameters" ํด๋ฆญ +3. ํŒŒ๋ผ๋ฏธํ„ฐ ์„ ํƒ: + - **ENVIRONMENT**: `dev`, `staging`, ๋˜๋Š” `prod` ์„ ํƒ + - **SKIP_SONARQUBE**: `true` (๊ฑด๋„ˆ๋›ฐ๊ธฐ) ๋˜๋Š” `false` (์‹คํ–‰) +4. "Build" ํด๋ฆญ + +### Pipeline ๋™์ž‘ ํ๋ฆ„ + +``` +1. Checkout + โ””โ”€> Git ์ €์žฅ์†Œ์—์„œ ์ฝ”๋“œ ์ฒดํฌ์•„์›ƒ + +2. Setup Java + โ””โ”€> JDK 21 ํ™˜๊ฒฝ ์„ค์ • + +3. Load Environment Variables + โ””โ”€> .github/config/deploy_env_vars_{ํ™˜๊ฒฝ} ํŒŒ์ผ์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋กœ๋“œ + +4. Build with Gradle + โ””โ”€> ./gradlew build -x test ์‹คํ–‰ (JAR ํŒŒ์ผ ์ƒ์„ฑ) + +5. SonarQube Analysis (์„ ํƒ์‚ฌํ•ญ) + โ””โ”€> ๊ฐ ์„œ๋น„์Šค๋ณ„ ํ…Œ์ŠคํŠธ ๋ฐ ์ฝ”๋“œ ํ’ˆ์งˆ ๋ถ„์„ + +6. Archive Artifacts + โ””โ”€> ์ƒ์„ฑ๋œ JAR ํŒŒ์ผ์„ Jenkins์— ๋ณด๊ด€ + +7. Docker Build & Push + โ””โ”€> ๊ฐ ์„œ๋น„์Šค๋ณ„ Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ACR์— ํ‘ธ์‹œ + +8. Update Manifest Repository + โ””โ”€> hgzero-manifest ์ €์žฅ์†Œ์˜ Kustomize ํŒŒ์ผ ์—…๋ฐ์ดํŠธ + โ””โ”€> ArgoCD๊ฐ€ ์ž๋™์œผ๋กœ ๋ฐฐํฌ ๊ฐ์ง€ +``` + +## ๋นŒ๋“œ ๊ฒฐ๊ณผ ํ™•์ธ + +### ์„ฑ๊ณต ์‹œ +- Console Output์— "โœ… Pipeline completed successfully!" ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ +- Environment์™€ Image Tag ์ •๋ณด ์ถœ๋ ฅ +- Manifest ์ €์žฅ์†Œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋จ +- ArgoCD๊ฐ€ ์ž๋™์œผ๋กœ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ๋ฐฐํฌ + +### ์‹คํŒจ ์‹œ +- Console Output์— "โŒ Pipeline failed!" ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ +- ์‹คํŒจํ•œ Stage์™€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ™•์ธ +- Workspace๊ฐ€ ์ž๋™์œผ๋กœ ์ •๋ฆฌ๋จ + +## ํ™˜๊ฒฝ๋ณ„ ์„ค์ • + +### Dev ํ™˜๊ฒฝ +```bash +ENVIRONMENT: dev +``` +- ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋ฐฐํฌ +- ๋น ๋ฅธ ๋ฐ˜๋ณต ๊ฐœ๋ฐœ์šฉ + +### Staging ํ™˜๊ฒฝ +```bash +ENVIRONMENT: staging +``` +- ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์— ๋ฐฐํฌ +- ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ ์ „ ์ตœ์ข… ๊ฒ€์ฆ + +### Production ํ™˜๊ฒฝ +```bash +ENVIRONMENT: prod +``` +- ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌ +- **์ฃผ์˜**: ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๋Š” ์‹ ์ค‘ํ•˜๊ฒŒ ์ง„ํ–‰ + +## ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… + +### ๋ฌธ์ œ 1: Gradle ๋นŒ๋“œ ์‹คํŒจ +**์ฆ์ƒ**: `./gradlew build` ์‹คํŒจ + +**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**: +- Console Output์—์„œ ์—๋Ÿฌ ๋กœ๊ทธ ํ™•์ธ +- Java ๋ฒ„์ „์ด 21์ธ์ง€ ํ™•์ธ +- Gradle wrapper ๊ถŒํ•œ ํ™•์ธ: `chmod +x gradlew` + +### ๋ฌธ์ œ 2: Docker ๋กœ๊ทธ์ธ ์‹คํŒจ +**์ฆ์ƒ**: Docker login ์‹คํŒจ + +**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**: +- Jenkins Credentials์— ACR credentials๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธ +- Azure Container Registry URL์ด `acrdigitalgarage02.azurecr.io`์ธ์ง€ ํ™•์ธ +- Credential ID๊ฐ€ ์ •ํ™•ํžˆ `acr-credentials`์ธ์ง€ ํ™•์ธ + +### ๋ฌธ์ œ 3: Git clone ์‹คํŒจ (Manifest Repository) +**์ฆ์ƒ**: hgzero-manifest ์ €์žฅ์†Œ clone ์‹คํŒจ + +**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**: +- GitHub Personal Access Token์ด ์œ ํšจํ•œ์ง€ ํ™•์ธ +- Token์— `repo` ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธ +- Credential ID๊ฐ€ ์ •ํ™•ํžˆ `git-credentials`์ธ์ง€ ํ™•์ธ + +### ๋ฌธ์ œ 4: Kustomize ์„ค์น˜ ์‹คํŒจ +**์ฆ์ƒ**: Kustomize ๋‹ค์šด๋กœ๋“œ ์‹คํŒจ + +**ํ•ด๊ฒฐ๋ฐฉ๋ฒ•**: +- Jenkins ์„œ๋ฒ„์—์„œ ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ํ™•์ธ +- curl ๋ช…๋ น์–ด๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ +- ํ•„์š”์‹œ Kustomize๋ฅผ ๋ฏธ๋ฆฌ ์„ค์น˜ํ•˜๊ณ  PATH์— ์ถ”๊ฐ€ + +## ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ + +1. **Credentials ๊ด€๋ฆฌ** + - ๋ชจ๋“  ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ํ† ํฐ์€ Jenkins Credentials๋กœ ๊ด€๋ฆฌ + - Pipeline ์ฝ”๋“œ์— ์ ˆ๋Œ€ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š์Œ + +2. **Git Credentials** + - Personal Access Token ์‚ฌ์šฉ (๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์šฉ ๊ธˆ์ง€) + - ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ ์ ์šฉ + +3. **Docker Registry** + - ACR ์ ‘๊ทผ์€ Service Principal ๋˜๋Š” ๊ด€๋ฆฌ๋˜๋Š” ์ž๊ฒฉ ์ฆ๋ช… ์‚ฌ์šฉ ๊ถŒ์žฅ + +## ์ถ”๊ฐ€ ์ฐธ๊ณ ์‚ฌํ•ญ + +### Webhook ์„ค์ • (์„ ํƒ์‚ฌํ•ญ) +GitHub push ์ด๋ฒคํŠธ ์‹œ ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ ค๋ฉด: + +1. Jenkins Job โ†’ Configure โ†’ Build Triggers +2. "GitHub hook trigger for GITScm polling" ์ฒดํฌ +3. GitHub ์ €์žฅ์†Œ โ†’ Settings โ†’ Webhooks +4. Jenkins URL ์ถ”๊ฐ€: `http://{jenkins-url}/github-webhook/` + +### ์•Œ๋ฆผ ์„ค์ • (์„ ํƒ์‚ฌํ•ญ) +๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฉ”์ผ์ด๋‚˜ Slack์œผ๋กœ ๋ฐ›์œผ๋ ค๋ฉด: + +- Email: Email Extension Plugin ์„ค์น˜ ๋ฐ ์„ค์ • +- Slack: Slack Notification Plugin ์„ค์น˜ ๋ฐ ์„ค์ • + +## ์ง€์› ์„œ๋น„์Šค + +ํ˜„์žฌ Pipeline์—์„œ ๋นŒ๋“œํ•˜๋Š” ์„œ๋น„์Šค: +- `user`: ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ์„œ๋น„์Šค +- `meeting`: ํšŒ์˜ ๊ด€๋ฆฌ ์„œ๋น„์Šค +- `stt`: ์Œ์„ฑ-ํ…์ŠคํŠธ ๋ณ€ํ™˜ ์„œ๋น„์Šค +- `ai`: AI ์ฒ˜๋ฆฌ ์„œ๋น„์Šค +- `notification`: ์•Œ๋ฆผ ์„œ๋น„์Šค + +## ๊ด€๋ จ ํŒŒ์ผ + +- `Jenkinsfile`: Pipeline ์ •์˜ ํŒŒ์ผ +- `.github/config/deploy_env_vars_{ํ™˜๊ฒฝ}`: ํ™˜๊ฒฝ๋ณ„ ๋ณ€์ˆ˜ ํŒŒ์ผ +- `deployment/container/Dockerfile-backend`: ๋ฐฑ์—”๋“œ Dockerfile +- `hgzero-manifest` ์ €์žฅ์†Œ: Kubernetes ๋งค๋‹ˆํŽ˜์ŠคํŠธ ํŒŒ์ผ + +## ๋ฌธ์˜ + +Pipeline ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Jenkins Console Output์„ ํ™•์ธํ•˜๊ณ , ํ•„์š”์‹œ DevOps ํŒ€์— ๋ฌธ์˜ํ•˜์„ธ์š”. diff --git a/stt/.run/stt.run.xml b/stt/.run/stt.run.xml deleted file mode 100644 index 598caeb..0000000 --- a/stt/.run/stt.run.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - true - true - - - - - false - false - - - \ No newline at end of file