Cara mengimplementasikan penyebaran dari GitHub ke server produksi menggunakan Webhook



Saya sudah lama terbiasa membuat repositori di GitHub. Ini jauh lebih efektif daripada menyimpan semuanya di Google Drive atau, lebih buruk, di hard drive Anda. Tapi di sini muncul pertanyaan segera: bagaimana cara menyebarkan ke server yang berfungsi?

Sebagian besar pencarian membawa saya ke Jenkins dan alat penyebaran berkelanjutan lainnya. Tetapi saya ingin mencari solusi yang berbeda. Jadi saya pergi ke layanan Webhook gratis.

Skillbox merekomendasikan: Kursus praktis "Pengembang Mobile PRO" .

Kami mengingatkan Anda: untuk semua pembaca "Habr" - diskon 10.000 rubel saat mendaftar untuk kursus Skillbox apa pun menggunakan kode promo "Habr".

Basis teknis Webhook adalah tetesan Digital Ocean baru dengan Ubuntu 16.04 sebagai server produksi. Untuk mengurangi jumlah langkah yang diperlukan untuk mengimplementasikan rencana, semua tindakan dilakukan oleh pengguna root.

Mari kita mulai dengan github


Jika Anda memiliki repositori dan ingin menggunakannya, Anda dapat melewati langkah ini - cukup gunakan URI SSH, dan hanya itu. Jika tidak, buat satu dan gunakan SSH URI juga.



Instal Go and Webhook (Tetesan Laut Digital).

Sebelum Anda mulai, ada baiknya pembaruan dan peningkatan cepat dengan pemasang Ubuntu 16.04 yang baru.

sudo apt update -y && sudo apt upgrade -y 

Sekarang untuk menginstal WebHook, Anda perlu menginstal bahasa pemrograman Go. Pada saat penulisan ini, versi 1.11.4 relevan, jadi jika Anda memiliki versi yang berbeda, Anda perlu melakukan perubahan.

 wget https://dl.google.com/go/go1.11.4.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.11.4.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin 

Saatnya mengunduh versi terbaru Webhook.

 go get github.com/adnanh/webhook 

Tidak ada bilah kemajuan selama unduhan, jadi Anda hanya harus menunggu. Setelah proses selesai, jalankan ~ / go / bin / webhook.

Webhook sudah diinstal, tetapi Anda perlu membuat direktori dan struktur file agar semuanya berfungsi sebagaimana mestinya.

 mkdir ~/webhooks mkdir ~/webhooks/deployment-tutorial touch ~/webhooks/hooks.json touch ~/webhooks/deployment-tutorial/deploy.sh chmod +x ~/webhooks/deployment-tutorial/deploy.sh 

File hooks.json bertanggung jawab untuk konfigurasi dan perutean, dan deploy.sh berfungsi sebagai alat untuk mengeksekusi perintah yang diperlukan untuk meningkatkan dari GitHub.

Langkah pertama adalah mengkonfigurasi hooks.json dengan membukanya di editor teks. File tersebut berisi konfigurasi untuk titik akhir yang akan dibuat setelah peluncuran Webhook, dan merupakan array objek, yang masing-masing merupakan titik akhir yang unik.

 [{ "id": "deployment-tutorial", "execute-command": "/root/webhooks/deployment-tutorial/deploy.sh", "command-working-directory": "/root/deployed-site/", "response-message": "Executing deploy script...", "trigger-rule": { "match": { "type": "payload-hash-sha1", "secret": "The Returners", "parameter": { "source": "header", "name": "X-Hub-Signature" } } } }] 

Id adalah nama unik yang akan digunakan untuk URL titik akhir;
execute-command - skrip yang akan dieksekusi ketika titik akhir diaktifkan;
command-working-directory - direktori yang digunakan selama eksekusi-perintah;
trigger-rule - opsi yang akan digunakan untuk tujuan keamanan informasi, ini adalah frase rahasia untuk titik akhir.

Biarkan saya mengingatkan Anda bahwa saya melakukan semua tindakan dari root, sehingga alamat awal adalah / root. Jika Anda masuk sebagai pengguna biasa, Anda harus mendaftar / home / nama pengguna, di mana nama pengguna, yang logis, adalah nama pengguna ini. Tidak perlu menggunakan ~ /, path harus absolut, jika tidak Anda akan mendapatkan kesalahan.

Anda mungkin telah memperhatikan bahwa kami menyiapkan folder kerja yang belum ada. Sebelum Anda membuatnya, Anda harus menyelesaikan dengan deploy.sh.

Script harus selalu dimulai dengan "shebang". Sebelum membuka file, Anda harus menjalankan bash yang mana. Nah, maka perintah-perintah berikut dijalankan dalam skrip:

 #!/bin/bash git fetch --all git checkout --force "origin/master" 

Sekarang Go dan Webhook telah diinstal, jadi Anda perlu mengonfigurasi konfigurasi di hooks.json dan menulis skrip yang bertanggung jawab atas penyebaran. Dia akan mengubah direktori tujuan, bekerja dengan cabang utama dari repositori GitHub.

Akhirnya, saatnya untuk membawa Webhook ke mode aktif, menggantikan 000.000.000.000 dengan IP Doplet yang berfungsi.

 /root/go/bin/webhook -hooks /root/webhooks/hooks.json -ip "000.000.000.000" -verbose 

Saat runtime, Anda mungkin melihat output dari URL dengan {id} di bagian akhir. Ini akan menjadi id dari objek yang telah dibuat di hooks.json: file deployment-tutorial.

Menyiapkan Git (Digital Ocean Droplet)


Pengaturan server belum selesai. Untuk melengkapinya, Anda perlu membuka jendela terminal baru dan mengautentikasi lagi di server, saat jendela pertama menjalankan Webhook. Pada awalnya, kita mengatur repositori URI, sekarang kita perlu menggunakannya.

Untuk melakukan ini, pergi ke direktori kerja yang ditentukan dalam hooks.json dan tulis yang berikut ini:

 git init git remote add origin git@github.com:jhsu98/deployment-tutorial.git 

Dalam hal ini, Anda perlu mengganti URI dengan Anda sendiri, bukan apa yang saya sebutkan.

Langkah terakhir adalah membuat kunci SSH untuk terhubung ke GitHub dengan bantuan mereka. Di jendela terminal, ketik ssh-keygen dan konfirmasikan dengan menekan Enter sampai tombol-tombol dibuat. Maka Anda perlu menampilkan kunci publik dengan mengetikkan cat ~ / .ssh / id_rsa.pub. Anda mendapatkan sesuatu seperti ini:

 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyzJrPVOJqsTqD2R3xirTp3VNMwpmJMyLklzJg4sRQyslTUmbNNmDVO573EbXQQf2PqPQljqKDDlSaELdav4OTi1gPCoDary300yUqC/efLGHflZ6pMNuGsP2zTzerD/TMjzl1FXF1wOGTXqcC4TvGBS1bFyUY5n8wSOJ8ntZ6bBNv0zA2t7X1vH8ahIBJLKCayq9ipobKlHPYqxBt6zAoeh/ILQ0PWhGkmbGqqzqN1jcVWOefLgj4Dl8bZWORS1nkqrVg2wFC2nnibH97kZLsNrdQaeK8jUrkUWkJcUELI02mkkqh2RtBx9EwQEvsm9YuDBD9xF+HyuWoAeqcKerb root@github-webhook-tutorial 

Nah, sekarang yang tersisa adalah mengatur repositori GitHub dan menguji penyebarannya.

Konfigurasikan Deployment Key dan Webhook (GitHub)


Di browser, buka pengaturan untuk repositori. Pertama, Anda perlu menambahkan Kunci Penempatan.



Saat menambahkan kunci, Anda harus menentukan namanya dan memasukkannya ke dalam output kunci di atas. GitHub memungkinkan Anda untuk bekerja hanya dengan kunci publik, jadi jika perlu, Anda perlu menentukan beberapa kunci. Setelah semuanya selesai, bagian Webhook adalah gilirannya.



Tiga bidang dalam bagian ini perlu perhatian khusus. Ini adalah URL payload, tipe konten, dan rahasia. URL payload adalah titik akhir yang didengar Webhook, tipe konten adalah format data, rahasia adalah baris khusus dari file hooks.json. Dalam kasus kami, ini adalah "The Returners".



Setelah membuat Webhook, tanda yang sesuai dalam pengaturan akan muncul, yang menunjukkan bahwa server tersedia. Jika Anda memeriksa terminal dengan Webhook yang berfungsi, Anda dapat melihat bahwa repositori sudah beroperasi.

Untuk memeriksa alur kerja, salin repositori ke mesin lokal, jika belum dilakukan, dan buat perubahan pada cabang utama. Setelah itu, mereka harus ditampilkan di server. Selesai

Pengembang, yang telah melakukan semua ini beberapa kali, menghabiskan waktu sekitar 10 menit untuk konfigurasi. Tapi ini setelah beberapa jam coba-coba. Ingat empat fitur kustomisasi penting ini:

  • Pastikan untuk menggunakan jalur absolut untuk hooks.json.
  • Jangan membuat deploy.sh dapat dieksekusi.
  • Konfirmasikan koneksi SSH selama "kontak" pertama GitHub dan server produksi.
  • Jangan gunakan "shebang" yang salah dalam skrip bash.

Skillbox merekomendasikan:

Source: https://habr.com/ru/post/id456018/


All Articles