Wakati mmoja nilifikiria juu ya kuelekeza upelekaji wa mradi wangu kiotomatiki. gitlab.com hutoa kwa huruma zana zote za hii, na kwa kweli niliamua kuitumia kwa kuifikiria na kuandika hati ndogo ya kupeleka. Katika nakala hii, ninashiriki uzoefu wangu na jamii.
TL; DR
Sanidi VPS: afya ya mizizi, kuingia kwa nenosiri, kusakinisha dockerd, kusanidi ufw
Sajili katika vigeu vya gitlab katika mipangilio ya CI/CD na yaliyomo kwenye vyeti. Andika hati ya .gitlab-ci.yml kwa matumizi.
Nitaonyesha mifano yote kwenye usambazaji wa Debian.
Mpangilio wa awali wa VPS
Hapa ulinunua mfano kwa mfano kwenye DO, jambo la kwanza kufanya ni kulinda seva yako dhidi ya ulimwengu wa nje wenye fujo. Sitathibitisha au kudai chochote, nitaonyesha tu /var/log/messages logi ya seva yangu ya kawaida:
Picha ya skrini
Kwanza, sasisha firewall ya ufw:
apt-get update && apt-get install ufw
Washa sera chaguo-msingi: zuia miunganisho yote inayoingia, ruhusu miunganisho yote inayotoka:
IP ya seva lazima iwe yako. Sasa jaribu kuingia chini ya mtumiaji aliyeundwa mapema, huna haja ya kuingiza nenosiri tena. Ifuatayo, katika mipangilio ya usanidi, badilisha yafuatayo:
sudo nano /etc/ssh/sshd_config
Lemaza kuingia kwa nenosiri:
PasswordAuthentication no
Anzisha tena daemon ya sshd:
sudo systemctl reload sshd
Sasa ikiwa wewe au mtu mwingine atajaribu kuingia kama mzizi, itashindwa.
Ifuatayo, tunasanikisha dockerd, sitaelezea mchakato hapa, kwani kila kitu kinaweza kubadilishwa, fuata kiunga cha wavuti rasmi na upitie hatua za kusanikisha docker kwenye mashine yako ya kawaida: https://docs.docker.com/install/linux/docker-ce/debian/
Uzalishaji wa cheti
Ili kudhibiti daemoni ya kituo ukiwa mbali, muunganisho uliosimbwa wa TLS unahitajika. Ili kufanya hivyo, unahitaji kuwa na cheti na ufunguo ambao unahitaji kuzalisha na kuhamisha kwenye mashine yako ya mbali. Fuata hatua zilizotolewa katika maagizo kwenye tovuti rasmi ya docker: https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl Faili zote za *.pem zinazozalishwa za seva, yaani ca.pem, server.pem, key.pem, zinapaswa kuwekwa kwenye saraka ya /etc/docker kwenye seva.
usanidi wa docker
Kwenye hati ya kuanza ya daemon ya docker, ondoa -H df:// chaguo, chaguo hili linaambia ni mwenyeji gani daemon ya docker inaweza kudhibitiwa.
# At /lib/systemd/system/docker.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
Ifuatayo, unda faili ya mipangilio ikiwa haipo tayari na uweke chaguo:
Ikiwa kila kitu ni kijani, basi tunazingatia kwamba tumefanikiwa kusanidi docker kwenye seva.
Kuweka uwasilishaji unaoendelea kwenye gitlab
Ili mfanyakazi wa gitalab aweze kutekeleza amri kwenye seva pangishi ya kidhibiti cha mbali, unahitaji kuamua jinsi na mahali pa kuhifadhi vyeti na ufunguo wa muunganisho uliosimbwa kwa njia fiche kwenye dockerd. Nilitatua shida hii kwa kuandika tu kwa anuwai kwenye mipangilio ya gitlbab:
cheo cha mharibifu
Toa tu yaliyomo kwenye cheti na ufunguo kupitia paka: cat ca.pem. Nakili na ubandike katika maadili tofauti.
Wacha tuandike hati ya kupelekwa kupitia gitlab. Picha ya docker-in-docker (dind) itatumika.
Shida kuu ilikuwa "kutoa" yaliyomo kwenye cheti katika fomu ya kawaida kutoka kwa anuwai za gitlab CI / CD. Sikuweza kujua kwa nini muunganisho wa seva pangishi ya mbali haukufanya kazi. Nilitazama logi ya sudo journalctl -u docker kwenye mwenyeji, kuna hitilafu na kushikana mikono. Niliamua kuangalia kile ambacho kwa ujumla kimehifadhiwa katika anuwai, kwa hii unaweza kuona cat -A $DOCKER_CERT_PATH/key.pem. Ilishinda hitilafu kwa kuongeza kuondolewa kwa herufi ya caret tr -d 'r'.
Zaidi ya hayo, unaweza kuongeza kazi za baada ya toleo kwenye hati kwa hiari yako. Unaweza kuangalia toleo la kufanya kazi kwenye hazina yangu https://gitlab.com/isqad/gitlab-ci-cd