μ¬λ¬λΆμ΄ μμ
ν νλ‘μ νΈλ₯Ό λ°°ν¬νλ κ³Όμ μμ λ€λ₯Έ νμλ€μκ² μλ¦¬κ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ? λ€μν λ©μμ§λ₯Ό ν΅νμ¬ μλ¦Όμ λ³΄λΌ μκ° μμ΅λλ€.
μ κ° λ€λλ νμ¬κ° Slack(μ¬λ)μ μ΄μ©νλ€κ° μ΄μ λ Google Chat(κ΅¬κΈ μ±)μ μ¬μ©νκ² λμμ΅λλ€. λ§μ΄κ·Έλ μ΄μ
νλ κ³Όμ μμ μκ²λ μ μ€ν¬λ¦½νΈλ₯Ό μ΄μ©ν΄ λ°°ν¬ μλ¦Όμ 보λ΄λ λ°©λ²μ μκ°νκ² μ΅λλ€.
1. Google Chat Webhook URL μ€μ νκΈ°
Google Chatμμ μλ¦Όμ λ°μΌλ €λ©΄ λ¨Όμ webhook URLμ μ€μ ν΄μΌ ν©λλ€. Webhook URLμ Google Chatμμ μ 곡νλ κ³ μ ν μ£Όμλ‘, μ΄ μ£Όμλ‘ λ©μμ§λ₯Ό 보λ΄λ©΄ Google Chatμ μλ¦Όμ΄ νμλ©λλ€. Google Chatμμ μλ‘μ΄ webhook URLμ μμ±νλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€.
- Google Chatμ λνλ°©μ λ€μ΄κ°λλ€.
- μ±ν λ°© μ’μΈ‘ μλ¨μ μλ μ€μ μμ βμ± λ° ν΅ν©βμ μ νν©λλ€.
- νμ μ°½μ΄ λμ€λ©΄ "μΉν μΆκ°"λ₯Ό ν΄λ¦ν©λλ€.
- μ±ν λ°©μ λμ€κ² λ μΉν μ΄λ¦κ³Ό μμ΄μ½μ μ€μ ν ν "μ μ₯"μ ν΄λ¦ν©λλ€. μ λ TESTλΌλ μ΄λ¦μ μ¬μ©ν΄μ μ¬μ©ν μμ μ λλ€.
-
μ΄λ κ² μμ±λ webhook URLμ 볡μ¬ν©λλ€.
μ£Όμλ
https://chat.googleapis.com/v1/spaces/μ€νμ΄μ€μ΄λ¦/messages?key=yyyyy&token=zzzzz
μ μ μ¬ν νμμ κ°μ§κ² λ©λλ€. μΉν μ μ΄λ¦, μμ΄μ½μ μμ νκ±°λ μμ ν μ μμ΅λλ€.νλ©΄μ μ£Όμμ μ¬λ¬λΆμ μ£Όμκ° λ€λ₯Ό μ μμ΅λλ€.
- webhookμ μμ±νλ©΄ μ±ν λ°©μ μλ¦Όμ΄ κ°κ² λ©λλ€.
2. μ μ€ν¬λ¦½νΈ μμ±νκΈ°
-
볡μ¬ν webhook URLμ μ¬μ©νμ¬ μ μ€ν¬λ¦½νΈλ₯Ό μμ±ν΄ λ΄ μλ€. μ μ€ν¬λ¦½νΈλ κ°λ¨ν μ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ μ΄μ 체μ μ λͺ λ Ήμ λ΄λ¦¬λ μ€ν¬λ¦½νΈμ λλ€.
μΆκ°μ μΌλ‘ μ¬μ©μμ μ΄λ¦μ λ£λ κΈ°λ₯κΉμ§ μΆκ°ν΄λ³΄μμ΅λλ€.#!/bin/bash # μ¬μ©μ μ΄λ¦μ κ°μ Έμ΅λλ€. NAME="νκΈΈλ" # Google Chat webhook URL μ€μ GOOGLE_CHAT_WEBHOOK_URL="볡μ¬ν webhook URL" # νλ‘μ νΈ μ΄λ¦μ λ³μλ‘ μ€μ ν©λλ€. PROJECT="νλ‘μ νΈμ΄λ¦" # λ©μμ§ λ΄μ© μμ± (μ¬μ©μ μ΄λ¦ ν¬ν¨) # λμ€μ λ΄μ©μ λ³κ²½νμ λ λ©λλ€. MESSAGE="${NAME}λκ»μ ${PROJECT}μ λ°°ν¬λ₯Ό μμ νμμ΅λλ€." # λ©μμ§μ JSON ν¬λ§· μμ± # νΉμλ μ μ©μ΄ λμ§ μλλ€λ©΄ κ°μ₯ λ°κΉ₯μ μλ°μ΄ν("")λ₯Ό νλ°μ΄ν('')λ‘ λ³κ²½νμΈμ. json_message="{"text": "'"${MESSAGE}"'"}" # λ©μμ§λ₯Ό Google ChatμΌλ‘ μ μ‘ curl -X POST \ -H 'Content-Type: application/json' \ -d "$json_message" \ "$GOOGLE_CHAT_WEBHOOK_URL"
μ΄ μ€ν¬λ¦½νΈλ λ€μκ³Ό κ°μ κ³Όμ μ κ±°μΉ©λλ€.
- μ¬μ©μ μ΄λ¦μ λ³μμ μ μ₯ν©λλ€.
- μμ μ€μ ν Google Chat webhook URLμ λ³μμ μ μ₯ν©λλ€.
- νλ‘μ νΈ μ΄λ¦μ λ³μλ‘ μ€μ ν©λλ€.
- λ©μμ§ λ΄μ©μ μμ±ν©λλ€. μ¬λ¬λΆμ΄ μνμλ 문ꡬλ₯Ό μ μ΄μ£Όμλ©΄ λ©λλ€.
- μ΄λ₯Ό JSON ν¬λ§·μΌλ‘ λ³νν©λλ€. μ¬κΈ°μλ μ¬μ©μ μ΄λ¦κ³Ό ν¨κ» λ°°ν¬ μλ¦Ό λ©μμ§λ₯Ό ꡬμ±νμμ΅λλ€.
curl
λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ λ©μμ§λ₯Ό Google Chat webhook URLλ‘ μ μ‘ν©λλ€. κΈ λ§μ§λ§μ μΆκ° μ€λͺ νλλ‘ νκ² μ΅λλ€.- λͺ¨λ κ³Όμ μ΄ λλλ©΄ ν°λ―Έλμ μ€ν κ²°κ³Όκ° λμ΅λλ€.
3. μ μ€ν¬λ¦½νΈ μ€ννκΈ°
-
μ€ν¬λ¦½νΈλ₯Ό μ€ννκΈ° μν΄μλ νμΌμ μ€ν κΆνμ λΆμ¬ν΄μΌ ν©λλ€. ν°λ―Έλμμ λ€μ λͺ λ Ήμ΄λ₯Ό μ λ ₯νμ¬ μ€ν¬λ¦½νΈ νμΌμ μ€ν κΆνμ λΆμ¬ν©λλ€.
# ν΄λΉ Bash μ€ν¬λ¦½νΈκ° μλ ν΄λ chmod +x deploy_notification.sh
μ€νκΆνμ΄ μμ΄λ μ€νμ΄ κ°λ₯ν μ μμ΅λλ€.
-
μ΄μ μ€ν¬λ¦½νΈλ₯Ό μ€νν μ€λΉκ° λμμ΅λλ€. ν°λ―Έλμμ λ€μ λͺ λ Ήμ΄λ₯Ό μ λ ₯νμ¬ μ€ν¬λ¦½νΈλ₯Ό μ€νν΄ λ³΄μΈμ.
# ν΄λΉ Bash μ€ν¬λ¦½νΈκ° μλ ν΄λ ./deploy_notification.sh
-
μ€ν¬λ¦½νΈκ° μ μμ μΌλ‘ μ€νλλ©΄ Google Chatμ λνλ°©μ λ°°ν¬ μλ¦Όμ΄ νμλ©λλ€.
μ¬λ¬λΆμ΄ μ νμ μΉν μ μ΄λ¦κ³Ό NAME, PROJECT, MESSAGEμ λ°λΌ λ€λ₯΄κ² νμλ μ μμ΅λλ€.
μ΄ λ°©λ²μ μ¬μ©νλ©΄ νμλ€μκ² νλ‘μ νΈμ λ°°ν¬ μν©μ μ½κ² 곡μ ν μ μμ΅λλ€. μνλ κ²½μ°μλ μ€ν¬λ¦½νΈλ₯Ό μμ νμ¬ λ³΄λ€ λ€μν μ 보λ₯Ό μλ¦ΌμΌλ‘ μ μ‘ν μλ μμ΅λλ€. μ΄μ μ¬λ¬λΆλ Google Chatμ νμ©νμ¬ νλ‘μ νΈμ μν΅μ νμΈ΅ λ κ°νν΄ λ³΄μΈμ!
μΆκ° ν: μ μ€ν¬λ¦½νΈλ₯Ό νμ₯νμ¬ λ λ§μ μ 보 μ λ¬νκΈ°
μ΄μ κΈ°λ³Έμ μΈ λ°°ν¬ μλ¦Όμ μ μ‘νλ λ°©λ²μ λ°°μ μΌλ, μ€ν¬λ¦½νΈλ₯Ό νμ₯νμ¬ λ λ§μ μ 보λ₯Ό μλ¦ΌμΌλ‘ μ λ¬νλ λ°©λ²μ λν΄ μμλ΄ μλ€.
-
λ°°ν¬ λ μ§μ μκ° μΆκ°νκΈ°
λ°°ν¬ λ μ§μ μκ°μ μλ¦Όμ μΆκ°νλ €λ©΄, μ€ν¬λ¦½νΈμ λ€μ μ½λλ₯Ό μ½μ ν©λλ€.
# νμ¬ λ μ§μ μκ°μ κ°μ Έμ΅λλ€. CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S") # λ©μμ§ λ΄μ©μ λ μ§μ μκ°μ ν¬ν¨ν©λλ€. MESSAGE="${NAME}λκ»μ ${PROJECT}μ λ°°ν¬λ₯Ό μμ νμμ΅λλ€. (λ°°ν¬ μκ°: ${CURRENT_TIME})"
-
λ©μμ§ νμ μΆκ°νκΈ°
Google Chatμ λ¨μν ν μ€νΈ λΏλ§ μλλΌ λ³Όλ체, μ΄ν€λ¦μ²΄, λ§ν¬, λΈλ‘ μΈμ© λ± λ€μν νμμ λ©μμ§λ₯Ό μ§μν©λλ€. λ€μμ λ³Όλ체λ₯Ό μ¬μ©νμ¬ λ©μμ§ νμμ λ³κ²½ν μμ λλ€.
# λ©μμ§ λ΄μ©μ λ μ§μ μκ°μ ν¬ν¨ν©λλ€.(λ³Όλ체 μ¬μ©) MESSAGE="${NAME}λκ»μ *${PROJECT}*μ λ°°ν¬λ₯Ό μμ νμμ΅λλ€. (λ°°ν¬ μκ°: ${CURRENT_TIME})"
μΆκ° μ€λͺ : curl
curl
μ 컀맨λλΌμΈμμ μ¬μ©νλ λ°μ΄ν° μ μ‘ λꡬλ‘, URLμ μ΄μ©ν΄ λ€μν νλ‘ν μ½(HTTP, HTTPS, FTP, SMTP λ±)μ μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ μ μμ΅λλ€. μ£Όλ‘ μΉ APIμ μνΈμμ©ν λ
μ μ©νκ² μ¬μ©λ©λλ€.
μ€ν¬λ¦½νΈμμ μ¬μ©λ curl
λͺ
λ Ήμ΄λ₯Ό λΆμν΄ λ³΄κ² μ΅λλ€.
curl -X POST \
-H 'Content-Type: application/json' \
-d "$json_message" \
"$GOOGLE_CHAT_WEBHOOK_URL"
μμ curl
λͺ
λ Ήμ΄λ λ€μκ³Ό κ°μ μ΅μ
μ μ¬μ©ν©λλ€.
-X POST
:-X
μ΅μ μ μ¬μ©ν HTTP λ©μλλ₯Ό μ§μ ν©λλ€. μ¬κΈ°μλ POST λ©μλλ₯Ό μ¬μ©νλ―λ‘-X POST
λ₯Ό μ¬μ©ν©λλ€.-H 'Content-Type: application/json'
:-H
μ΅μ μ HTTP ν€λλ₯Ό μ€μ ν μ μμ΅λλ€. μ¬κΈ°μλ JSON νμμ λ°μ΄ν°λ₯Ό 보λ΄λ―λ‘Content-Type: application/json
μΌλ‘ μ€μ ν©λλ€.-d "$json_message"
:-d
μ΅μ μ POST μμ² μ λ³΄λΌ λ°μ΄ν°λ₯Ό μ§μ ν©λλ€. μ¬κΈ°μλ JSON νμμ λ©μμ§λ₯Ό μ μ‘νλ―λ‘, μμ μμ±νjson_message
λ³μλ₯Ό μ¬μ©ν©λλ€."$GOOGLE_CHAT_WEBHOOK_URL"
: λ§μ§λ§μΌλ‘, μμ²μ λ³΄λΌ URLμ μ§μ ν΄μΌ ν©λλ€. μ¬κΈ°μλ Google Chatμ webhook URLμ μ¬μ©νλ―λ‘, μμ μ€μ νGOOGLE_CHAT_WEBHOOK_URL
λ³μλ₯Ό μ¬μ©ν©λλ€.
μ΄λ κ² κ΅¬μ±λ curl
λͺ
λ Ήμ΄κ° μ€νμ΄ μλ£κ° λλ©΄ μ€ν κ²°κ³Όλ₯Ό ν°λ―Έλμ μΆλ ₯ν©λλ€. λͺμμ€μ κ²°κ³Όκ° μΆλ ₯λλλ° μΆλ ₯νμ§ μλλ‘ μ€μ ν μλ μμ΅λλ€.
curl -s -o /dev/null -X POST \
-H 'Content-Type: application/json' \
-d "$json_message" \
"$GOOGLE_CHAT_WEBHOOK_URL"
μμ curl
λͺ
λ Ήμ΄λ λ€μκ³Ό κ°μ μ΅μ
μ΄ μΆκ°λμμ΅λλ€.
-s
: μ€ν κ²°κ³Όλ₯Ό ν°λ―Έλμ μΆλ ₯νμ§ μλλ‘ μ€μ ν©λλ€. μ΄ μ΅μ μ "silent"μ μ½μλ‘,curl
λͺ λ Ήμ΄μ μ€ν κ³Όμ μ€ μ§ν μν©μ΄λ μλ¬ λ©μμ§λ₯Ό ν°λ―Έλμ μΆλ ₯νμ§ μμ΅λλ€.-o /dev/null
: μ€ν κ²°κ³Όλ₯Ό/dev/null
νμΌμ μ μ₯νλλ‘ μ€μ ν©λλ€./dev/null
μ UNIX λ° Linux μμ€ν μμ μ¬μ©λλ κ°μμ νμΌλ‘, μ΄ νμΌλ‘ 보λ΄μ§ λ°μ΄ν°λ λͺ¨λ 무μλ©λλ€. μ΄ μ΅μ μ μ¬μ©ν¨μΌλ‘μ¨, μ€ν κ²°κ³Όλ₯Ό νμΌλ‘ μ μ₯νλ©΄μ ν°λ―Έλμλ μΆλ ₯νμ§ μμ΅λλ€.