Docker Private Registry Notifications
之前寫過三篇文章介紹公司 CI/CD 流程,基本功能完成,但是還有一個問題是除了使阿里雲官方的鏡像倉庫外,我們還有私有的鏡像倉庫,這部分想要觸發自動部署,也需要有 Webhook 的功能。
當然,最主要的原因是:
每一個 Project 都需要寫腳本通知,寫 sh 腳本處理賊蛋疼!??
調整到鏡像倉庫級別後,完全可以拋棄 Jenkins 插件部署,自由度更高。
一,倉庫配置
version: 0.1nlog:n fields:n service: registrynstorage:n cache:n blobdescriptor: inmemoryn filesystem:n rootdirectory: /var/lib/registrynhttp:n addr: :5000n headers:n X-Content-Type-Options: [nosniff]nhealth:n storagedriver:n enabled: truen interval: 10sn threshold: 3 nnotifications:n endpoints:n - name: console-eggn disabled: falsen url: http://192.168.5.48:7001/hook/docker/registry n headers:n X-Token: [Suyi]n timeout: 10sn threshold: 10n backoff: 1sn
二,Webhook
Web 框架我是用 Egg.js 的,那麼這裡就有一個問題了,通知用了自定義的 Content-Type:
Content-Type: application/vnd.docker.distribution.events.v1+json n
查文檔可知 Egg.js 使用 koa-bodypraser,所以配置里要加一項:
# config.default.jsnnexports.bodyParser = {n extendTypes: {n json: [ application/vnd.docker.distribution.events.v1+json ],n },n};n
然後就可以看到通知:
{n "events":[n {n "id": "a6089916-c2b3-4103-aa2d-40db93f10ee2",n "timestamp": "2017-10-13T02:58:17.285607811Z",n "action": "push",n "target": {n "mediaType": "application/vnd.docker.distribution.manifest.v2+json",n "size": 1569,n "digest": "sha256:ddf13beebac2a486e5f9a7fe77fbcc3a20e3d632c006961430d4cd2271aefde2",n "length": 1569,n "repository": "arashivision/redis",n "url": "http://localhost:5000/v2/arashivision/redis/manifests/sha256:ddf13beebac2a486e5f9a7fe77fbcc3a20e3d632c006961430d4cd2271aefde2",n "tag": "3.2-alpine"n },n "request": {n "id": "8cb085ed-fcaa-481a-bd10-3ed491761641",n "addr": "172.17.0.1:52832",n "host": "localhost:5000",n "method": "PUT",n "useragent": "docker/17.09.0-cego/go1.8.3 git-commit/afdb6d4 kernel/4.9.49-moby os/linux arch/amd64 UpstreamClient(Docker-Client/17.09.0-ce (darwin))"n },n "actor": {nn },n "source": {n "addr": "9e566ba1324c:5000",n "instanceID": "1f0100e8-89de-42f8-b9bf-534b6c7fce23"n }n }n ]n}n
接下來就沒什麼好說的,按需要檢測 action 類型即可。
三,參考
- 基於OSS搭建私有(跨區域)Docker鏡像倉庫
- 基於Jenkins & Docker的CI/CD優化
- Egg.js+Antd 擼個簡易版阿里雲CS控制台?
推薦閱讀:
※Docker運行nginx
※一個基於 Docker 的負載均衡實例
※深度調查:24%的Docker鏡像都存在嚴重漏洞
※如何編寫最佳的Dockerfile
※Docker集群日誌收集:Syslog+Rsyslog+ELK