8
n8n 한국어amn8n.com

발행 설명 생성기

중급

이것은DevOps, AI Summarization분야의자동화 워크플로우로, 10개의 노드를 포함합니다.주로 Code, Jira, Merge, EmailSend, GithubTrigger 등의 노드를 사용하며. GitHub, JIRA, Google Gemini를 사용하여 전문적인 출시 설명서를 생성하고 이메일로 발송합니다.

사전 요구사항
  • GitHub Personal Access Token
  • Google Gemini API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "Your_ID",
  "meta": {
    "instanceId": "Your_ID",
    "templateCredsSetupCompleted": true
  },
  "name": "Release-note-generator",
  "tags": [],
  "nodes": [
    {
      "id": "Your_ID",
      "name": "Github Trigger",
      "type": "n8n-nodes-base.githubTrigger",
      "position": [
        -440,
        -80
      ],
      "webhookId": "Your_ID",
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "name"
        },
        "events": [
          "push"
        ],
        "options": {
          "insecureSSL": false
        },
        "repository": {
          "__rl": true,
          "mode": "list",
          "cachedResultUrl": "Your_Github_URL",
          "cachedResultName": "Your_Repository_Name"
        }
      },
      "credentials": {
        "githubApi": {
          "id": "Your_ID",
          "name": "GitHub account"
        }
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "Your_ID",
      "name": "코드",
      "type": "n8n-nodes-base.code",
      "position": [
        -220,
        -80
      ],
      "parameters": {
        "jsCode": "const inputData = $input.all();\nconst commits = inputData[0].json.body.commits;\n\nreturn commits.map(commit => {\n  const message = commit.message;\n  const timestamp = commit.timestamp;\n\n  // Match something like \"ABC-123\", case-insensitive, from the beginning\n  const match = message.match(/([A-Z]+-\\d+)/i);\n\n  const jiraId = match ? match[0].toUpperCase() : null;\n\n  return {\n    json: {\n      message,\n      timestamp,\n      jira_id: jiraId\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "Your_ID",
      "name": "Basic LLM 체인",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        480,
        -160
      ],
      "parameters": {
        "text": "=",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "type": "HumanMessagePromptTemplate",
              "message": "=You are a professional technical release manager generating production release notes for CxOs and clients.\n\nGenerate a complete release note in **HTML format**, not plain text. The content is based on the following JIRA items, each having `jira_id`, `jira_summary`, `jira_description`, and `message`.\n\nOutput structure (as HTML):\n\n1. Title and Metadata\n   - H2 tag: \"Production Deployment – [Release Date]\"\n   - Bold lines: Version, Environment, Deployment Date\n\n2. Overview\n   - Short paragraph explaining the goal of this deployment\n\n3. Key Changes\n   - Bullet list (<ul>) with one <li> per JIRA item\n   - For each bullet: Summarize `jira_description` + `message` into a business-friendly sentence\n\nRules:\n- Output as clean HTML only\n- Do not wrap in a JSON object or Markdown\n- Use simple inline styles for readability\n\nHere is the input data:\n{{ JSON.stringify($json.items, null, 2) }}\n"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "Your_ID",
      "name": "Google Gemini 채팅 모델",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        480,
        40
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-pro"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "Your_ID",
          "name": "Google Gemini(PaLM) Api account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "Your_ID",
      "name": "Send email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        860,
        -160
      ],
      "webhookId": "Your_ID",
      "parameters": {
        "html": "={{ $json.output.releasenote }}",
        "options": {},
        "subject": "Your_company_name | Location, Country \nYou’re receiving this email because you are subscribed to release notifications.",
        "toEmail": "Your_receiver_email",
        "fromEmail": "Your_sender_email"
      },
      "credentials": {
        "smtp": {
          "id": "Your_ID",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1,
      "alwaysOutputData": false
    },
    {
      "id": "Your_ID",
      "name": "Get an issue",
      "type": "n8n-nodes-base.jira",
      "position": [
        -20,
        -320
      ],
      "parameters": {
        "issueKey": "={{ $json.jira_id }}",
        "operation": "get",
        "additionalFields": {}
      },
      "credentials": {
        "jiraSoftwareCloudApi": {
          "id": "Your_ID",
          "name": "Jira SW Cloud account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "Your_ID",
      "name": "코드2",
      "type": "n8n-nodes-base.code",
      "position": [
        140,
        -320
      ],
      "parameters": {
        "jsCode": "// Get all incoming items from the JIRA node.\nconst allItems = $input.all();\n\n// Use .map() to loop through each item and transform it.\nreturn allItems.map(item => {\n  // The full JIRA issue data for the current item in the loop\n  const issue = item.json;\n\n  // Extract the specific fields you need for this issue.\n  // Use optional chaining (?.) to prevent errors if a field is missing.\n  const jiraId = issue.key; // The JIRA ID (e.g., \"MS-6\")\n  const summary = issue.fields?.summary;\n  const description = issue.fields?.description;\n\n  // Return a new, clean object for this specific issue.\n  return {\n    json: {\n      jira_id: jiraId, // Added as requested\n      jira_summary: summary,\n      jira_description: description\n    }\n  };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "Your_ID",
      "name": "병합",
      "type": "n8n-nodes-base.merge",
      "position": [
        60,
        20
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition"
      },
      "typeVersion": 3.2
    },
    {
      "id": "Your_ID",
      "name": "코드3",
      "type": "n8n-nodes-base.code",
      "position": [
        260,
        20
      ],
      "parameters": {
        "jsCode": "// This will take all input items from previous loop and combine into one array\nreturn [{\n  json: {\n    items: items.map(i => i.json)\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "Your_ID",
      "name": "구조화된 출력 파서1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        640,
        40
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"releasenote\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"
      },
      "typeVersion": 1.3
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "errorWorkflow": "Your_ID",
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "saveExecutionProgress": true,
    "timeSavedPerExecution": 1,
    "saveDataErrorExecution": "all",
    "saveDataSuccessExecution": "all"
  },
  "versionId": "Your_ID",
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "Your_ID",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Code2": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code3": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Code3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Your_ID": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Your_ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 데브옵스, AI 요약

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수10
카테고리2
노드 유형8
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
Intuz

Intuz

@intuz

A boutique tech consulting company, helping businesses with custom AI/ML, Workflow Automations, and software development.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34