n8n에서 모든 워크플로우의 JSON 데이터를 가져와 GitLab에 자동으로 저장하고, 매일 반복적으로 이를 실행하여 버전 관리를 수행하는 워크플로우 구성 방법입니다.
1. GitLab Personal Access Token 생성
- GitLab 로그인
- GitLab 계정에 로그인합니다.
- Personal Access Token 생성
- GitLab의 사용자 프로필 메뉴에서
Settings
로 이동합니다. - 좌측 메뉴에서
Access Tokens
를 클릭합니다. - 새 토큰을 생성하기 위해 아래와 같은 정보를 입력합니다:
- Name: 토큰 이름 (예:
n8n API Token
) - Expires at: 만료 날짜 설정 (필요에 따라 설정)
- Scopes:
api
,write_repository
,read_repository
권한을 선택합니다.
- Name: 토큰 이름 (예:
Create personal access token
버튼을 클릭합니다.- 생성된 토큰을 복사하여 안전한 장소에 저장합니다. (이 토큰은 이후에 다시 볼 수 없으니, 반드시 복사해 두세요.)
- GitLab의 사용자 프로필 메뉴에서
2. n8n에서 GitLab 인증 토큰 등록
- n8n에 로그인
- n8n 인스턴스에 로그인합니다.
- 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)
- Key:
- Name:
Save
를 클릭하여 저장합니다.
- n8n의 왼쪽 메뉴에서
3. n8n API 토큰 생성 및 설정
n8n 내부에서 API 요청을 통해 워크플로우 데이터를 가져오려면, n8n 자체의 API 접근 권한이 필요합니다.
- n8n API 토큰 생성
- n8n의 사용자 설정에서 API 토큰을 생성합니다.
Settings
>API Key
로 이동하여 API Key를 생성하고 복사합니다.
- API 토큰 등록
- n8n에서
Credentials
메뉴로 이동합니다. New Credential
을 클릭하고,HTTP Request
를 선택합니다.- 아래와 같이 설정합니다.
- Name:
n8n API Token
- Authentication:
Bearer
- Bearer Token:
{your_n8n_api_token}
(n8n에서 생성한 API Key)
- Name:
Save
를 클릭하여 저장합니다.
- n8n에서
이 워크플로우는 다음과 같은 작업을 수행합니다.
- 전체 워크플로우 목록 가져오기: n8n API를 통해 모든 워크플로우 ID 목록을 가져옵니다.
- 각 워크플로우의 JSON 데이터 가져오기: 각 워크플로우의 ID를 사용해 JSON 데이터를 가져옵니다.
- GitLab에 JSON 데이터 푸시: 워크플로우 데이터를 GitLab에 파일로 저장하고 버전 관리를 합니다.
- 오류 처리 및 로깅: 오류 발생 시 적절한 처리 및 로그를 남깁니다.
- 스케줄링 설정: 매일 이 작업을 자동으로 실행합니다.
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}
- Key:
이 노드는 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}
- Key:
이 노드는 개별 워크플로우의 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}
- Key:
- Body Content:
- Content-Type:
application/json
- Body:
{ "branch": "main", "content": "{{ $json.content }}", "commit_message": "{{ $json.commitMessage }}" }
- Content-Type:
이 노드는 준비된 파일을 GitLab의 특정 프로젝트에 푸시합니다. 파일이 이미 존재하는 경우 GitLab API는 파일을 덮어씁니다. 커밋 메시지는 "Update workflow: {workflow name}"
형식으로 설정됩니다.
Step 4: 오류 처리 및 로깅
각 단계에서 오류가 발생할 수 있으므로, 오류 발생 시 로깅 및 알림을 설정할 수 있습니다. 예를 들어, 각 HTTP Request 노드에 대해 오류 발생 시 실행될 별도의 노드를 추가할 수 있습니다.
Step 5: 스케줄링 설정
Cron Node: Schedule Daily Execution
- Mode: Every Day
- Time: 원하는 시간 (예: 매일 오전 1시)
이 노드는 매일 정해진 시간에 워크플로우를 자동으로 실행합니다.
n8n에서 위 단계를 구성한 전체 워크플로우는 다음과 같습니다.
- Cron Node: 워크플로우가 매일 자동으로 실행되도록 스케줄링.
- HTTP Request Node (Get Workflow IDs): 전체 워크플로우 목록을 n8n API에서 가져옴.
- SplitInBatches Node: 각 워크플로우 ID를 순차적으로 처리.
- HTTP Request Node (Get Workflow Data): 개별 워크플로우의 JSON 데이터를 가져옴.
- Function Node (Prepare GitLab API Request): GitLab에 푸시할 파일 경로 및 내용 준비.
- HTTP Request Node (Push to GitLab): JSON 데이터를 GitLab에 푸시하여 버전 관리.
이 워크플로우를 통해 n8n의 모든 워크플로우를 GitLab에 자동으로 저장하고, 버전 관리를 효율적으로 수행할 수 있습니다. n8n 서버와 GitLab 프로젝트에 맞게 설정을 조정하고, 각 노드에서 발생할 수 있는 오류를 대비하여 적절한 오류 처리를 추가하는 것이 중요합니다.
댓글