GiitHub에서 MQTT PUBLISH 메시지를 받고 POST 요청에 따라 전송

6779 단어 sangoGitHub
MQTT 버전 LAN에 GiitHub WebHooks HTTP 요청 보내기 - Qita
GitHub WebHooks 대신 MQTT publish를 사용하고 Git push에서 직접 MQTT as a Service sango 메시지를 보내기
WebHooks와 다른 점은 필요 없는 EC2 인스턴스 LAN에 GiitHub WebHooks HTTP 요청 보내기 - QitaX-GitHub-Event 등의 웹훅에서는 HTTP 헤드 기반 정보를 얻을 수 없습니다.

프로비저닝



GitHub Services

Webhooks & Services의 서비스 중에서 MQTT를 선택하여 설정

Topic


PUBLISH의 Topic 지정 {sango의usename]/github/{POST 요청 발송 경로}POST リクエスト送信時のパス는 Subscriber가 POST 요청을 작성할 때 사용한 것입니다.

MQTT Subscriber


SUBSCRIBE 시 Topic에서 미리 Multi-level wildcard로 지정
GiitHub에서 지정한 Topic에서 POST 요청을 목적지로 보내는 경로를 가져와 Drene에 POST를 보냅니다
require 'mqtt'
require 'net/http'

username = ''
password = ''
sango_host = ''
sango_port = 1883
drone_host = ''
drone_port = 80
Topic = [username, 'github', '#'].join('/')

client = MQTT::Client.connect(
  :host => sango_host,
  :port => sango_port,
  :ssl => false,
  :username => username,
  :password => password
)

client.get(Topic) do |topic, msg|
  path = topic.split([username, 'github'].join('/'))[1]

  uri = URI.parse("http://#{drone_host}:#{drone_port}#{path}")
  request = Net::HTTP::Post.new(
    uri,
    initheader = {
      'Host' => "#{uri.host}:#{uri.port}",
      'Accept' => "*/*",
      'Content-Type' => 'application/json',
      'Content-Length' => "#{msg.length}"})
  request.body = msg

  Net::HTTP.start(uri.host, uri.port) do |http|
    http.request(request)
  end
end

좋은 웹페이지 즐겨찾기