티스토리 뷰

반응형

Slack + GitHub App 완전 자동화 통합: 알림, 리뷰, 배포까지 한 번에

이전 글에서는 GitHub App과 OpenAI를 연동해 PR 리뷰 자동화 도우미를 구현했습니다.
이번 글에서는 Slack과 GitHub App을 통합하여 알림, 리뷰, 배포까지 자동화하는 실전 협업 시스템을 구축해보겠습니다.
이제 개발자는 코드만 작성하면, AI가 리뷰하고, Slack으로 알림 받고, 배포까지 자동으로 이뤄지는 완전 자동화된 DevOps 흐름을 경험할 수 있습니다.


1. 목표: GitHub + Slack 완전 자동화 파이프라인

이벤트 동작

✅ PR 생성 AI 요약 + 리뷰어 자동 지정 + Slack 알림
✅ PR 머지 자동 배포 스크립트 실행 + Slack 배포 완료 알림
✅ CI 실패 Slack에 테스트 실패 경고
✅ 이슈 생성 AI가 요약한 이슈 내용을 Slack으로 전송

🔧 2. 통합 시스템 구성도

GitHub Event (Push/PR/Issue)
           ↓
   GitHub App Webhook 서버 (NestJS)
           ↓
   ┌────────────┬────────────┬────────────┐
   │ OpenAI 요약 │ GitHub API │ Slack Webhook │
   └────────────┴────────────┴────────────┘
           ↓
  자동 리뷰 + 자동 배포 + 실시간 알림

💬 3. Slack Webhook 설정 방법

  1. Slack → 앱 설정 → Incoming Webhooks 활성화
  2. Webhook URL 생성 (예: https://hooks.slack.com/services/T000/B000/XXXX)
  3. .env에 저장:
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T000/B000/XXXX

🧱 4. PR 생성 시 Slack 알림 예시

import axios from 'axios';

async function notifySlack(prUrl: string, summary: string) {
  const message = {
    text: `🚀 *새로운 PR 생성됨!*\n👉 <${prUrl}>\n\n🧠 *AI 리뷰 요약:*\n${summary}`,
  };
  await axios.post(process.env.SLACK_WEBHOOK_URL, message);
}

PR 생성 → AI 요약 → Slack으로 자동 전송!


⚙️ 5. PR Merge 후 자동 배포 + 알림

반응형

🔹 deploy.sh 예시 (서버에 작성)

#!/bin/bash
echo "🔄 Pulling latest code..."
git pull origin main

echo "📦 Building Docker image..."
docker build -t app:latest .

echo "🚀 Restarting container..."
docker stop app && docker rm app
docker run -d --name app -p 3000:3000 app:latest

echo "✅ Deployment complete"

🔹 Webhook에서 실행 및 Slack 알림 추가

import { exec } from 'child_process';

if (payload.action === 'closed' && payload.pull_request.merged) {
  exec('./deploy.sh', async (error, stdout, stderr) => {
    const msg = error
      ? `❌ 배포 실패: ${stderr}`
      : `✅ *배포 완료!*\n${payload.pull_request.title}`;
    await notifySlack(payload.pull_request.html_url, msg);
  });
}

🧪 6. CI 실패 시 Slack 알림 (GitHub Actions → Webhook 호출)

📁 .github/workflows/ci.yml

name: CI Test
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: npm install && npm test
    # 실패 시 Webhook 호출
    if: failure()
    steps:
      - name: Notify Slack
        run: |
          curl -X POST https://your-server.com/ci-fail \
          -H "Content-Type: application/json" \
          -d '{"pr": "${{ github.event.pull_request.html_url }}"}'

📌 서버에서 Slack으로 실패 알림 전송

@Post('ci-fail')
handleCiFail(@Body() body) {
  return notifySlack(body.pr, '❌ 테스트 실패! 리뷰가 필요합니다.');
}

🧠 7. 이슈 생성 시 AI 요약 + Slack 알림

if (event === 'issues' && action === 'opened') {
  const prompt = `이슈 제목: ${title}\n내용: ${body}\n요약해줘.`;
  const gpt = await openai.chat.completions.create({ ... });
  await notifySlack(issueUrl, gpt.choices[0].message.content);
}

개발자가 이슈만 등록하면 요약 + Slack 공유까지 자동 수행!


🧠 8. 알림 메시지 포맷 개선 (Slack Block Kit 적용)

await axios.post(SLACK_WEBHOOK_URL, {
  blocks: [
    {
      type: 'section',
      text: {
        type: 'mrkdwn',
        text: `🛠️ *PR 요약 도착!*\n*${title}*\n<${url}>`,
      },
    },
    {
      type: 'context',
      elements: [{ type: 'mrkdwn', text: `AI 요약: ${summary}` }],
    },
  ],
});

9. 통합 자동화 기능 정리

기능 자동화 방식

PR 생성 AI 요약 + Slack 알림 + 리뷰어 지정
PR 머지 자동 배포 + Slack 알림
CI 실패 GitHub Action → Webhook → Slack 경고
이슈 생성 AI 요약 → Slack 알림
PR 댓글 생성 GPT 요약 → GitHub 코멘트 작성

🔚 10. 마무리 및 다음 글 예고

이번 글에서는 GitHub App을 Slack과 통합하여 개발 협업 자동화 시스템을 완성하는 방법을 실습했습니다.
이제 PR부터 배포까지 모든 과정을 실시간으로 공유하고, 업무 흐름을 투명하게 관리할 수 있습니다.

다음 글에서는
👉 "GitHub + Notion + OpenAI로 제품/기술 문서 자동화 시스템 만들기"
기술 문서 작성도 자동화하는 실전 예제를 다룰 예정입니다! 📘✍️

 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함
반응형