Docker Hub 이벤트를 Slack으로 받기

데일리호텔

Docker Hub은 Docker Registry 중에 가장 돋보이지 않나 생각하는데는 다음과 같은 이유가 있다.


이 외에도 도커 허브는 장점이 많은데 도커 이미지를 도커 허브에서 빌드하거나 외부에서 docker push를 해서 도커 이미지를 레지스트리에 밀어넣으면 해당 이벤트를 Webhook로 외부에 전달해주는 기능도 그 중 하나이다. 이론적으로는 새 도커 이미지가 나올 때마다 Slack을 통해 알람을 받을 수 있다. 하지만 놀랍게도! 도커 허브는 Slack 등의 대중적인 써드 파티 서비스와의 통합 기능을 직접 지원하지 않는다. 기본적으로 도커 허브가 보내는 Webhook를 파싱해서 슬랙 등으로 보내는 서비스는 직접 구현하거나 누군가 만든 도구를 직접 설치해 사용해야 한다.


구글링하면 구현체가 몇 개 나오는데 그 중 일부는 matsengrp/relay를 커스터마이징한 것이다. 다른 구현체도 있지만 matsengrp/relay가 제일 구성이 깔끔하고 커스터마이징하기 쉬웠기 때문에 이를 기반으로 더 쓸모있는 구현체를 만들기로 했다. 새로운 구현체

  • 기존 프로젝트를 Dockerize하고
  • 소스 코드를 직접 수정하는 대신 환경변수로 설정을 제어하게 하고
  • 도커 이미지의 태그 등 중요 정보를 추가로 표시하며
  • 위트 넘치는 이미지를 추가하여 지나치게 사무적이지 않게 메시지를 구성하는데


초점을 맞추었다. 그래서 나온 결과물은 다음과 같다.


개인적으로는 매우 마음에 든다. Docker 이미지로 빌드했기 때문에 서비스를 띄우기도 매우 쉽다. README 문서에도 기술했듯


docker run — env SLACK_URL=’https://hooks.slack.com/services/PUT/YOURS/HERE' — env RELAY_PORT=8080 — env=DEFAULT_CHANNEL=’#dev’ — env=IMAGE_URL=’https://i.giphy.com/LYDNZAzOqrez6.gif' -p 8080:8080 dailyhotel/relay


이게 전부이다. IMAGE_URL 등 환경변수 대부분은 필수값도 아니어서 실제 설정은 더 간단명료하다. 도커 이미지가 간단한만큼 Kubernetes로 띄우기도 쉽다.


apiVersion: v1
kind: Service
metadata:
name: slackrelay
labels:
app: slackrelay
spec:
ports:
— name: http
port: 80
targetPort: 8080
protocol: TCP
selector:
app: slackrelay
type: LoadBalancer
— -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: slackrelay
spec:
replicas: 1
template:
metadata:
labels:
app: slackrelay
spec:
containers:
— name: slackrelay
image: dailyhotel/relay:latest
env:
— name: SLACK_URL
value: "https://hooks.slack.com/services/PUT/YOURS/HERE"
— name: RELAY_PORT
value: "8080"
— name: DEFAULT_CHANNEL
value: "#dev"
ports:
— name: slackrelay-port
containerPort: 8080


그래도 여전히 몇 가지 개선점이 있긴 하다. 예를 들어 슬랙의 Webhook URL 대신 API 토큰값을 설정으로 받으면 좀더 많은 기능에 접근할 수가 있다. 이러한 점은 향후 정말 필요할 때 개선해볼 생각이다.


참고 자료

  • Webhooks for automated builds는 Docker Hub가 보내는 Webhook 메시지를 기술한다. 제목만 읽으면 자동화된 빌드에만 해당하는 이야기 같지만 확인해보니 docker push로 이미지를 푸시했을 때도 동일한 메시지 포맷을 사용한다.
  • RequestBinWebhooks for automated builds에서 언급한 웹 서비스인데 Webhook 개발 등에 매우 유용하다. 외부 서비스가 발송하는 HTTP 요청 메시지를 받아서 임시로 보관해준다. Webhooks for automated builds에서 기술한 메시지 포맷대로 실제로 발송되는지 확인하기에 매우 요긴했다.

#데일리 #데일리호텔 #Docker #Slack #슬랙 #협업툴 #개발 #개발자 #인사이트 #꿀팁


관련 스택

기업문화 엿볼 때, 더팀스

로그인

/