เรียนรู้การ integrate Firebase Hosting กับ GitHub Actions ใน Firebase Study Jam 2021

Event May 16, 2021

งานประจำปีที่คุณเอกแอบสปอยไว้เมื่อวันอาทิตย์ก่อนน้าน ในงาน Android Codelab Together ก็คืองานในวันนี้นั่นเอง

สิ่งที่เราจะได้กลับไปจากกิจกรรมนี้นั่นคือ วิธีการ integrate Firebase Hosting กับ GitHub Actions เข้าด้วยกัน ผลคือเราจะสะดวกสุดๆเมื่อเราทำเว็บแล้วจะ deploy ขึ้น staging หรือบน production ได้เลย เมื่อมีการ merge PR ต่างๆนั่นเอง

ของรางวัล ตอนแรกเห็นรูปนึกว่าเลือกอันที่เรายังไม่มีได้ แต่งานนี้เขาใจปํ้ามาก แจกเสื้อสีเทา size XL, เสื้อสีฟ้า women size อันนี้คละไปให้ แล้วก็ spinner เป็น 1 set มีทั้งหมด 8 รางวัลจ้า บางคนแอบรีบให้ถึงไปช่วงเล่นเกมส์ไว้ๆเลยทีเดียว

ใครที่พลาดความสนุกไป ดูย้อนหลังได้ที่นี่เลย

https://www.youtube.com/watch?v=xMIi-G-Vbx0

ตัวหน้า Facebook event จ้า

Firebase Study Jam 2021
Join @Jirawatee and @Naluinui 2 Firebase GDEs in #FirebaseStudyJam​​ to learn about capabilities of using 🔥Firebase Hosting from safely testing changes before you hit production to automating your build and deploy workflows, learn the tools to ship your web project like a pro! 🇹🇭 Live will be de…
https://www.facebook.com/events/4070425476410803/

อันนี้บล็อกงานปีที่แล้วจ้า

เติมไฟอยู่ที่บ้านกับงาน Firebase Study Jam
ตื่นเต้นสุดๆกับการร่วมงาน Firebase Study Jam ที่บ้านจ้า ในวันอาทิตย์หน้าร้อน 5 เมษายน 2563 ในเวลาบ่ายโมงตรงถึงสามโมง เสร็จปุ๊ปดู Netfilx ต่อ เอ้ยย สรุปบล็อกสิ

What's new in Firebase Hosting

Firebase Hosting เป็น static host ที่รองรับ HTML CSS JavaScript และ resource ต่างๆเช่น รูปภาพ วิดีโอ ไว้ใน SSD และมี CDN ฟรีทั่วโลก ดึงตัวที่ใกล้ที่สุดมาให้เรา มี SSL เป็น AAA ได้ https มา แล้วสามารถใช้ custom domain ที่เราจดมา point ไปชี้ที่ hosting ได้เลย อีกทั้งยัง support dynamic website กับ Firebase Cloud Function และ Cloud Run และสามารถมีได้หลายๆ site ในโปรเจกเดียว

ความจุเดิมทีให้ 1 GB ขยายขึ้นเป็น 10 GB

ถ้าเราทำเว็บผ่าน Firebase Hosting แต่ยังไม่มี domain เลย ก็สามารถกดซื้อของ Google Domains ได้เลยผ่านหน้า console พอซื้อเสร็จแล้วเขาจะผูกให้เลย เราไม่ต้องทำอะไร (เอาจริงๆเขาคิดเก่งนะ เพิ่มยอดขาย Google Domain ไปอีกก)

Cloud Logging เห็น log แบบละเอียดมาๆ เช่น audience, referral มาจากไหนกันนะ แบบ real-time

Brotli ทำให้เว็บเล็กลง โหลดเร็วกว่า เขาจะจัดการให้เราเอง ไม่ต้องทำอะไร ตัวนี้เป็น algorithm ของทาง Google นะ

Preview Channels : deploy change ก่อนเอาขึ้น production ให้ทีมดูก่อน เราสามารถกำหนด expire date ได้ด้วย ซึ่งจะมา demo กันวันนี้

GitHub Action Support : ใช้ในการ pull request, merge deploy ขึ้นได้ด้วยระบบ automation สามารถ deploy ได้ทั้ง preview และ production เลย ซึ่งจะมา demo กันวันนี้

Preview changes before going live with Firebase Hosting

เริ่ม demo กันที่คุณนุ้ยกันก่อนเลย เริ่มตั้งแต่สร้างโปรเจกใหม่ขึ้นมา

ก่อนอื่นทำการ Install Firebase CLI โดยผ่าน command line เนอะ (ถ้าจะ make sure ก็ใส่ sudo ไว้ก่อน) npm install -g firebase-tools

จากนั้นทำการ login โดยใช้คำสั่ง firebase login และเราสามารถสลับ account ได้โดยใช้ firebase login:add จะมี url ให้ login ด้วย account อื่นๆของเราได้

จากนั้นทำการ init ด้วย firebase init เลือก product ในที่นี้เลือก Firebase Hosting เนอะ แล้วเลือก account ที่จะใช้

เว็บที่ใช้ในโดยใช้ตัวเว็บธรรมดามากๆ ถ้าทำผ่านพวก web framework ต่างๆ สามารถเปลี่ยน public folder ให้เป็นตัว build ได้เลย

ในตอนนี้ยังไม่ใช้ GitHub Actions เนอะ

ส่วนไฟล์อื่นๆ ถ้ามีไฟล์นั้นๆแล้วกด no ไม่งั้นมันจะทำของใหม่ทับอันเดิม

ทำการรัน local ให้ดูก่อน โดยการใช้ firebase emulators:start -local แล้วก็ไป set port เป็น 6001 นะ ไม่ใช่ 6000 แหะๆ

ผลที่ได้จ้า

แล้วเราก็ deploy จริงแล้วนะ firebase deploy --only hosting

พอเรา deploy เสร็จแล้ว จะมีการเก็บ reversion ในแต่ละครั้งไว้ให้เรา ทำให้เราสามารถ rollback กลับมาได้ พร้อมกับปัญหาคือ พี่ตี๋ครับ ทำไม storage ใน Hosting เต็มอะครับ ดังนั้นเราสามารถเลือกได้ว่าเราจะเก็บสูงสุดกี่ version เพื่อไม่ให้ storage ของเราเต็ม

ตอนนี้เราจะมาใช้ preview version เพื่อสามารถ test ได้โดยไม่ต้อง deploy จริงบน production ซึ่งเราไม่ต้องให้คนในทีมมามุงดูที่เครื่องอีกต่อไป สามารถส่ง url ที่ได้จากการ deploy preview นี้ไปให้ในทีมดูได้ โดยอายุ expire date โดยปกติจะอยู่ที่ 7 วัน และเราสามารถ set ตํ่าสุด 1 นาที และ สูงสุด 30 วัน

ถ้าเราเปลี่ยนโค้ดหรือของบางอย่าง เช่น เปลี่ยนไอคอนปรบมือเป็นรูปไฟ ใน local จะเปลี่ยนตาม แต่ถ้า preview เราก็ทำการ deploy โดยมี syntax ดังนี้

firebase hosting:channel:deploy <preview_name> --expires 10m

จากนั้นมันจะทำการ generate preview url ออกมา โดยมีหน้าตาแบบนี้

https://<project_id>-<preview_name>-<hash_number>.web.app
เมื่อมีการเปลี่ยนไฟล์ มันจะ deply เฉพาะไฟล์ที่เปลี่ยนเท่านั้น ทำให้ Firebase Hosting deploy เร็วสุดๆ

เราสามารถ manage channel ที่หน้า console ได้เลย สามารถ copy url หรือกำหนด expire date ใหม่ อีกทั้งสามารถ extend ได้เมื่อหมดอายุไปแล้ว

ถ้าเราไม่เปลี่ยน preview channel จะทับของเดิมนะ

เราสามารถ clone จาก channel นึง ไปอีก channel ได้ หรือจะข้ามโปรเจกกันก็ได้นะ เช่น staging ไป production โดยไม่ต้อง build ใหม่ โดยคำสั่งในรูปแบบนี้

firebase hosting:clone <project_id_source>:<channel_source> <project_id_destination>:<channel_destination>

สามารถอ่าน document เกี่ยวกับ Firebase Hosting เพิ่มเติมได้ที่นี่

Manage live & preview channels, releases, and versions for your site
https://firebase.google.com/docs/hosting/manage-hosting-resources

โดยตัว channel จะมี 2 ประเภท คือ live กับ preview นั่นเอง

ในที่นี้จะ clone จาก preview ไป production นั่นเอง ซึ่ง production จะมีชื่อ channel ว่า live นั่นเอง

Deployment integration with Firebase Hosting and GitHub Actions

ตอนนี้มาถึงตาพี่ตี๋กันบ้าง หลังจากที่คุณนุ้ย push code เข้า repo ผ่าน GitHub Desktop และพี่ตี๋ก็ก็ pull code ลงมา

ก่อนอื่นเราไป check ว่าเราเปิด Firebase Hosting ไปหรือยัง ใน Cloud console ดู account ที่ login ก่อนว่าตรงไหม แล้วก็เลือกโปรเจกเพื่อไป enable มัน ถ้ากดแล้วจะเจอปุ่ม manage เนอะ ที่ทำแบบนี้เพราะว่าเราจะใช้มันใน GitHub Actions นั่นเอง

ต่อมาทำการเปิด terminal แล้วพิมพ์ firebase init hosting:github เพื่อระบุ repository ที่เราต้องการ

ไปที่ repository ของ GitHub ของเรา ไปที่แท็ป setting จากนั้นไปที่ services แล้วไปที่ Repository secret จะเจอว่าเราได้ผูกโปรเจก Firebase นี้เข้ากับ repo นี้เป็นที่เรียบร้อยแล้วหล่ะนะ

กลับไปที่ terminal แล้วมันจะถามว่า มี script ให้บิ้วไหมจ๊ะ เรากด yes เพื่อให้มันสร้างมาให้ ถ้าเราทำใน web framework เช่น Vue.js อาจจะกด no ได้ เพราะเราอาจจะทำ script ไว้ก่อนแล้ว

โดยมันจะอยู่ที่ hiddle folder ที่ชื่อว่า .github เราจะเจอ workflow เป็นไฟล์ .yml โดยจะทำงานตาม script นี้ เราสามารถนำไฟล์พวกนี้ไปทำเพิ่มให้เป็น CI/CD ได้นะ

ในนี้จะมี 2 ตัวด้วยกัน

  • firebase-hosting-pull-request.yml ตัวนี้จะทำงานเพื่อเมื่อเปิด pull request เพื่อสร้าง preview channel โดยเราสามารถใส่ expires เพิ่มได้ในนี้ expires: 10d

เมื่อเราทำการ pull request แล้ว ตัว script จะทำงาน โดยเราสามารถเปิดเข้าไปดู detail ได้ว่ามันทำงานไปถึงไหนแล้ว เมื่อทำงานเสร็จแล้วจะได้ preview url ออกมาจ้า

ผลคือไฟลุกมาล้าวนะ

พอไปดูใน Firebase console จะเจอ preview ที่เราทำผ่าน GitHub Actions จ้า

  • firebase-hosting-merge.yml ตัวนี้จะทำงานเมื่อ merge เข้า branch main โดยจะ deploy ขึ้นบน production สังเกตได้จาก channelId: live โดย default จะเป็น channel ที่เป็น preview นะ

เมื่อเรา merge เข้า main มันจะทำการ run script แล้สเราสามารถไปดู process ได้ที่แท็ป action ถ้ามี error เราก็สามารถดูได้ว่า เกิดจากตรงไหน

และเนื้อหาทั้งหมดในวันนี้ พี่ตี๋ปล่อยบล็อกนี้สดๆในงานเลยจ้า สดกว่านี้ก็ปลาที่ตลาดแล้วนะ

Deploy เว็บของคุณแบบไร้รอยต่อด้วย Firebase Hosting และ GitHub Actions
ฟีเจอร์ใหม่ซึ่งเป็นการ Integrate กันระหว่าง Firebase Hosting และ GitHub Actions เพื่อมาช่วยให้การ deploy เว็บของเรามีความ automate
https://medium.com/firebasethailand/firebase-hosting-x-github-actions-672c05831588

การเดโม่ในวันนี้ของคุณนุ้ยและพี่ตี๋นั้น สนุกมากๆเลยแหละ อมยิ้มไปตลอดเลย ตั้งแต่นับหนึ่งถึงสามล้าน ไม่เกิดก็ดับ port6000 สตรีมคุณนุ้ยค้างจนต้องส่งแรงใจช่วย อะไรประมาณนี้ ทั้งสนุกแล้วก็ได้ความรู้ให้เราลองกลับไปทำเองด้วยหล่ะ (รอทำ web portfolio ใหม่นะ น่าจะได้ใช้แหละเนอะ)

AMA (Ask Me Anything)

ช่วงอาม่า เอ้ยผิด ถามอะไรก็ได้เกี่ยวกับ Firebase

  • "ถ้า clone ข้าม project พวก config ของ Firestore จะเปลี่ยนให้ด้วยไหมครับ" เวลาโคลน จะโคลนแค่ hosting เท่านั้น ดังนั้นตัว config ยังไม่ได้เปลี่ยน เปลี่ยนแค่ content หรือถ้าเป็น JavaScript SDK จะต้องใส่ config ที่หน้าเว็บอยู่แล้ว เราอาจจะต้องแก้ในส่วนนี้เอง ของ firebase รวมให้แล้ว ส่วนพวก Firebase/init/JavaScript dynamic (ถ้าตรงนี้งงก็ขออภัยด้วย เราก็งงเหมือนกันพิมพ์อะไรไปตอนนั้น แหะๆ) จะไปตาม project นั้นๆให้เอง
  • "สอบถามครับ เมื่อ merge เข้าแล้วมันลบ preview ให้อัตโนมัติไหมครับ" ไม่ลบ แล้วแต่เวลาที่เรา set อาจจะแก้ yml เพิ่มเติม ว่า merge แล้วให้ทำอะไรต่อ
  • "มีระบบ secure อะไรให้บ้าง" ตัว Firebase กัน DDOS ให้ระดับนึง และเอา cloudflare มาครอบอีกชั้นนึง ส่วนพวก Firebase Cloud Function, Firebase Realtime Database เราจะต้องเขียน security rule กัน client ที่เราไม่ได้อนุญาติเข้ามาได้ (แนะนำครอบ cloudflare เนอะ เพราะเว็บนี้โดนใครไม่รู้ตี DDOS อ่ะ ช่วงต้นเดือน เว็บเลยเข้าไม่ได้เลย)
  • "firebase มี yml file แบบ simple workflow ให้ด้วยไหมครับ หรือว่าต้องเขียนเองตั้งแต่ต้นเลย" มี simple มาให้เลย ไม่ต้องเขียนเอง ตามในตัวอย่างที่ demo กัน แล้วก็เราสามารถ deploy secure rule ผ่าน Action ได้ด้วยนะ
  • "มีแหล่งศึกษา Firebase แนะนำมั้ยครับ" Firebase Thailand เลยจ้า
  • "ใช้กับอย่างอื่นนอกจาก GitHub ได้ไหม" เราอาจจะต้องเขียน script เอง
  • จากคำถามเมื่อกี้ มีการแนะนำตัว plan ของ GitHub ในแต่ละอัน โดยแบบ public repo สามารถใช้ GitHub Actions แบบ no limt ส่วน private repo เราสามารถสร้างได้ฟรี และถ้าใช้ Github Actions จะจำกัดอยู่ที่ 2000 นาทีต่อเดือน และเราสามารถ set environment ตาม OS ที่ต้องการได้ โดย default จะเป็น Ubuntu
Pricing · Plans for every developer
Whether you’re starting an open source project or choosing new tools for your team, we’ve got you covered.
https://github.com/pricing

Firebase sessions you shouldn't miss in I/O'21

  • What's new in Firebase มีอะไรใหม่ๆออกมาบ้างนะ
Google I/O 2021
Google I/O returns virtually and live May 18-20.
Google I/O 2021
Google I/O returns virtually and live May 18-20.
  • Local development using the new Storage Emulator feature ใหม่ของ Firebase Storage Emulator นั่นเอง
Google I/O 2021
Google I/O returns virtually and live May 18-20.
  • Fix performance pitfalls and level up your app with Firebase เกี่ยวกับ Performance Monitoring
Google I/O 2021
Google I/O returns virtually and live May 18-20.
  • Crashlytics your way: Your most important crashes with Custom Keys การใช้ Custom Keys ใน Firebase Crashlytics
Google I/O 2021
Google I/O returns virtually and live May 18-20.
  • Reducing bundle size: Previewing a new Firebase for the web เกี่ยวกับ modular ตัว JavaScript SDK มีขนาดที่เล็กลง และเลือก module ที่เราต้องการได้เลย
Google I/O 2021
Google I/O returns virtually and live May 18-20.
  • Verifying app identity with App Check เป็นตัว check secure app ของเรา โดยตัด request ของคนที่ไม่ verify โดยจะทำการ reject ออกไป
Google I/O 2021
Google I/O returns virtually and live May 18-20.

ถ้าอยากเล่นของใหม่ๆ สมัคร Firebase Alpha Program สิจ๊ะ

Firebase Alpha Program – Google
https://services.google.com/fb/forms/firebasealphaprogram/

Fan Pan Tae game

แน่นอนว่าเล่นใน Kahoot! เจ้าเก่าเจ้าเดิมจ้า ถือว่าฝึกมือไว้ก่อน เดี๋ยวเราต้องเจอแบบนี้ในงาน TMRW Creators Camp 2021 ในทุกๆสัปดาห์แน่ๆ แบบตอบถูกทุกข้อแต่ไวไม่พองี้ ฮือออออ โดยคำถามแต่ละข้อนั้นก็มาจากก่อนหน้านี้แหละ

ข้อแรกผ่านไปอย่างง่ายๆ

ข้อที่สอง เอ๊ะ ทำไมมัน delay หนักมาก อ้าวมีคำตอบให้เลือก แล้วคำถามหล่ะ พอฟังและอ่านทวนปุ๊ปรีบตอบให้ถูกต้องทันที เลยลุ้นๆด้วยเลย ว่าเราจะตอบทันไหม ตอบถูกไหมนะ และเป็นแบบนี้ทุกข้อด้วยนะ

ด้วยความ delay เลยเห็นผลคะแนนเลยว่าแต่ละข้อตอบถูกไหมนะ พอถูกแล้วใจชื้นแล้วลุ้นว่าข้อต่อไปเราจะตอบถูกไหมนะ555

แล้วทุกข้อเราดันเป็นคนที่ตอบถูกและไวที่สุดในทุกข้อด้วยนะ เหมือนเรา delay น้อยกว่าคนอื่นละม้างนะ แหะๆ

ที่เคยเล่น Kahoot! มา ไม่เคยเจอ UI นี้เลย รอบที่ได้เสื้อสีดำยังไม่ได้ที่ 1 ในทุกข้อเลย (งานนั้นเหนื่อยอยู่ เพราะลุ้นว่าจำ logo ทั้งหมดของ Firebase ได้ไหม คะแนนก็สูสีกันไปอีก)

ผลสรุป เราก็ได้เสื้อสีฟ้า พร้อมของแถมคือเสื้อสีเทา และ spinner ที่มีอยู่แล้ว อิอิ

สุดท้ายฝากทำ feedback จ้า

กดไปที่ https://docs.google.com/forms/d/e/1FAIpQLScdSYjeIzCbiSQ7RAFJCXxVe14PFNBUhZXGwd741Vibh4hGJg/viewform

แล้วก็ฝากร้านจ้า

ส่วนของรางวัลที่ได้เดี๋ยวค่อยอวดอีกที ทีมงานบอกว่าได้ภายในเดือนมิถุนายนจ้า อิอิ


download แอพอ่านบล็อกใหม่ของเราได้ที่นี่

MikkiPastel - Apps on Google Play
First application from “MikkiPastel” on play store beta feature- read blog from https://www.mikkipastel.com by this application- read blog content by chrome custom tab- update or refresh new content by pull to refresh- share content to social network
https://play.google.com/store/apps/details?id=com.mikkipastel.blog

ติดตามข่าวสารและบทความใหม่ๆได้ที่

อย่าลืมกด like กด share บทความกันด้วยนะคะ :)

Posted by MikkiPastel on Sunday, 10 December 2017

ช่องทางใหม่ใน Twiter จ้า

และ YouTube ช่องใหม่จ้า

mikkicoding
Android Developer & Content Creator
https://www.youtube.com/channel/UCtGbMSe4i7NJiKQ271Fezcg

Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.