ข้ามไปยังเนื้อหา

Environments

GrowthBook มาพร้อมกับ environment ในตัวสามแบบ: development, staging และ production environment คือ context ที่มีชื่อกำกับ ซึ่ง:

  • เก็บ สถานะ flag ของตัวเอง (enabled/disabled, override rules)
  • มี SDK Connection ของตัวเองพร้อม clientKey ที่ไม่ซ้ำกัน

นั่นหมายความว่า flag หนึ่งสามารถเปิดอยู่ใน development และปิดอยู่ใน production ได้ในเวลาเดียวกัน — โดยไม่ต้อง deploy เพื่อย้าย flag ระหว่าง stage

ผู้ดูแลระบบยังเพิ่ม environment ที่กำหนดเองได้ด้วย (เช่น qa, canary) จาก Settings → Environments

ทุก Feature มี toggle ในระดับ environment:

  1. เปิด Feature ใน GrowthBook
  2. เลื่อนไปที่ส่วน Environments คุณจะเห็นแถวสำหรับแต่ละ environment
  3. คลิก toggle ข้าง ๆ production เพื่อเปิดใช้งาน flag ที่นั่น
  4. สถานะ flag ใน development และ staging ยังคงไม่เปลี่ยนแปลง

override rule (การบังคับค่า, การรัน experiment, การทำ percentage rollout) ก็แยกตาม environment เช่นกัน — rule ใน development ไม่ส่งผลกระทบต่อ production

ไปที่ Settings → SDK Connections เพื่อดู connection หนึ่งตัวต่อหนึ่ง environment แต่ละ connection มี clientKey ที่ไม่ซ้ำกัน ใช้ key ที่ถูกต้องในแต่ละ context ของการ deploy:

// Development app
const gb = new GrowthBook({
apiHost: 'https://cdn.growthbook.io',
clientKey: 'sdk-dev-abc123',
});
// Production app
const gb = new GrowthBook({
apiHost: 'https://cdn.growthbook.io',
clientKey: 'sdk-prod-xyz789',
});

โดยทั่วไปคุณจะเก็บ clientKey ไว้ใน environment variable แล้ว inject ตอน build/runtime:

const gb = new GrowthBook({
apiHost: 'https://cdn.growthbook.io',
clientKey: process.env.GROWTHBOOK_CLIENT_KEY,
});
// .env.development
// GROWTHBOOK_CLIENT_KEY=sdk-dev-abc123

// .env.production
// GROWTHBOOK_CLIENT_KEY=sdk-prod-xyz789

import { GrowthBook } from '@growthbook/growthbook';

const gb = new GrowthBook({
  apiHost: 'https://cdn.growthbook.io',
  clientKey: process.env.GROWTHBOOK_CLIENT_KEY,
});

await gb.init({ timeout: 2000 });

// Same flag key works across all environments.
// The value returned depends on which environment
// the clientKey belongs to.
const isOn = gb.isOn('my-flag');
  1. ไปที่ Settings → SDK Connections
  2. คลิก Add SDK Connection
  3. ตั้งชื่อ (เช่น Production Node), เลือก environment เป็น production และเลือกภาษาของ SDK
  4. คัดลอก clientKey ที่ถูกสร้างขึ้นมา แล้วเก็บไว้อย่างปลอดภัยเป็น environment variable ใน production deployment ของคุณ
ตัวเลือกBenefitCost
แยก environment ชัดเจน (dev/staging/prod)ปลอดภัยกว่า ทดสอบก่อนปล่อยจริงได้จัดการหลาย SDK key/permission ซับซ้อนกว่า
ใช้ environment เดียวตั้งค่าเร็วกว่าเสี่ยง flag รั่วเข้า production โดยไม่ตั้งใจ
  • ทดสอบ flag ใน production environment ตรงๆ โดยไม่ผ่าน staging ก่อน
  • ลืม sync ค่า flag ระหว่าง environment ทำให้ staging กับ production ไม่ตรงกัน
  • ให้สิทธิ์แก้ไข production environment กับทุกคนในทีมโดยไม่จำกัด

💡 ตัวอย่างจากของจริง

ทีม engineering ขนาดใหญ่อย่าง Booking.com แยก permission ต่อ environment อย่างเข้มงวด — เฉพาะ senior engineer เท่านั้นที่แก้ production ได้

โปรเจกต์ GrowthBook ทั่วไปมี SDK Connection กี่ตัวสำหรับสาม environment?
จะเกิดอะไรขึ้นกับสถานะ flag ใน production เมื่อคุณเปิด flag ใน development?
ใน GrowthBook คุณหา clientKey สำหรับ environment ที่ระบุได้ที่ไหน?