ครั้งก่อน ผมได้เขียนบล็อกวิธีส่ง build result จาก Google Cloud Build ไปยัง Google Chat (อันนี้) คราวนี้ เราจะเปลี่ยนไปส่ง Slack แทนฮะ

Slack เป็น messaging app ที่ developer นิยมใช้กัน ด้วยความสามารถที่มากกว่าแค่การส่งความ เราสามารถเชื่อต่อกับ API เพื่อให้มันทำงานแบบ automate ได้ด้วยฮะ

ทีนี้ ด้วยความที่เราใช้ Google Cloud Build เป็นหลัก มันจะสะดวกมากๆ ถ้าเราสั่งให้แจ้งเตือนว่า ตอนนี้เรามี build ไหนสำเร็จหรือเจ๊งไปแล้วบ้างเนอะฮะ


Diagram


Services ที่ต้องใช้

  1. Google Cloud Build
  2. Google Cloud Pub/Sub topic cloud-builds
  3. Slack app หรือ webhook API
  4. Google Secret Manager เพื่อเก็บ Slack API เป็น secret
  5. 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 ฮะ

Sending messages using incoming webhooks
Create an incoming webhook with a unique URL to which you send a JSON payload with message text and options.

เมื่อเรามี 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 ฮะ

Building with Block Kit
String the atoms together into molecules and inject them into messages and modals.

อันนี้คือตัวอย่างนะฮะ

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 ประมาณนี้ฮะ


Repo

GitHub - bluebirz/google-cloud-build-slack-python: Sending slack message for Google Cloud Build’s result
Sending slack message for Google Cloud Build’s result - bluebirz/google-cloud-build-slack-python