GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Menggunakan Rsync dan SSH di Pipeline GitLab CI Dockerized

rsync adalah utilitas sinkronisasi file populer yang menggunakan algoritma yang efisien untuk meminimalkan konsumsi bandwidth. Salah satu peran umum rsync adalah menerapkan pembuatan situs web ke server produksi jarak jauh. Berikut cara menggabungkan keserbagunaan rsync dengan otomatisasi yang disediakan oleh pipeline CI GitLab.

Pelaksana Pipa

GitLab CI mendukung beberapa jenis pelaksana pipeline. Ini menentukan lingkungan tempat pekerjaan Anda akan dijalankan. shell executor adalah default dan menjalankan bare metal pada mesin host. Ini memungkinkan saluran Anda menggunakan perintah apa pun yang tersedia di host tanpa konfigurasi lebih lanjut. Karena distribusi Linux paling populer dikirimkan dengan rsync terinstal, pendekatan ini mudah untuk dipahami.

Sayangnya, shell pelaksana tidak memberikan isolasi yang kuat dan dapat mencemari lingkungan host Anda dari waktu ke waktu. Alternatif yang lebih baik adalah docker executor, yang memutar wadah Docker baru untuk setiap pekerjaan CI. Semua tugas dijalankan di lingkungan yang bersih yang tidak dapat memengaruhi host.

Kekurangannya di sini adalah bahwa gambar dasar Docker umumnya tidak menyertakan rsync atau ssh . Bahkan gambar OS resmi seperti ubuntu:latest kirim sebagai build minimal tanpa perintah ini. Ini membuat skrip saluran pipa yang sedikit lebih terlibat untuk menambahkan dependensi dan rsync file Anda.

Inilah cara menambahkan rsync ke saluran Anda. Pastikan Anda memiliki GitLab Runner berbasis Docker sebelum melanjutkan. Kami juga akan berasumsi bahwa Anda memiliki proyek GitLab yang siap digunakan.

Bersiap

Anda memerlukan pasangan kunci SSH yang tersedia jika Anda akan menggunakan rsync untuk terhubung ke host SSH jarak jauh. Anda dapat membuat kunci publik dan pribadi dengan menjalankan ssh-keygen -t rsa . Salin kunci publik ke server yang akan Anda sambungkan.

Selanjutnya, salin kunci pribadi yang dihasilkan ke papan klip Anda:

cat ~/.ssh/id_rsa | xclip -selection c

Buka proyek GitLab Anda dan klik "Pengaturan" di bagian bawah menu navigasi kiri. Klik item “CI/CD” di submenu. Gulir ke bawah ke bagian “Variabel” pada halaman yang dihasilkan.

Klik tombol biru "Tambah variabel". Beri nama variabel baru Anda di bidang "Kunci". Kami menggunakan SSH_PRIVATE_KEY . Tempelkan kunci pribadi Anda ke dalam bidang “Nilai”, termasuk ----BEGIN leading di depan dan mengikuti -----END garis.

Menambahkan kunci sebagai variabel CI memungkinkan Anda mereferensikannya di saluran Anda nanti. Ini akan ditambahkan ke agen SSH dalam wadah yang dibuat saluran pipa Anda.

Menambahkan File Pipeline Anda

GitLab CI menjalankan tugas berdasarkan konten .gitlab-ci.yml file di repositori Anda. GitLab akan secara otomatis menemukan file ini dan menjalankan pipeline yang ditentukannya saat Anda mendorong perubahan ke cabang Anda.

deploy:
  stage: deploy
  image: alpine:latest
  script:
    - rsync -atv --delete --progress ./ [email protected]:/var/www/html

.gitlab-ci.yml ini berisi pekerjaan yang menggunakan rsync untuk menyinkronkan konten direktori kerja ke /var/www/html di example.com server. Ini menggunakan alpine:latest Gambar Docker sebagai lingkungan build. Pipeline saat ini akan gagal karena rsync tidak termasuk dalam gambar Alpine.

Menginstal SSH dan rsync

Alpine adalah basis yang baik untuk pekerjaan itu karena ini adalah gambar yang ringan dengan sedikit ketergantungan. Ini mengurangi penggunaan jaringan sementara GitLab menarik gambar di awal pekerjaan, mempercepat saluran Anda. Agar rsync berfungsi, tambahkan SSH dan rsync ke gambar, lalu mulai agen SSH dan daftarkan kunci pribadi yang Anda buat sebelumnya.

deploy:
  stage: deploy
  image: alpine:latest
  before_script:
    - apk update && apk add openssh-client rsync
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | ssh-add -
  script:
    - rsync -atv --delete --progress ./ [email protected]:/var/www/html

OpenSSH dan rsync diinstal menggunakan apk Alpine manajer paket. Agen otentikasi SSH dimulai, dan kunci pribadi Anda ditambahkan melalui ssh-add . GitLab secara otomatis menginjeksi SSH_PRIVATE_KEY variabel lingkungan dengan nilai yang Anda tetapkan dalam pengaturan proyek Anda. Jika Anda menggunakan kunci yang berbeda pada layar variabel GitLab, pastikan Anda menyesuaikan saluran Anda.

Mengelola Verifikasi Host

SSH secara interaktif meminta konfirmasi saat pertama kali Anda terhubung ke host jarak jauh baru. Ini tidak kompatibel dengan lingkungan CI, di mana Anda tidak akan dapat melihat atau menanggapi perintah ini.

Tersedia dua opsi untuk mengatasi hal ini:Nonaktifkan pemeriksaan kunci host yang ketat, atau daftarkan server Anda sebagai host yang “dikenal” sebelumnya.

Untuk opsi pertama, tambahkan baris berikut ke before_script pipeline Anda :

- echo "Host *ntStrictHostKeyChecking no" >> ~/.ssh/config

Meskipun ini berhasil, ini merupakan risiko keamanan potensial. Anda tidak akan mendapat peringatan jika penyerang menguasai domain atau IP server Anda. Menggunakan pemeriksaan kunci host memungkinkan Anda memverifikasi bahwa identitas remote adalah seperti yang Anda harapkan.

Anda dapat menambahkan remote sebagai host yang dikenal secara non-interaktif dengan menghubungkannya di mesin Anda sendiri di luar jalur pipa Anda. Periksa ~/.ssh/known_hosts Anda file dan temukan baris yang berisi IP atau nama host remote. Salin baris ini dan gunakan prosedur dari sebelumnya untuk menambahkan variabel GitLab CI baru. Beri nama variabel ini SSH_HOST_KEY .

Sekarang, perbarui before_script Anda bagian dengan baris berikut:

- echo "$SSH_HOST_KEY" > ~/.ssh/known_hosts

Sekarang, Anda dapat terhubung ke server tanpa menerima konfirmasi apa pun. Dorong kode Anda ke repositori GitLab Anda dan lihat saat pipeline Anda selesai.

Peningkatan Lebih Lanjut

Pipeline ini adalah contoh sederhana tentang cara memulai SSH dan rsync di lingkungan Docker. Ada peluang untuk lebih meningkatkan sistem dengan menggabungkan langkah-langkah persiapan ke dalam tahap build khusus yang membangun image Docker yang dapat Anda gunakan kembali di antara pipeline.

.gitlab-ci.yml juga akan mendapat manfaat dari penggunaan variabel yang lebih besar. Mengabstraksi nama host server jauh (example.com ), direktori (/var/www/html ), dan pengguna (user ) ke dalam variabel GitLab CI akan membantu menjaga file tetap bersih, mencegah browser repositori biasa melihat detail lingkungan, dan memungkinkan Anda mengubah nilai konfigurasi tanpa mengedit file pipeline Anda.

Ringkasan

Menggunakan rsync di pipeline GitLab CI memerlukan sedikit pengaturan manual untuk membentuk lingkungan build yang memiliki dependensi yang Anda butuhkan. Anda harus memasukkan kunci pribadi SSH secara manual dan mendaftarkan server jarak jauh sebagai host yang dikenal.

Meskipun image Docker komunitas tersedia yang menggulung SSH dan rsync di atas image dasar populer, ini pada akhirnya memberi Anda lebih sedikit kendali atas build Anda. Anda memperluas rantai pasokan pipa Anda dengan gambar yang belum tentu Anda percayai. Dimulai dengan gambar dasar OS dan menambahkan apa yang Anda butuhkan membantu Anda memiliki kepercayaan diri pada build Anda.


Docker
  1. Cara Menggunakan Penerusan Port SSH

  2. Bagaimana dan Mengapa Menggunakan Host Docker Jarak Jauh

  3. Cara Menginstal dan Menggunakan Docker Compose di CentOS

  1. Cara Menggunakan rsync untuk Mencadangkan Data

  2. Cara Menggunakan rsync untuk Mengecualikan File dan Direktori dalam Transfer Data

  3. Cara Menginstal dan Menggunakan SFTP di Server Linux

  1. Apa Itu Perintah SSH Dan Bagaimana Menggunakan SSH Untuk Menghubungkan Ke Server Jarak Jauh

  2. Cara Menggunakan Rsync

  3. Cara menggunakan perintah rsync untuk menyalin data secara lokal dan melalui SSH