Docker Trusted Registry

Mengintegrasikan Docker Trusted Registry dengan Google Chat

Written by Ashnik Team

| Dec 19, 2018

7 MIN READ

This is the Malay translation to the original blog – Integrating Docker Trusted Registry with Google Chat
Google baru-baru ini melancarkan Google Chat bagi pengguna GSuite.  Walaupun ia jauh dari sempurna, saya dapati ianya agak berguna dan berharap yang ia akan menjadi alternative yang baik kepada Slack.  Ia membenarkan anda untuk mempunyai perbualan DM (seorang-dengan-seorang) dan membuat ruang (seperti perbualan berkumpulan) – disimpulkan sebagai satu SPACE. Anda boleh menambah Chat Bots dalam ruang-ruang ini untuk tugasan automatic seperti undian, membuat jemputan calendar, menetap panggilan video dan lain-lain.  Anda juga boleh menetapkan Incoming Webhooks di dalam ruang agar anda boleh menghantar mesej ke ruang dengan memanggil URL dari jarak jauh.
Ini ialah satu kod Python yang mudah untuk melaksanakan integrasi/komunikasi pasukan bagi Docker Trusted Registry dengan Google Chat Bot dan Google Chat’s Incoming Webhook.  Dalam bentuk semasanya ini, ia boleh menjadi berguna untuk:

  • Hantar pemberitahuan di dalam Ruang Google Chat apabila imej baru ditolak ke Docker Trusted Registry. Ini menggunakan ciri-ciri DTR’s webhook.
  • Melancarkan imej terkini menggunakan Jenkins’s Generic Webhook Trigger. Pelaksanaan tertentu ini hanya mencetuskan binaan Jenkins yang mana secara dalaman tahu bagaimana untuk mendapatkan imej terkini (dengan menggunakan GIT_COMMIT).  Tetapi ianya agak mudah untuk menghantar tag imej sebagai badan di dalam imej JSON yang dihantar oleh Chat Bot ke titik akhir webhook Jenkin.

malay-img1

Kod ini berdasarkan kepada dua contoh yang diberikan oleh Google:

Menetapkan tanggungan
Kod ini bergantung pada tetapan Docker Trusted Registry, GitHub dan Jenkins. Apabila anda menetapkan kod ini, anda perlu juga mendayakan  Google Chat API dan mendaftar bot ini.

Sebelum kita boleh menetapkan bot Google Chat dan perkhidmatan webhook, kita perlu melancarkan kod back-end sebagai pemegang bagi kedua-duanya.  Contoh ini melancarkan kod contoh sebagai perkhidmatan Docker Universal Control Plane menggunakan aturan Swarm.  Anda boleh semak lebih lanjut bagaimana Layer-7 Routing Mesh berfungsi.
Ianya agak mudah untuk mendayakan Layer-7 Routing dalam UCP.  Saya telah cuba untuk meliputi konsep dan aliran pelancaran dengan lebih lanjut di sini.
Kod di dalam contoh ini melancarkan dua pemegang, kedua-duanya dilancarkan sebagai rahsia:

  • GCHAT_WEBHOOK_ENDPOINT: pembolehubah persekitaran ini digunakan untuk menentukan titik akhir untuk Webhook yang mana akan dikonfigurasi dan dirujuk dalam ruang Google Chat. Apabila mengkonfigurasikan webhook, kita perlu nilai ini.  Ianya disarankan untuk menggunakan teks panjang dengan huruf turutan rawak dan tidak boleh dihasil semula e.g. asadqweqndqwqeqwcxcnkj nilai ini bermakna bahawa titik akhir Webhook anda akan menjadi sesuatu seperti

malay-img2

  • GCHAT_BOT_ENDPOINT: pembolehubah persekitaran ini digunakan untuk menentukan titik akhir bagi bot Google Chat yang mana dikonfigurasikan di dalam API Google App. Ianya disarankan untuk menggunakan teks panjang dengan huruf turutan rawak dan tidak boleh dihasilkan semula e.g. asadqweqndqwqeqwcxcnkj nilai ini bermakna bahawa titik akhir Google Chatbot anda akan menjadi sesuatu seperti

malay-img3

Dockerfile menjelaskan terdapat pembolehubah tambahan yang mana berdasarkan pada nama rahsia yang ditakrifkan semasa melancarkan imej:

  • GCHAT_WEBHOOK_SECRET_FILE: Pembolehubah persekitaran ini digunakan untuk menyimpan nama fail di mana URL Webhook akan disimpan. Anda boleh menyatakan satu rahsia dan hantar laluan rahsia ini di dalam satu simpanan kepada pembolehubah ini.  Dalam contoh fail yang digubah, rahsia gchat_webhook telah ditakrifkan.  Rahsia ini digunakan untuk menyimpan url yang unik untuk Webhook yang akan datang bagi ruang sembang Google.  Anda boleh mendapatkan ini dengan mendayakan Webhook untuk ruang sembang tertentu di mana mesej perlu diletakkan apabila sahaja satu tindakan dicetus.  Untuk mendayakan Webhook yang diterima, pergi ke menu ruang sembang, pilih Konfigurasi Webhooks.

malay-img4

Satu dialog muncul yang menyenaraikan sebarang webhook yang diterima yang telah dinyatakan bagi ruang itu, anda boleh mendefinisikan webhook baharu di sini:

malay-img5

Anda perlu menyalin URL bagi Webhook dan menetapkannya sebagai nilai rahsia – gchat_webhook dan pas /run/secrets/gchat_webhook sebagai nilai bagi GCHAT_WEBHOOK_SECRET_FILE.
JENKINS_URL_SECRET_FILE: Pembolehubah persekitaran ini digunakan dalam Dockerfile untuk menyatakan laluan fail itu dari mana URL untuk Jenkins Webhook akan diambil.  Dalam fail yang digubah yang disediakan dengan kod itu, rahsia yan dinamakan jenkins_url  telah ditakrifkan.  Rahsia ini ialah URL bagi Jenkins webhook yang akan dipanggil apabila bot Google Chat dicetus.  Pembolehubah persekitaran telah ditetapkan kepada nilai /run/secrets/jenkins_url.
Bagi melancarkan imej ini sebagai perkhidmatan swarm dengan routing layer-7, anda juga perlu menetapkan rahsia-rahsia tambahan yang mana akan menyimpan sijil dan kunci bagi komunikasi https.
Kod contoh untuk melancarkan perkhidmatan ini

malay-img6

Pembolehubah dalam Fail Docker/Imej Docker

  • JENKINS_URL_SECRET_FILE– Ini adalah laluan ke fail rahsia di mana URL bagi url API Jenkins disimpan.  Adalah ideal untuk menghantar URL Jenkins Webhook menggunakan Rahsia Docker Swarm kerana URL itu mengandungi satu token rahsia yang boleh digunakan oleh sesiapa untuk meminta tugasan Jenkins anda.
  • GCHAT_WEBHOOK_SECRET_FILE – Ini adalah laluan ke fail rahsia di mana URL bagi url Webhook akan datang bagi Google Chat disimpan. Adalah ideal untuk menghantar URL Webhook bagi Google Chat menggunakan Rahsia Swarm Docker kerana URL itu mengandungi satu token rahsia yang boleh digunakan oleh sesiapa untuk menghantar pemberitahuan kepada Ruang Google Chat anda.
  • GCHAT_WEBHOOK_ENDPOINT – Ini adalah kegunaan titik akhir yang digunakan oleh DTR untuk menghantar pemberitahuan e.g.

malay-img7
Jika anda memanggil URL ini dengan muatan JSON, ia akan menghantar muatan JSON itu ke ruang Google Chat anda di mana Webhook telah ditetapkan.  Pastikan bahawa ianya cukup rumit e.g. asadqweqndqwqeqwcxcnkj.  Webhook ini akan diminta dengan menggunakan URL yang lengkap.

malay-img8
GCHAT_BOT_ENDPOINT – Ini adalah titik akhir bagi Bot Google Chat e.g google-chat-bot.demoapps.example.com/xyz.  Seperti yang disarankan oleh Google, pastikan bahawa titik akhir ini bukanlah laluan konteks mudah tetapi satu yang lebih rumit e.g.

malay-img9

  • Anda hanya perlu untuk menyediakan konteks laluan di sini i.e. asadqweqndqwqeqwcxcxyz dan bukan seluruh URL
  • DEBUG – Ini ditakrifkan samada aplikasi Python Flask beroperasi dengan debug=Trueatau tidak.  Jika anda mahu mendayakan DEBUG mode, tetapkan ini ke True  atau T atau true.

Menetapkan Google Chat

Apabila kod ini telah sedia dan beroperasi dengan satu URL yang sah, anda boleh terus menetapkan bot Google Chat anda.  Di sini anda perlu untuk menyediakan titik akhir bot yang telah anda konfigurasikan.
Apabila ia telah ditetapkan, anda boleh cuba menguji bot Google Chat dengan menambahnya ke ruang sembang (lebih mudah menggunakan ruang sembang yang sama di mana webhook yang diterima telah dikonfigurasikan).  Anda boleh mintanya dengan menghantar satu mesej @bot_name Deploy.  Ini sepatutnya mencetuskan satu pelancaran menggunakan tugasan Jenkins yang telah anda konfigurasikan untuk mengemaskini perkhidmatan Docker Swarm itu.
malay-img10

Menetapkan DTR Webhook

Apabila kod itu telah dilancarkan, Webhook yang diterima akan menjadi aktif.  Anda perlu mengintegrasikannya dengan DTR anda dengan mengkonfigurasikan Webhook untuk satu simpanan DTR.  DTR webhook ini akan diminta pada acara khusus e.g. imbasan lengkap, penolakan imej dan sebagainya. Apabila webhook diminta, satu ringkasan mesej dalam format JSON diletakkan ke webhook.  Di dalam kod python kami, titik akhir webhook dikonfigurasikan untuk menerima ringkasan JSON ini dan letakkan ringkasan imbasan ke ruang sembang.
Untuk mengkonfigurasikan Webhook, buka URL DTR dalam pelayan web dan klik pada simpanan yang anda mahu konfigurasikan Webhook.  Kemudian, klik pada tab “WEBHOOKS” dan tambah Webhook baru dengan mengklik “New Webhook”.  Satu kotak input baru akan muncul di mana anda boleh menyediakan “Notification to receive” i.e acara yang akan mencetuskan satu panggilan ke Webhook dan titik akhir Webhook.

malay-img11
Sediakan nilai-nilai bagi:

  • NOTIFICATION TO RECEIVE: imbasan sekuriti telah lengkap
  • WEBHOOK URL: Di sini sediakan URL dengan konteks laluan. Dasar URL akan jadi seperti URL yang anda telah petakan kepada perkhidmatan yang dilancarkan menggunakan kod ini. Laluan konteks akan jadi seperti GCHAT_WEBHOOK_ENDPOINT yang telah anda konfigurasikan sementara melancarkan kod ini.

Anda kini boleh menguji Webhook yang diterima dengan mencetus satu Docker dibina menggunakan tugasan Jenkins yang telah dikonfigurasikan untuk melaksanakan binaan imej.  Ia sepatutnya meletakkan satu mesej dalam ruang sembang itu.

malay-img12

Kini anda boleh melengkapkan aliran – semakan-dalam-satu-kod yang akan meminta satu saluran Jenkins yang akan melaksanakan binaan satu imej dan menolaknya ke DTR.   Manakala DTR ini pula akan meminta Webhook yang telah dikonfigurasikan dalam ruang sembang Google untuk maklumkan pentadbir mengenai hasil imbasan bagi imej baru yang ditolak. Pentadbir boleh memutuskan untuk melancarkan imej berdasarkan ringkasan imbasan.  Pentadbir boleh dengan mudah membalas di dalam ruang sembang untuk melancarkan imej itu : @chatBot deploy.

Menyumbang & Perkara untuk dilakukan

Inilah adalah satu projek mudah untuk mendemonstrasikan sifat fleksibel yang ditawarkan oleh platform Docker EE dan bagaimana ia boleh secara mudah diintegrasikan dengan pelbagai alatan lain untuk membina budaya DevOps dan saluran automasi lebih berkesan.  Ini bukan diniatkan bagi pelancaran penghasilan sebenar tetapi patut memberi idea adil kepada sesiapa yang merancang untuk menggunakan sepenuhnya ciri-ciri DTR ini untuk melakukan pelancaran penghasilan.  Dalam persekitaran perusahaan, anda boleh dengan mudah menggantikan Google Chat dengan perkhidmatan lain e.g. Slack.
Sekiranya anda berminat untuk membuat kod ini lebih baik, sila buat satu permintaan tarik ke simpanan.  Dari segi kod beberapa perkara yang boleh dipertingkatkan:

  1. Benarkan pentadbir untuk memilih satu tag imej dalam mesej. Buat masa ini ia bergantung pada integrasi di antara Github dan Jenkins.
  2. Urus kes-kes sudut di mana kod git dikemaskini dan binaan imej dalam kemajuan dan Pentadbir mengatakan Lancar. Pada masa ini tag imej diambil oleh Jenkins daripada Github (berdasarkan pada GIT COMMIT hash), senario ini akan menghasilkan satu kesilapan.
  3. Kerana hasil imbasan terlalu besar, saya terpaksa memadam butiran imbasan dan lapisan imej. Ianya akan jadi lebih baik untuk diulang melalui kamus hasil imbasan dan hantar semua butiran dalam mesej yang seterusnya (selepas menghantar ringkasan).
  4. Atau mungkin membenarkan Pentadbir untuk meminta butiran dengan mengatakan “@bot get scan details”. Ini akan memerlukan integrasi dengan API DTR

Untuk sebarang yang lain mengenai Docker, anda boleh menulis kepada kami ke success@ashnik.com


Go to Top