Slack ทันที เมื่อมี build
ครั้งก่อน ผมได้เขียนบล็อกวิธีส่ง build result จาก Google Cloud Build ไปยัง Google Chat (อันนี้) คราวนี้ เราจะเปลี่ยนไปส่ง Slack แทนฮะ
Slack เป็น messaging app ที่ developer นิยมใช้กัน ด้วยความสามารถที่มากกว่าแค่การส่งความ เราสามารถเชื่อต่อกับ API เพื่อให้มันทำงานแบบ automate ได้ด้วยฮะ
ทีนี้ ด้วยความที่เราใช้ Google Cloud Build เป็นหลัก มันจะสะดวกมากๆ ถ้าเราสั่งให้แจ้งเตือนว่า ตอนนี้เรามี build ไหนสำเร็จหรือเจ๊งไปแล้วบ้างเนอะฮะ
Diagram
Services ที่ต้องใช้
- Google Cloud Build
- Google Cloud Pub/Sub topic
cloud-builds
- Slack app หรือ webhook API
- Google Secret Manager เพื่อเก็บ Slack API เป็น secret
- Google Cloud Functions เพื่อ process และส่งไป Slack
มาลงมือกัน
1. เตรียม Cloud Build
อย่างแรกสุดเลยฮะ เราต้องเปิด Google Cloud Build API กับ Google Cloud Pub/Sub API ก่อนฮะ จากนั้นให้เราเช็คว่ามี topic ชื่อ cloud-builds
หรือยัง ถ้ายังไม่มีก็สร้างให้เรียบร้อย เพื่อให้ Google Cloud Build สามารถ publish ให้เราได้ build event มาฮะ
2. เตรียม Slack webhook API
สำหรับ Slack API เนี่ย เราสามารถเลือกได้ว่าจะเอาเป็น webhook หรือ app ซึ่งครั้งนี้เราจะใช้ webhook ฮะ
คลิกลิงก์ข้างล่างอันนี้ มันจะอธิบายวิธีสร้าง webhook url ฮะ
เมื่อเรามี webhook แล้ว เราก็จะหยิบ webhook url ได้ที่หน้า "Incoming webhook" ในส่วนการตั้งค่า และอยู่ในรูปของ https://hooks.slack.com/services/ABC/DEF/GHIJ1234
3. เก็บ webhook ใน Google Secret Manager
ทีนี้ เราก็จะเก็บ webhook url ไว้เป็นความลับ ใส่ไว้ใน Google Secret Manager ตอนจะเรียกใช้ ก็กำหนดให้เป็น environment variable ของ Google Cloud Functions ฮะ
4. ออกแบบ Slack message template
เราสามารถออกแบบข้อความที่ส่งออกไปยัง Slack โดยเริ่มที่ Slack Block Kit ฮะ
อันนี้คือตัวอย่างนะฮะ
5. Implement Google Cloud Functions
ขั้นตอนสุดท้าย คือ เขียน Cloud Functions มา process event นั่นเองฮะ
ผมเขียนให้ Cloud Functions ใช้ Python รับ messages มาจาก topic cloud-builds
ซึ่งส่งผ่าน Google Cloud Build อีกทีนึง รับมาเสร็จก็ extract แล้ววางลงใน Slack template ก่อนจะส่งไปที่ Slack webhook API
6. Deploy Google Cloud Functions
เขียนเสร็จ ก็สามารถ deploy ได้ทันทีฮะ
gcloud functions deploy NAME [flags]
แต่ใน repo ที่แปะข้างล่างนี้ ผมใช้ Google Cloud Build มาช่วย deploy ฮะ ดูได้ที่ cloudbuild.yaml
ตัวอย่างผลลัพท์
ถ้าทุกอย่างเรียบร้อยดี เราจะได้เห็นหน้าตา message ประมาณนี้ฮะ