Saya pernah berfikir tentang mengautomasikan penggunaan projek saya. gitlab.com dengan hormatnya menyediakan semua alat untuk ini, dan sudah tentu saya memutuskan untuk memanfaatkannya, memikirkannya dan menulis skrip penggunaan kecil. Dalam artikel ini saya berkongsi pengalaman saya dengan komuniti.
TL; DR
Sediakan VPS: lumpuhkan root, log masuk dengan kata laluan, pasang dockerd, konfigurasikan ufw
Daftar dalam pembolehubah gitlab dalam tetapan CI/CD dengan kandungan sijil. Tulis skrip .gitlab-ci.yml untuk penempatan.
Saya akan menunjukkan semua contoh pada pengedaran Debian.
Persediaan VPS awal
Jadi anda membeli contoh contohnya di DO, perkara pertama yang perlu anda lakukan ialah melindungi pelayan anda daripada dunia luar yang agresif. Saya tidak akan membuktikan atau menegaskan apa-apa, saya hanya akan menunjukkan log /var/log/mesej pelayan maya saya:
ΓΒ‘ΓΒΊΓ β¬ ΓΒΈΓΒ½ΓΓΒΎΓ,
Mula-mula, pasang tembok api ufw:
apt-get update && apt-get install ufw
Mari dayakan dasar lalai: sekat semua sambungan masuk, benarkan semua sambungan keluar:
Penting: jangan lupa untuk membenarkan sambungan melalui ssh:
ufw allow OpenSSH
Sintaks umum adalah seperti berikut: Benarkan sambungan melalui port: ufw benarkan 12345, dengan 12345 ialah nombor port atau nama perkhidmatan. Tolak: ufw tolak 12345
Hidupkan tembok api:
ufw enable
Kami keluar dari sesi dan log masuk semula melalui ssh.
Tambahkan pengguna, berikan kata laluan kepadanya dan tambahkan dia pada kumpulan sudo.
Ip pelayan mestilah milik anda. Sekarang cuba log masuk menggunakan pengguna yang anda buat sebelum ini; anda tidak perlu lagi memasukkan kata laluan. Seterusnya, dalam tetapan konfigurasi, tukar yang berikut:
sudo nano /etc/ssh/sshd_config
lumpuhkan log masuk kata laluan:
PasswordAuthentication no
Mulakan semula daemon sshd:
sudo systemctl reload sshd
Sekarang jika anda atau orang lain cuba log masuk sebagai pengguna root, ia tidak akan berfungsi.
Seterusnya, pasang dockerd, saya tidak akan menerangkan prosesnya di sini, kerana semuanya sudah boleh diubah, ikuti pautan ke laman web rasmi dan ikuti langkah-langkah memasang docker pada mesin maya anda: https://docs.docker.com/install/linux/docker-ce/debian/
Menjana sijil
Untuk mengawal daemon docker dari jauh, sambungan TLS yang disulitkan diperlukan. Untuk melakukan ini, anda perlu mempunyai sijil dan kunci, yang mesti dijana dan dipindahkan ke mesin jauh anda. Ikuti langkah-langkah yang diberikan dalam arahan di laman web docker rasmi: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Semua fail *.pem yang dihasilkan untuk pelayan, iaitu ca.pem, server.pem, key.pem, mesti diletakkan dalam direktori /etc/docker pada pelayan.
Menyediakan dockerd
Dalam skrip pelancaran daemon docker, kami mengalih keluar pilihan -H df://, pilihan ini menentukan hos mana daemon docker boleh dikawal.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Seterusnya, anda harus membuat fail tetapan, jika ia belum wujud, dan tentukan pilihan:
Jika semuanya "hijau", maka kami menganggap bahawa kami telah berjaya mengkonfigurasi docker pada pelayan.
Menyediakan penghantaran berterusan pada gitlab
Untuk membolehkan pekerja Gitalaba dapat melaksanakan arahan pada hos Docker jauh, adalah perlu untuk memutuskan cara dan tempat untuk menyimpan sijil dan kunci untuk sambungan yang disulitkan dengan Dockerd. Saya menyelesaikan masalah ini dengan hanya menambah yang berikut pada pembolehubah dalam tetapan gitlbab:
tajuk spoiler
Hanya keluarkan kandungan sijil dan kunci melalui kucing: cat ca.pem. Salin dan tampal ke dalam nilai pembolehubah.
Mari kita tulis skrip untuk penggunaan melalui GitLab. Imej docker-in-docker (dind) akan digunakan.
Masalah utama ialah "menarik" kandungan sijil dalam bentuk biasa daripada pembolehubah CI/CD gitlab. Saya tidak dapat mengetahui mengapa sambungan kepada hos jauh tidak berfungsi. Pada hos saya melihat log sudo journalctl -u docker, terdapat ralat semasa berjabat tangan. Saya memutuskan untuk melihat perkara yang biasanya disimpan dalam pembolehubah; untuk melakukan ini, anda boleh kelihatan seperti ini: cat -A $DOCKER_CERT_PATH/key.pem. Saya mengatasi ralat dengan menambah penyingkiran aksara pengangkutan tr -d 'r'.
Seterusnya, anda boleh menambah tugas selepas keluaran pada skrip mengikut budi bicara anda. Anda boleh melihat versi yang berfungsi dalam repositori saya https://gitlab.com/isqad/gitlab-ci-cd