Skip to content

Tutorial: Create environments with source control#

Feature availability

  • Available on Enterprise.
  • คุณต้องเป็น n8n instance owner, admin, หรือ project owner เพื่อตั้งค่า source control และเพื่อส่งงานไปและกลับจาก Git

tutorial นี้จะพาคุณตั้งค่า environments แบบ end-to-end คุณจะสร้าง environment สองอัน: development กับ production โดยใช้ GitHub เป็น Git provider (ถ้าใช้ provider อื่นก็คล้ายๆ กัน)

n8n สร้างฟีเจอร์ environments บน Git ซึ่งเป็นซอฟต์แวร์ version control คุณจะเชื่อม n8n instance กับ Git branch แล้วใช้ pattern push-pull เพื่อย้ายงานระหว่าง environments ควรเข้าใจ environments กับ Git มาก่อน ถ้าอยากอ่านเพิ่มดูที่:

  • Environments in n8n: จุดประสงค์ของ environments และวิธีการทำงานใน n8n
  • Git and n8n: concept ของ Git และ source control ใน n8n

Choose your source control pattern#

ก่อนจะ setup source control กับ environments คุณต้องวางแผน environments กับความสัมพันธ์กับ Git branch n8n รองรับ Branch patterns หลายแบบ สำหรับ environments ให้เลือกว่าจะใช้ multi-instance multi-branch หรือ multi-instance single-branch tutorial นี้จะสอนทั้งสองแบบ

คำแนะนำ: อย่า push และ pull ไปยัง n8n instance เดียวกัน

คุณสามารถ push งานจาก instance หนึ่งไปยัง branch และ pull มายัง instance เดียวกันได้ แต่ n8n ไม่แนะนำวิธีนี้ เพื่อลดความเสี่ยงของ merge conflicts และการเขียนทับงาน ควรพยายามสร้างกระบวนการที่งานไหลไปในทิศทางเดียว: ไม่ว่าจะไปยัง Git หรือจาก Git แต่ไม่ใช่ทั้งสองทาง

Multiple instances, multiple branches#

Diagram

ข้อดีของรูปแบบนี้คือ:

  • มีชั้นความปลอดภัยเพิ่มเติมเพื่อป้องกันการเปลี่ยนแปลงเข้าสู่ production environment ของคุณโดยไม่ได้ตั้งใจ คุณต้องทำ pull request ใน GitHub เพื่อคัดลอกงานระหว่าง environments
  • รองรับมากกว่าสอง instances

ข้อเสียคือ มีขั้นตอนที่ต้องทำด้วยตนเองมากขึ้นในการคัดลอกงานระหว่าง environments

Multiple instances, one branch#

Diagram

ข้อดีของรูปแบบนี้คือ งานจะพร้อมใช้งานสำหรับ environment อื่น ๆ ทันทีเมื่อคุณ push จาก instance หนึ่ง

ข้อเสียคือ:

  • หากคุณ push โดยไม่ได้ตั้งใจ มีความเสี่ยงที่งานนั้นจะเข้าไปอยู่ใน production instance ของคุณ หากคุณ ใช้ GitHub Action เพื่อทำให้การ pull เป็นอัตโนมัติ ไปยัง production คุณต้องใช้รูปแบบ multi-instance, multi-branch หรือระมัดระวังไม่ push งานที่คุณไม่ต้องการให้เข้าสู่ production
  • การ push และ pull ไปยัง instance เดียวกันอาจทำให้ข้อมูลสูญหายได้ เนื่องจากการเปลี่ยนแปลงจะถูกเขียนทับเมื่อดำเนินการเหล่านี้ คุณควรตั้งค่ากระบวนการเพื่อให้แน่ใจว่าเนื้อหาไหลไปในทิศทางเดียว

Set up your repository#

เลือก pattern เสร็จแล้ว ให้ setup GitHub repository

  1. Create a new repository
    • ให้ repository เป็น private เว้นแต่คุณอยากให้ workflow, tag, variable, credential stub ของคุณเปิดเผยต่อสาธารณะ
    • สร้าง repository พร้อม README เพื่อจะได้สร้าง branch ได้ทันที
  2. สร้าง branch ชื่อ production กับ development ดูวิธีที่ Creating and deleting branches within your repository

Create a new repository

  • ให้ repository เป็น private เว้นแต่คุณอยากให้ workflow, tag, variable, credential stub ของคุณเปิดเผยต่อสาธารณะ
  • สร้าง repository พร้อม README จะได้ branch main ไว้เชื่อมต่อ

Connect your n8n instances to your repository#

สร้าง n8n instance สองอัน อันหนึ่งสำหรับ development อีกอันสำหรับ production

Configure Git in n8n#

  1. ไปที่ Settings > Environments
  2. ในช่อง Git repository URL ให้ป้อน SSH URL สำหรับ repository ของคุณ
  3. n8n รองรับอัลกอริทึม public key แบบ ED25519 และ RSA โดย ED25519 เป็นค่าเริ่มต้น เลือก RSA ภายใต้ SSH Key หาก git host ของคุณต้องการ RSA
  4. คัดลอก SSH key

Set up a deploy key#

ตั้งค่า SSH access โดยสร้าง deploy key ให้ repository โดยใช้ SSH key จาก n8n ต้องให้สิทธิ์ write ดูวิธีที่ GitHub | Managing deploy keys

Connect n8n and configure your instance#

  1. ที่ Settings > Environments ใน n8n ให้เลือก Connect เพื่อเชื่อมกับ Git repository
  2. ที่ Instance settings เลือก branch ที่จะใช้กับ n8n instance นี้ เชื่อม production branch กับ production instance, development branch กับ development instance
  3. production instance เท่านั้น: เลือก Protected instance เพื่อป้องกันไม่ให้ user แก้ workflow ใน instance นี้
  4. เลือก Save settings
  1. ที่ Settings > Environments ใน n8n ให้เลือก Connect
  2. ที่ Instance settings เลือก main branch
  3. production instance เท่านั้น: เลือก Protected instance เพื่อป้องกันไม่ให้ user แก้ workflow ใน instance นี้
  4. เลือก Save settings

Push work from development#

ใน development instance ให้สร้าง workflow, tag, variable, credential ขึ้นมาสักหน่อย

วิธีการ push งานไปยัง Git:

  1. เลือก Push Push icon ในเมนูหลัก

    ดูภาพหน้าจอ

    Pull and push buttons when menu is closed
    ปุ่ม Pull และ Push เมื่อเมนูปิดอยู่

    Pull and push buttons when menu is open
    ปุ่ม Pull และ Push เมื่อเมนูเปิดอยู่

  2. ใน modal Commit and push changes ให้เลือก workflows ที่คุณต้องการ push คุณสามารถกรองตามสถานะ (new, modified, deleted) และค้นหา workflows ได้ n8n จะ push tags, และ variable และ credential stubs โดยอัตโนมัติ

  3. ป้อน commit message ซึ่งควรเป็นคำอธิบายหนึ่งประโยคเกี่ยวกับการเปลี่ยนแปลงที่คุณทำ
  4. เลือก Commit and Push n8n จะส่งงานไปยัง Git และแสดงข้อความแจ้งความสำเร็จเมื่อเสร็จสิ้น

Pull work to production#

ตอนนี้งานของคุณอยู่ใน GitHub แล้ว ถ้าใช้ multi-branch จะอยู่ใน development branch ถ้าใช้ single-branch จะอยู่ใน main

  1. ใน GitHub ให้สร้าง pull request เพื่อ merge development เข้า production
  2. merge pull request
  3. ที่ production instance ให้เลือก Pull Pull icon ในเมนูหลัก

ที่ production instance ให้เลือก Pull Pull icon ในเมนูหลัก

ดูภาพหน้าจอ

Pull and push buttons when menu is closed
ปุ่ม Pull และ Push เมื่อเมนูปิดอยู่

Pull and push buttons when menu is open
ปุ่ม Pull และ Push เมื่อเมนูเปิดอยู่

Optional: Use a GitHub Action to automate pulls#

ถ้าไม่อยาก login เข้า production instance เพื่อ pull งานเอง สามารถใช้ GitHub Action กับ n8n API เพื่อ pull อัตโนมัติทุกครั้งที่ push งานใหม่เข้า production หรือ main branch

ตัวอย่าง GitHub Action:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
name: CI
on:
  # Trigger the workflow on push or pull request events for the "production" branch
  push:
    branches: [ "production" ]
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:
jobs:
  run-pull:
    runs-on: ubuntu-latest
    steps:
      - name: PULL
				# Use GitHub secrets to protect sensitive information
        run: >
          curl --location '${{ secrets.INSTANCE_URL }}/version-control/pull' --header
          'Content-Type: application/json' --header 'X-N8N-API-KEY: ${{ secrets.INSTANCE_API_KEY }}'

Next steps#

อ่านต่อเกี่ยวกับ: