บันทึกนักพัฒนา: Deploy Firebase Cloud Functions with Bitbucket Pipelines

Siwawes Wongcharoen
Firebase Thailand
Published in
3 min readMay 17, 2019

สวัสดีครับ กลับมาอีกครั้งกับบทความที่เกี่ยวกับ Firebase คราวนี้จะไม่ได้เน้นไปที่ Product ของ Firebase ตรง ๆ อย่างเดียว แต่จะเป็นการใช้งานประกอบกับ Tool อื่น ๆ ด้วยครับ

ในบทความนี้ จะเป็นเรื่องของการ สั่ง Deploy Firebase Cloud Functions ผ่านทาง CI tool จาก Atlassian ที่ชื่อว่า Bitbucket Pipelines ครับ

ส่วนรายละเอียดคร่าวของแต่ละตัว มีดังนี้ครับ

Firebase Cloud Functions

Firebase Cloud Functions

Cloud Functions ถือได้ว่าเป็นของดีมาก ๆ ตัวนึงของ Firebase ที่ทาง Google ทำออกมาก ความสามารถหลัก ๆ ของ Cloud Functions คือเราสามารถเขียนโค๊ด (Node.js) แล้วเอาโค๊ดขึ้นไปรันบน Infrastructure ของ Google ได้เลย โดยโค๊ดของจะรับ Trigger ได้หลายแบบ ไม่ว่าจะเป็นแบบ Direct call หรือ Background call ครับ

รายละเอียดเต็ม ๆ ตามไปอ่าได้ที่ รู้จัก Cloud Functions for Firebase ตั้งแต่ Zero จนเป็น Hero นะครับ

Bitbucket Pipelines

Atlassian Bitbucket

Bitbucket Pipelines เป็น CI tool ตัวหนึ่ง ซึ่งทำงานคู่กับตัว VCS ของ Bitbucket เอง รายละเอียดเต็มขอให้ตามไปอ่านได้ที่ ลองทำ CI/CD ด้วย Bitbucket Pipelines + DigitalOcean นะครับ

CI — Continuous Integration

คือกระบวนการสำหรับการรวบรวม Source code ที่มีการพัฒนาแยกส่วนกันอย่างอัตโนมัติ โดยจะทำอย่างไรก็ได้ เพื่อให้มั่นใจได้ว่า ไม่มี Source code ส่วนใดที่จะส่งผลให้ Source code ส่วนอื่น ๆ พัง หรือสูญหายเสียหาย

Let’s do it

เราต้องใช้ของสำคัญ 4 สิ่งมากประกอบกัน คือ

  1. Firebase account
  2. Bitbucket account
  3. Cloud Functions project
  4. Bitbucket repo

(1), (2) และ (4) ไม่น่าจะมีปัญหากันอยู่แล้วนะครับ

ส่วน (3) ตัว Project structure ผมจะวาง Directory functions ไว้ใน Root directory ของ Project และทุกอย่างที่เกี่ยวกับ Function ก็จะวางไว้ใน Functions directory ทั้งหมด

หน้าตา Project structure ก็จะประมาณนี้นะครับ

Project structure

Note: Command ทั้งหมด จะอ้างอิงตาม Project structure นี้ครับ

สำหรับขั้นตอน มีดังต่อไปนี้ครับ

  1. เอา Firebase token ออกมา ผ่าน Firebase CLI
  2. สร้างไฟล์ bitbucket-pipelines.yml
  3. เปิดใช้งาน Bitbucket pipeline

เอา Firebase token ออกมา ผ่าน Firebase CLI

เริ่มกันที่ตัว Fireblase CLI กันก่อนนะครับ เราต้องเอา Token ออกมาใช้ เพื่อให้ CI tool สามารถสั่งงาน Firebase ได้ ด้วยคำสั่ง

firebase login:ci

ตัว CLI จะให้เราทำ Authenticate ผ่านหน้าเว็บ หลังจากเราทำเสร็จแล้ว ตัว Command line จะแสดงข้อความประมาณนี้ครับ

 Success! Use this token to login on a CI server:<FIREBASE_TOKEN>Example: firebase deploy --token "$FIREBASE_TOKEN"

ตรงนี้ให้เก็บ Token ไว้ให้ดี เพราะเราต้องเราไปใช้ต่อด้วย

สร้างไฟล์ bitbucket-pipelines.yml

จากนั่นเราต้องสร้างไฟล์ bitbucket-pipelines.yml ไว้ที่ Project root directory หน้าตาแบบนี้ครับ

bitbucket-pipelines.yml

อธิบาย

บรรทัดที่ 1 เอา image node:8-alpine มาเป็น Container สำหรับรัน Pipeline นี้

บรรทัดที่ 4–5 ตั้งให้ Pipeline ทำงานเมื่อมี Tag ที่ชื่อว่า release-production-*

Note ท่าที่ผมใช้คือ จะติด Tag release-production-{YYYYMMDDHHmmSS} เพื่อจะได้เข้าใจง่าย ๆ ว่าสั่งไปตอนไหน

บรรทัดที่ 8 เพื่อบอก Deployment tool ว่า สั่ง Deploy ไป Production นะ อ่านเพิ่มเติมที่นี่

บรรทัดที่ 9–12 ทำงานคู่กับ บรรทัดที่ 21–23 สั่งให้ Pipeline ทำ Cache ใน Directory ที่เราสั่งไว้ อ่านเพิ่มเติมที่นี่

บรรทัดที่ 14 เป็นคำสั่งติดตั้ง firebase-tools แบบ Global เพื่อให้สั่งบรรทัดที่ 18 ได้

บรรทัดที่ 15 เปลี่ยน Directory ไปที่ functions เนื่องจากไฟล์ package.json ของเราอยู่ในนั้น

บรรทัดที่ 16 สั่ง npm i เพื่อจะเอา eslint เพราะเดี๋ยวตอนสั่ง Firebase Deploy จะต้องใช้ด้วย

Note ตรงนี้ถ้ามีทำ Test อะไรไว้ก็สามารถสั่งต่อไปได้เลยครับ

บรรทัดที่ 17 เปลี่ยน Directory กลับไปที่ Parent

บรรทัดที่ 18 สั่ง Firebase Deploy ด้วย Token ที่เราเตรียมไว้

เปิดใช้งาน Bitbucket pipeline

ตอนนี้เราจะต้องไปทำต่อใน Bitbucket ครับ

เข้าไปที่ Repo setting ของเรา ให้มองหา Pipeline setting ครับ

Pipeline setting

Settings เข้าไปเปิด pipeline ในนี้

Repository variables เอา Token มาใส่ในนี้

Tag and push to origin, then magic goes here

เมื่อเตรียมของพร้อมแล้ว ก็ลองติด Tag ดูครับ แล้วตามเข้าไปดูบน Bitbucket ว่า Pipeline เราทำงานได้มั้ย

ถ้าทำงานได้สำเร็จ ก็จะได้เห็นประมาณนี้ครับ

Pipeline feedback #1

พอดูรายละเอียดของ Pipeline เราจะเห็นว่ามันจะทำงานตามคำสั่งที่เราเตรียมไว้ พร้อมกับบอกเวลาด้วยว่า แต่ละคำสั่งใช้เวลาไปเท่าไร

Pipeline feedback #2

ส่วนเรื่อง Cache เราจะเห็นว่าระบบได้ทำ Cache ให้เราไว้ 2 ที่ตามที่เราสั่งไว้ครับ

Pipeline caches

เอาไปใช้กับ CI tool ตัวอื่น ๆ

โดยหลักแล้ว แค่มี Firebase token ที่ถูกต้อง กับใช้คำสั่งของ Firebase CLI ได้ถูก ก็ใช้ได้แน่นอนครับ เห็น Tool ดัง ๆ เค้าทำ Doc สำหรับ Firebase ให้ด้วย

หวังว่าบทความนี้น่าจะเป็นประโยชน์กับทุกท่านนะครับ

สวัสดีครับ

--

--