본문 바로가기
서버구축 (WEB,DB)

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

by 날으는물고기 2024. 11. 16.

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

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

댓글