서버구축 (WEB,DB)

n8n 워크플로우, GitHub 백업으로 안전하게 관리하기

날으는물고기 2024. 11. 16. 00:21

n8n에서 모든 워크플로우의 JSON 데이터를 가져와 GitLab에 자동으로 저장하고, 매일 반복적으로 이를 실행하여 버전 관리를 수행하는 워크플로우 구성 방법입니다.

1. GitLab Personal Access Token 생성

  1. GitLab 로그인
    • GitLab 계정에 로그인합니다.
  2. Personal Access Token 생성
    • GitLab의 사용자 프로필 메뉴에서 Settings로 이동합니다.
    • 좌측 메뉴에서 Access Tokens를 클릭합니다.
    • 새 토큰을 생성하기 위해 아래와 같은 정보를 입력합니다:
      • Name: 토큰 이름 (예: n8n API Token)
      • Expires at: 만료 날짜 설정 (필요에 따라 설정)
      • Scopes: api, write_repository, read_repository 권한을 선택합니다.
    • Create personal access token 버튼을 클릭합니다.
    • 생성된 토큰을 복사하여 안전한 장소에 저장합니다. (이 토큰은 이후에 다시 볼 수 없으니, 반드시 복사해 두세요.)

2. n8n에서 GitLab 인증 토큰 등록

  1. n8n에 로그인
    • n8n 인스턴스에 로그인합니다.
  2. Credentials 등록
    • n8n의 왼쪽 메뉴에서 Credentials를 클릭합니다.
    • New Credential을 클릭하고, HTTP Request를 선택합니다.
    • GitLab API와의 연동을 위해 아래와 같이 설정합니다:
      • Name: GitLab API Token
      • Authentication: 선택하지 않음
      • Header Parameters:
        • Key: Private-Token
        • Value: {your_gitlab_access_token} (GitLab에서 생성한 Personal Access Token)
    • Save를 클릭하여 저장합니다.

3. n8n API 토큰 생성 및 설정

n8n 내부에서 API 요청을 통해 워크플로우 데이터를 가져오려면, n8n 자체의 API 접근 권한이 필요합니다.

  1. n8n API 토큰 생성
    • n8n의 사용자 설정에서 API 토큰을 생성합니다.
    • Settings > API Key로 이동하여 API Key를 생성하고 복사합니다.
  2. API 토큰 등록
    • n8n에서 Credentials 메뉴로 이동합니다.
    • New Credential을 클릭하고, HTTP Request를 선택합니다.
    • 아래와 같이 설정합니다.
      • Name: n8n API Token
      • Authentication: Bearer
      • Bearer Token: {your_n8n_api_token} (n8n에서 생성한 API Key)
    • Save를 클릭하여 저장합니다.

이 워크플로우는 다음과 같은 작업을 수행합니다.

  1. 전체 워크플로우 목록 가져오기: n8n API를 통해 모든 워크플로우 ID 목록을 가져옵니다.
  2. 각 워크플로우의 JSON 데이터 가져오기: 각 워크플로우의 ID를 사용해 JSON 데이터를 가져옵니다.
  3. GitLab에 JSON 데이터 푸시: 워크플로우 데이터를 GitLab에 파일로 저장하고 버전 관리를 합니다.
  4. 오류 처리 및 로깅: 오류 발생 시 적절한 처리 및 로그를 남깁니다.
  5. 스케줄링 설정: 매일 이 작업을 자동으로 실행합니다.

Step 1: 전체 워크플로우 목록 가져오기

HTTP Request Node: Get Workflow IDs

  • Method: GET
  • URL: http://localhost:5678/rest/workflows
  • Headers:
    • Key: Authorization
    • Value: Bearer {your_n8n_api_token}

이 노드는 n8n에 저장된 모든 워크플로우의 목록을 가져옵니다. 응답으로 워크플로우의 상세 정보 리스트를 받게 되며, 이 중 각 워크플로우의 id를 추출하여 다음 단계에서 사용합니다.

Step 2: 각 워크플로우의 JSON 데이터 가져오기

SplitInBatches Node: Process Workflow IDs

  • Batch Size: 1
  • Input: 이전 단계에서 가져온 워크플로우 ID 리스트

이 노드는 각 워크플로우 ID를 하나씩 처리하며, 순차적으로 JSON 데이터를 가져오는 단계로 연결합니다.

 

HTTP Request Node: Get Workflow Data

  • Method: GET
  • URL: http://localhost:5678/rest/workflows/{{$json["id"]}}
  • Headers:
    • Key: Authorization
    • Value: Bearer {your_n8n_api_token}

이 노드는 개별 워크플로우의 JSON 형식 데이터를 가져옵니다. URL에서 {{$json["id"]}} 부분은 SplitInBatches 노드로부터 전달받은 워크플로우 ID입니다.

Step 3: GitLab에 JSON 데이터 푸시

Function Node: Prepare GitLab API Request

const workflowData = $json;
const workflowName = workflowData.name.replace(/\s+/g, '_').toLowerCase();
const filePath = `workflows/${workflowName}.json`;

return [
  {
    json: {
      filePath,
      content: JSON.stringify(workflowData, null, 2),
      commitMessage: `Update workflow: ${workflowData.name}`,
    }
  }
];

이 노드는 워크플로우 데이터를 파일로 저장하기 위해 필요한 파일 경로, 파일 내용, 커밋 메시지를 준비합니다. workflowName은 워크플로우 이름에서 공백을 언더바(_)로 대체하여 파일명으로 사용합니다.

 

HTTP Request Node: Push to GitLab

  • Method: POST
  • URL: https://gitlab.com/api/v4/projects/{project_id}/repository/files/{{$json.filePath}}
  • Headers:
    • Key: Private-Token
    • Value: {your_gitlab_access_token}
  • Body Content:
    • Content-Type: application/json
    • Body:
      {
        "branch": "main",
        "content": "{{ $json.content }}",
        "commit_message": "{{ $json.commitMessage }}"
      }

이 노드는 준비된 파일을 GitLab의 특정 프로젝트에 푸시합니다. 파일이 이미 존재하는 경우 GitLab API는 파일을 덮어씁니다. 커밋 메시지는 "Update workflow: {workflow name}" 형식으로 설정됩니다.

Step 4: 오류 처리 및 로깅

각 단계에서 오류가 발생할 수 있으므로, 오류 발생 시 로깅 및 알림을 설정할 수 있습니다. 예를 들어, 각 HTTP Request 노드에 대해 오류 발생 시 실행될 별도의 노드를 추가할 수 있습니다.

Step 5: 스케줄링 설정

Cron Node: Schedule Daily Execution

  • Mode: Every Day
  • Time: 원하는 시간 (예: 매일 오전 1시)

이 노드는 매일 정해진 시간에 워크플로우를 자동으로 실행합니다.

 

n8n에서 위 단계를 구성한 전체 워크플로우는 다음과 같습니다.

  1. Cron Node: 워크플로우가 매일 자동으로 실행되도록 스케줄링.
  2. HTTP Request Node (Get Workflow IDs): 전체 워크플로우 목록을 n8n API에서 가져옴.
  3. SplitInBatches Node: 각 워크플로우 ID를 순차적으로 처리.
  4. HTTP Request Node (Get Workflow Data): 개별 워크플로우의 JSON 데이터를 가져옴.
  5. Function Node (Prepare GitLab API Request): GitLab에 푸시할 파일 경로 및 내용 준비.
  6. HTTP Request Node (Push to GitLab): JSON 데이터를 GitLab에 푸시하여 버전 관리.

이 워크플로우를 통해 n8n의 모든 워크플로우를 GitLab에 자동으로 저장하고, 버전 관리를 효율적으로 수행할 수 있습니다. n8n 서버와 GitLab 프로젝트에 맞게 설정을 조정하고, 각 노드에서 발생할 수 있는 오류를 대비하여 적절한 오류 처리를 추가하는 것이 중요합니다.

728x90