Saya pernah berpikir untuk mengotomatiskan penerapan proyek saya. gitlab.com dengan baik hati menyediakan semua alat untuk ini, dan tentu saja saya memutuskan untuk memanfaatkannya, mencari tahu dan menulis skrip penerapan kecil. Pada artikel ini saya berbagi pengalaman saya dengan komunitas.
TL; DR
Siapkan VPS: nonaktifkan root, masuk dengan kata sandi, instal dockerd, konfigurasikan ufw
Daftarkan variabel gitlab di pengaturan CI/CD dengan konten sertifikat. Tulis skrip .gitlab-ci.yml untuk penerapan.
Saya akan menunjukkan semua contoh pada distribusi Debian.
Pengaturan VPS awal
Jadi Anda membeli sebuah instance misalnya di DO, hal pertama yang perlu Anda lakukan adalah melindungi server Anda dari dunia luar yang agresif. Saya tidak akan membuktikan atau menegaskan apa pun, saya hanya akan menampilkan log /var/log/messages dari server virtual saya:
Tangkapan layar
Pertama, instal firewall ufw:
apt-get update && apt-get install ufw
Mari aktifkan kebijakan default: blokir semua koneksi masuk, izinkan semua koneksi keluar:
Sintaks umumnya adalah sebagai berikut: Izinkan koneksi melalui port: ufw izinkan 12345, dengan 12345 adalah nomor port atau nama layanan. Tolak: ufw tolak 12345
Aktifkan firewallnya:
ufw enable
Kami keluar dari sesi dan masuk lagi melalui ssh.
Tambahkan pengguna, berikan dia kata sandi, dan tambahkan dia ke grup sudo.
Ip server harus menjadi milik Anda. Sekarang cobalah login menggunakan user yang Anda buat tadi, Anda tidak perlu lagi memasukkan password. Selanjutnya, pada pengaturan konfigurasi, ubah hal berikut:
sudo nano /etc/ssh/sshd_config
nonaktifkan login kata sandi:
PasswordAuthentication no
Mulai ulang daemon sshd:
sudo systemctl reload sshd
Sekarang jika Anda atau orang lain mencoba masuk sebagai pengguna root, itu tidak akan berhasil.
Selanjutnya instal dockerd, saya tidak akan menjelaskan prosesnya di sini, karena semuanya sudah dapat diubah, ikuti tautan ke situs web resmi dan ikuti langkah-langkah menginstal docker di mesin virtual Anda: https://docs.docker.com/install/linux/docker-ce/debian/
Menghasilkan sertifikat
Untuk mengontrol daemon buruh pelabuhan dari jarak jauh, diperlukan koneksi TLS terenkripsi. Untuk melakukan ini, Anda harus memiliki sertifikat dan kunci, yang harus dibuat dan ditransfer ke mesin jarak jauh Anda. Ikuti langkah-langkah yang diberikan dalam instruksi di situs resmi buruh pelabuhan: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Semua file *.pem yang dihasilkan untuk server, yaitu ca.pem, server.pem, key.pem, harus ditempatkan di direktori /etc/docker di server.
Menyiapkan buruh pelabuhan
Dalam skrip peluncuran daemon buruh pelabuhan, kami menghapus opsi -H df://, opsi ini menentukan host mana daemon buruh pelabuhan dapat dikontrol.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Selanjutnya, Anda harus membuat file pengaturan, jika belum ada, dan tentukan opsi:
Jika semuanya βhijauβ, maka kita anggap kita telah berhasil mengkonfigurasi buruh pelabuhan di server.
Menyiapkan pengiriman berkelanjutan di gitlab
Agar pekerja Gitalaba dapat menjalankan perintah pada host Docker jarak jauh, perlu untuk memutuskan bagaimana dan di mana menyimpan sertifikat dan kunci untuk koneksi terenkripsi dengan Dockerd. Saya memecahkan masalah ini hanya dengan menambahkan yang berikut ini ke variabel di pengaturan gitlbab:
judul spoiler
Keluarkan saja isi sertifikat dan kunci melalui cat: cat ca.pem. Salin dan tempel ke nilai variabel.
Mari kita menulis skrip untuk penerapan melalui GitLab. Gambar docker-in-docker (dind) akan digunakan.
Masalah utamanya adalah "menarik" konten sertifikat dalam bentuk normal dari variabel gitlab CI/CD. Saya tidak tahu mengapa koneksi ke host jarak jauh tidak berfungsi. Di host saya melihat log sudo journalctl -u docker, ada kesalahan saat jabat tangan. Saya memutuskan untuk melihat apa yang umumnya disimpan dalam variabel; untuk melakukan ini, Anda dapat terlihat seperti ini: cat -A $DOCKER_CERT_PATH/key.pem. Saya mengatasi kesalahan tersebut dengan menambahkan penghapusan karakter kereta tr -d 'r'.
Selanjutnya, Anda dapat menambahkan tugas pasca-rilis ke skrip sesuai kebijaksanaan Anda. Anda dapat melihat versi yang berfungsi di repositori saya https://gitlab.com/isqad/gitlab-ci-cd