diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..0fd405c --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,36 @@ +name: Build and Deploy + +on: + push: + branches: + - main + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Configure npm registry + run: | + echo "registry=https://nexus.gc-si.dev/repository/npm-public/" > .npmrc + echo "//nexus.gc-si.dev/repository/npm-public/:_auth=${{ secrets.NEXUS_NPM_AUTH }}" >> .npmrc + + - name: Install dependencies + run: npm ci + + - name: Build + run: npm run build + + - name: Deploy to server + run: | + rm -rf /deploy/guide/* + cp -r dist/* /deploy/guide/ + echo "Deployed at $(date '+%Y-%m-%d %H:%M:%S')" + ls -la /deploy/guide/ diff --git a/src/content/CiCdGuide.tsx b/src/content/CiCdGuide.tsx new file mode 100644 index 0000000..0cb9c25 --- /dev/null +++ b/src/content/CiCdGuide.tsx @@ -0,0 +1,506 @@ +import { Alert } from '../components/common/Alert'; +import { CodeBlock } from '../components/common/CodeBlock'; +import { StepGuide } from '../components/common/StepGuide'; + +export default function CiCdGuide() { + return ( +
+ Gitea Actions를 이용한 자동 빌드 및 배포 파이프라인 구성 방법을 안내합니다. +
+ + {/* 개요 */} ++ Gitea Actions는 GitHub Actions와 호환되는 CI/CD 시스템입니다. + 리포지토리에 워크플로우 파일을 추가하면, 특정 이벤트(push, MR 등) 발생 시 + 자동으로 빌드와 배포가 실행됩니다. +
+개발자 → feature 브랜치 push → develop MR 머지
+↓
+develop → main MR 생성 → 리뷰 승인 → main 머지
+↓
++ Gitea Actions 트리거 → act_runner (Docker 컨테이너) +
+↓
+npm ci → npm run build → dist/ 생성
+↓
++ 배포 경로에 복사 → Nginx 서빙 +
+
+ 워크플로우 파일은 리포지토리의{' '}
+ .gitea/workflows/ 디렉토리에 YAML 형식으로 작성합니다.
+
| 이벤트 | +설명 | +예시 | +
|---|---|---|
| push | +브랜치에 push 시 | +branches: [main] | +
| pull_request | +MR 생성/업데이트 시 | +branches: [main], types: [opened, synchronize] | +
| schedule | +Cron 스케줄 | +cron: '0 2 * * *' | +
| workflow_dispatch | +수동 실행 | +Gitea UI에서 수동 트리거 | +
push 이벤트가 발생합니다.
+ 배포 워크플로우는 on: push: branches: [main]으로 설정하는 것이 일반적입니다.
+
+ 비밀번호, 인증 토큰 등 민감한 정보는 리포지토리 시크릿으로 관리합니다.
+ 워크플로우에서{' '}
+ {'${{ secrets.시크릿_이름 }}'}으로 참조합니다.
+
+ Add Secret 클릭 후 이름과 값을 입력합니다.
+ 시크릿 이름은 UPPER_SNAKE_CASE로 작성합니다.
+
| 시크릿 이름 | +용도 | +설정된 리포 | +
|---|---|---|
| NEXUS_NPM_AUTH | +Nexus npm 레지스트리 인증 (Base64) | +gc-guide | +
+ gc-guide 프로젝트의 실제 배포 워크플로우입니다. + main 브랜치에 머지되면 자동으로 빌드하고 서버에 배포합니다. +
+/deploy/guide/는 act_runner 컨테이너 설정에서
+ 호스트의 /devdata/services/guide/dist/에
+ 마운트되어 있습니다. 빌드 결과물을 복사하면 Nginx가 즉시 서빙합니다.
+ + Java/Spring Boot 프로젝트의 워크플로우 예시입니다. 향후 gc-guide-api에 적용 예정입니다. +
++ 리포지토리 상단의 Actions 탭을 클릭하면 워크플로우 실행 이력을 확인할 수 있습니다. + 각 실행 항목을 클릭하면 상세 로그를 볼 수 있습니다. +
+ ), + }, + { + title: '배포 결과 확인', + content: ( ++ 빌드 성공 후{' '} + + https://guide.gc-si.dev + + 에서 배포 결과를 확인합니다. 변경 사항이 반영되지 않으면 브라우저 캐시를 삭제하세요 (Ctrl+Shift+R). +
+ ), + }, + ]} + /> + + {/* 워크플로우 작성 팁 */} +| 액션 | +용도 | +
|---|---|
| actions/checkout@v4 | +리포지토리 소스코드 체크아웃 | +
| actions/setup-node@v4 | +Node.js 설정 | +
| actions/setup-java@v4 | +JDK 설정 | +
| actions/cache@v4 | +의존성 캐시 (빌드 시간 단축) | +
+ Gitea Actions는 act_runner라는 실행기가 빌드를 처리합니다. + Docker 컨테이너로 동작하며, 각 빌드 job을 별도 Docker 컨테이너에서 격리 실행합니다. +
+ +| 항목 | +값 | +
|---|---|
| Runner 이름 | +gc-runner-01 | +
| 컨테이너 | +act-runner (gitea/act_runner:latest) | +
| 라벨 | +ubuntu-latest, ubuntu-22.04 | +
| 빌드 이미지 | +node:20 (Docker) | +
| 네트워크 | +devnet (Gitea/Nexus와 동일) | +
.gitea/workflows/*.ymlruns-on 라벨이 Runner 라벨과 일치하는지 확인package-lock.json이 커밋되어 있는지 확인 (npm ci 필수)ls -la /devdata/services/guide/dist/docker ps | grep act-runnerdocker logs act-runner --tail 30docker compose restart act-runner