Azure Pipeline (master 브랜치)
master 브랜치 푸시 및 PR 빌드를 담당하는 Azure DevOps 파이프라인입니다.
빌드 후 SonarQube 정적 분석을 수행하고, 통과 시 ACR에 이미지를 푸시합니다.
파이프라인 목록
| 파이프라인 | YAML 파일 | 트리거 |
|---|---|---|
infolineage-api | infra/azure-pipelines/pipelines/api-pipeline.yml | master push / PR |
infolineage-worker | infra/azure-pipelines/pipelines/worker-pipeline.yml | master push / PR |
infolineage-frontend | infra/azure-pipelines/pipelines/frontend-pipeline.yml | master push / PR |
YAML 구조
infra/azure-pipelines/
├── pipelines/
│ ├── api-pipeline.yml ← 각 모듈 진입점
│ ├── worker-pipeline.yml
│ └── frontend-pipeline.yml
└── templates/
├── build-java.yml ← Gradle 빌드 템플릿
├── sonar-scan.yml ← SonarQube 분석 템플릿
└── docker-push.yml ← Docker 빌드 & ACR 푸시 템플릿
파이프라인 YAML은 templates/를 template 참조로 재사용합니다.
# 예시: api-pipeline.yml
stages:
- stage: Build
jobs:
- template: ../templates/build-java.yml
parameters:
module: infolineage-api
- stage: SonarQube
jobs:
- template: ../templates/sonar-scan.yml
parameters:
projectKey: infolineage-api
- stage: Docker
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
jobs:
- template: ../templates/docker-push.yml
parameters:
module: api
트리거 전략
trigger:
branches:
include:
- master
pr:
branches:
include:
- master
- master push: 3단계 전부 실행 (Build → SonarQube → Docker)
- PR 빌드: Build + SonarQube만 실행, Docker 푸시는 건너뜀 (
condition: eq(variables['Build.SourceBranch'], 'refs/heads/master'))
3단계 흐름
Stage 1: Build
- task: Gradle@3
inputs:
gradleWrapperFile: 'backend/gradlew'
workingDirectory: 'backend'
tasks: ':infolineage-api:bootJar -x test --build-cache'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '25'
options: '-Dorg.gradle.jvmargs="--enable-preview -Xmx2g"'
Stage 2: SonarQube
- task: SonarQubePrepare@5
inputs:
SonarQube: 'SonarQube' # Service Connection 이름
scannerMode: 'Other'
extraProperties: |
sonar.projectKey=infolineage-api
sonar.sources=backend/infolineage-api/src/main
sonar.tests=backend/infolineage-api/src/test
sonar.java.binaries=backend/infolineage-api/build/classes
sonar.java.source=25
- task: SonarQubeAnalyze@5
- task: SonarQubePublish@5
inputs:
pollingTimeoutSec: '300'
Stage 3: Docker → ACR
- task: Docker@2
inputs:
containerRegistry: 'AzureContainerRegistry'
repository: 'infolineage/api'
command: 'buildAndPush'
Dockerfile: 'backend/infolineage-api/Dockerfile'
buildContext: 'backend'
tags: 'latest'
Service Connection 목록
| 이름 | 유형 | 용도 |
|---|---|---|
SonarQube | SonarQube | SonarQube 분석 서버 연결 |
AzureContainerRegistry | Docker Registry | ACR 이미지 푸시 |
Azure DevOps → Project Settings → Service Connections에서 관리합니다.
향후 계획
| 단계 | 내용 | 상태 |
|---|---|---|
| Staging 자동 배포 | Docker Stage 이후 K8s staging 자동 롤아웃 | 미구현 |
| Production 수동 승인 | Azure DevOps 승인 게이트 + 수동 배포 | 미구현 |
| path trigger | 모노레포 path filter로 변경된 모듈만 빌드 | 미구현 |