티스토리 뷰
GitHub Webhook을 활용한 Issue 및 Pull Request 자동 관리 시스템 구축
이전 글에서는 GitHub Webhook을 활용하여 CI/CD 자동화 서버 구축 및 Slack 알림 연동을 다뤘습니다.
이번 글에서는 Webhook을 활용하여 Issue 및 Pull Request(PR) 이벤트를 자동으로 관리하는 시스템을 구축하는 방법을 설명합니다.
1. GitHub Issue 및 Pull Request 자동화의 필요성
GitHub Webhook을 활용하면 Issue 생성, 라벨 자동 추가, 담당자 배정, PR 리뷰 요청, 상태 변경 등의 작업을 자동화할 수 있습니다.
✅ Webhook 기반 Issue 및 PR 자동화의 장점
✔️ 팀원 간 협업 효율 향상 – Issue 담당자를 자동으로 배정하여 빠른 대응 가능
✔️ PR 리뷰 프로세스 간소화 – 특정 기준을 만족하면 자동 리뷰 요청 및 알림 전송
✔️ GitHub Project 연동 – 이슈 진행 상태를 자동 업데이트하여 업무 관리 최적화
2. Webhook을 활용한 자동화 시스템 아키텍처
🔹 전체 자동화 흐름
1️⃣ 개발자가 GitHub Issue 생성 또는 PR 제출
2️⃣ GitHub Webhook이 NestJS 서버로 이벤트 전송
3️⃣ 서버에서 Webhook 요청을 처리하고 자동화 스크립트 실행
4️⃣ 라벨 자동 추가, 담당자 배정, PR 리뷰 요청 처리
5️⃣ Slack 또는 Discord로 알림 전송
3. Webhook을 활용한 Issue 자동화 기능 구현
🔹 3-1. Issue 생성 시 라벨 자동 추가 및 담당자 배정
GitHub에서 Issue가 생성되면 자동으로 특정 라벨을 추가하고, 담당자를 배정하는 기능을 구현합니다.
📌 GitHub API를 활용한 Issue 업데이트
GitHub API를 사용하여 Issue에 라벨을 추가하고, 담당자를 설정할 수 있습니다.
GitHub API 문서 참고: Issues API
🔹 3-2. Webhook 컨트롤러에 Issue 이벤트 처리 로직 추가
src/webhook/webhook.controller.ts
import { Controller, Post, Headers, Body } from '@nestjs/common';
import axios from 'axios';
const GITHUB_TOKEN = process.env.GITHUB_TOKEN || 'your_github_token';
const REPO_OWNER = 'your_github_username';
const REPO_NAME = 'your_repository_name';
@Controller('webhook')
export class WebhookController {
@Post()
async handleWebhook(@Headers('x-github-event') event: string, @Body() payload: any) {
if (event === 'issues' && payload.action === 'opened') {
const issueNumber = payload.issue.number;
const issueUrl = payload.issue.html_url;
console.log(`📌 New Issue Created: #${issueNumber}`);
// 라벨 추가 및 담당자 배정
await axios.post(
`https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/issues/${issueNumber}`,
{
labels: ['bug', 'needs-review'], // 기본 라벨 추가
assignees: ['your_teammate'], // 담당자 지정
},
{
headers: {
Authorization: `token ${GITHUB_TOKEN}`,
Accept: 'application/vnd.github.v3+json',
},
},
);
console.log(`✅ Issue #${issueNumber} updated with labels and assignee.`);
}
return { message: `Processed ${event} event` };
}
}
💡 Issue 생성 시 자동으로 라벨과 담당자를 지정하여 업무를 자동화할 수 있습니다.
4. Pull Request 자동화 기능 구현
🔹 4-1. PR 생성 시 리뷰어 자동 배정 및 메시지 추가
Pull Request가 생성되었을 때 자동으로 리뷰어를 배정하고, PR 설명을 보완하는 메시지를 추가합니다.
📌 GitHub API를 활용한 PR 리뷰어 지정
GitHub API를 사용하여 PR 리뷰어를 자동으로 배정할 수 있습니다.
GitHub API 문서 참고: Pull Requests API
🔹 4-2. Webhook 컨트롤러에 PR 이벤트 처리 로직 추가
src/webhook/webhook.controller.ts
@Controller('webhook')
export class WebhookController {
@Post()
async handleWebhook(@Headers('x-github-event') event: string, @Body() payload: any) {
if (event === 'pull_request' && payload.action === 'opened') {
const prNumber = payload.pull_request.number;
const prUrl = payload.pull_request.html_url;
console.log(`📌 New Pull Request Created: #${prNumber}`);
// 리뷰어 자동 배정
await axios.post(
`https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/pulls/${prNumber}/requested_reviewers`,
{
reviewers: ['reviewer1', 'reviewer2'], // 자동 배정할 리뷰어 목록
},
{
headers: {
Authorization: `token ${GITHUB_TOKEN}`,
Accept: 'application/vnd.github.v3+json',
},
},
);
console.log(`✅ Reviewers assigned to PR #${prNumber}`);
// PR에 메시지 추가
await axios.post(
`https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/issues/${prNumber}/comments`,
{
body: `🔍 자동 메시지: PR 리뷰 요청이 자동으로 할당되었습니다.`,
},
{
headers: {
Authorization: `token ${GITHUB_TOKEN}`,
Accept: 'application/vnd.github.v3+json',
},
},
);
console.log(`✅ Comment added to PR #${prNumber}`);
}
return { message: `Processed ${event} event` };
}
}
💡 PR 생성 시 리뷰어가 자동으로 할당되고, 설명 메시지가 추가됩니다.
5. Slack 및 Discord 알림 연동
이슈 및 PR 생성 시 Slack 또는 Discord로 알림을 전송하여 팀원에게 공유할 수 있습니다.
🔹 5-1. Slack 알림 전송 기능 추가
src/slack/slack.service.ts
import { Injectable } from '@nestjs/common';
import axios from 'axios';
@Injectable()
export class SlackService {
private slackWebhookUrl = process.env.SLACK_WEBHOOK_URL || 'your_slack_webhook_url';
async sendMessage(message: string) {
await axios.post(this.slackWebhookUrl, { text: message });
}
}
🔹 5-2. Webhook 컨트롤러에서 Slack 알림 전송 추가
@Controller('webhook')
export class WebhookController {
constructor(private readonly slackService: SlackService) {}
@Post()
async handleWebhook(@Headers('x-github-event') event: string, @Body() payload: any) {
if (event === 'issues' && payload.action === 'opened') {
await this.slackService.sendMessage(`📝 새로운 Issue가 생성되었습니다: #${payload.issue.number}`);
}
if (event === 'pull_request' && payload.action === 'opened') {
await this.slackService.sendMessage(`🔄 새로운 PR이 생성되었습니다: #${payload.pull_request.number}`);
}
return { message: `Processed ${event} event` };
}
}
💡 이슈 또는 PR이 생성될 때 Slack으로 실시간 알림이 전송됩니다.
6. 마무리 및 다음 글 예고
이번 글에서는 GitHub Webhook을 활용한 Issue 및 Pull Request 자동 관리 시스템을 구축했습니다.
다음 글에서는 Webhook을 활용한 GitHub Project 자동화 및 상태 관리 기능을 다룰 예정입니다! 🚀
'모음집 > git' 카테고리의 다른 글
GitHub Webhook 이벤트 처리 최적화 및 로깅 시스템 구축 (0) | 2025.03.20 |
---|---|
GitHub Webhook을 활용한 GitHub Project 자동화 및 상태 관리 (0) | 2025.03.20 |
GitHub Webhook을 활용한 CI/CD 자동화 시스템 구축 (0) | 2025.03.18 |
GitHub Webhook을 활용한 NestJS 서버 구축 및 이벤트 처리 (0) | 2025.03.18 |
GitHub Webhook 개념과 자동화 시스템 구축의 필요성 (2) | 2025.03.18 |
- Total
- Today
- Yesterday
- Python
- REACT
- Docker
- Next.js
- github
- Prisma
- gatsbyjs
- SEO최적화
- NestJS
- 백엔드개발
- 관리자
- nodejs
- seo 최적화 10개
- llm
- PostgreSQL
- 웹개발
- fastapi
- rag
- 프론트엔드
- nextJS
- AI챗봇
- kotlin
- App Router
- LangChain
- Webpack
- CI/CD
- AI 자동화
- SEO 최적화
- Ktor
- 개발블로그
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |