← Zpět na všechny články blogu

Návod: Jak nastavit deployment z Gitlab.com?

David Janík
David Janík 3. 2. 2021 - 8 min. čtení
Blog

V tomhle návodu se naučíte, jak propojit váš projekt s GitLabem bez nutnosti instalovat celý systém. Stačí na server nainstalovat pouze gitlab-runner, abychom mohli využívat veškeré potřebné příkazy. Pak ho propojíme se shared-runnerem na GitLab.com a můžeme vesele pushovat i bez nutnosti instalovat celý GitLab na vlastním serveru.

Pokud ale potřebujete mít vše pod jednou střechou, tak mrkněte na návod, jak nainstalovat GitLab a taky jak nastavit automatický deploy aplikací.

1. Krok – Vytvořit si účet na GitLab.com

Pokud nemáte účet, tak je třeba se zaregistrovat.

VPS Centrum

Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.

Po registraci musíte vyplnit ještě 3 kroky, kdy se vás ptají, kdo všechno bude na projektu pracovat, vyberete jméno organizace a příslušnou URL a založíte si první projekt.

Vytvoření projektu

2. Krok – Nainstalujeme GitLab runner na server

Pro testovací účely využíváme naše virtuální servery s VPS Centrem. Konkrétně tarif Basic, který běží na Debian / Buster.

Nejdříve přidáme oficiální GitLab repozitář. Přihlásíme se na SSH a vykonáme příkaz:

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh"  | bash

Výstup by měl vypadat takto:

% Total % Received % Xferd Average Speed Time Time  Time Current

Dload Upload Total Spent Left Speed

100 5945 100 5945 0  0 8704  0 --:--:-- --:--:-- --:--:-- 8691

Detected operating system as debian/buster.

Checking for curl...

Detected curl...

Checking for gpg...

Detected gpg...

Running apt-get update... done.

Installing debian-archive-keyring which is needed for installing

apt-transport-https on many Debian systems.

Installing apt-transport-https... done.

Installing /etc/apt/sources.list.d/runner_gitlab-runner.list...done.

Importing packagecloud gpg key... done.

Running apt-get update... done.

The repository is setup! You can now install packages.

Pro instalaci GitLab runneru využijeme příkaz, kdy vypneme “skel”, abychom zamezili budoucímu problému, s nenalezením souborů či složek. Problém se objevuje pouze na distribuci Debian / Buster.

export GITLAB_RUNNER_DISABLE_SKEL=true

Následně přejdeme k instalaci runneru.

apt-get install gitlab-runner

3. Krok – Zaregistrujeme GitLab runner

Přihlásíme se na GitLab.com a pod vašim projektem půjdeme do sekce Settings > CI/CD, kde rozšíříte formulář s Runnery jako na obrázku níže.

Freelo - Nástroj na řízení úkolů a projektů

Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.

Nastavení runneru

Ujistěte se, že tzv. Shared runners jsou vypnuté, abychom mohli pushovat pomocí specifického runneru, který si teď jdeme nainstalovat.

Budeme potřebovat zaregistrovat runner s touto URL “https://gitlab.com/” a registrační token, který si zkopírujete.

Půjdeme tedy zase na SSH a zadáte příkaz:

gitlab-runner register
  1. Poté vložíte URL: https://gitlab.com/
  2. Zadáte token z administrace
  3. Můžete vložit popisek runneru (volitelné)
  4. Přidat tag nebo-li označení runneru: deploy
  5. Vybereme spouštěč runneru v našem případě: shell

Vystup příkazu:

root@rve03-david-janik ~ # gitlab-runner register

Runtime platform  arch=amd64 os=linux pid=13937 revision=775dd39d version=13.8.0

Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):

https://gitlab.com/

Enter the registration token:

wY6-7ZjSggxiST-fXuKV

Enter a description for the runner:

[rve03-david-janik.vas-server.cz]: testing

Enter tags for the runner (comma-separated): deploy

Registering runner... succeeded  runner=wY6-7ZjS

Enter an executor: shell, ssh, docker+machine, docker-ssh+machine, kubernetes, custom, parallels, virtualbox, docker, docker-ssh:

shell

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Můžeme si ověřit, jestli runner v pořádku běží příkazem:

gitlab-runner verify

Výstup by měl vypadat:

root@rve03-david-janik ~ # gitlab-runner verify

Runtime platform  arch=amd64 os=linux pid=14651 revision=775dd39d version=13.8.0

Running in system-mode.

Verifying runner... is alive  runner=YawZ9Ssz

Když se pak vrátíme do administrace na GitLab.com a aktualizujeme stránku v nastavení CI / CD, tak nově registrovaný runner už uvidíme. Viz.

A už nám zbývají poslední dva kroky. Vytvořit konfigurační soubor .gitlab-ci.yml, který z odpovídá za práci runneru a jejich chování a jako poslední krok přidáme SSH klíč.

Tady si už vystačíme z minulého návodu, kde jsme nastavili deploy nejdříve na devel a poté se změny propíšou i na produkční verzi. Každý projekt, vývojář by si měl ale takový soubor umět vytvořit sám, tak aby pokryl svoje potřeby.

4. Krok – Vytvoření konfiguračního souboru .gitlab-ci.yml

V nově vytvořeném projektu vytvoříme 3 důležité soubory:

  • .gitlab-ci.yml (script zodpovědný za deploy)
  • .deploy_ignore (které složky se při deploy nekopírují)
  • .gitignore (git dané soubory nebo složky bude ignorovat)

Vytvoření souboru

Pod námi je skript, který vložíte přímo do souboru .gitlab-ci.yml , samozřejmě “variables” vyměníte za svoje údaje/domény.

Pomocí skriptu pod námi budeme uploadovat změny/soubory do dvou složek. Do vývojové, která je zobrazena jako “devel” a pak poputují přimo do produkce.

variables:

  PROJECT_NAME: "test-gitlab-vh"

  PRODUCTION_DIR: "/www/hosting/vas-hosting.cz/www"

  PRODUCTION_SERVER: "rve03.vas-server.cz"

  DEVELOP_DIR: "/www/hosting/vas-hosting.cz/devel"

  DEVELOP_SERVER: "rve03.vas-server.cz"

  DEPLOY_USER: "deploy"

stages:

  - deploy

deploy-job:

  stage: deploy

  tags:

    - deploy

  only:

    - production    

  script:

    - rsync -ar --compress --delete --exclude-from=.deploy_ignore --rsync-path="sudo rsync" --chown=www-data:www-data --exclude-from=.gitignore . $DEPLOY_USER@$PRODUCTION_SERVER:$PRODUCTION_DIR

deploy-local-master-job:

  stage: deploy
 
  tags:

      - deploy   

  only:

    - master
    
  script:

    - rsync -ar --compress --delete --exclude-from=.gitignore --rsync-path="sudo rsync" --chown=www-data:www-data --exclude-from=.deploy_ignore . $DEPLOY_USER@$DEVELOP_SERVER:$DEVELOP_DIR/

deploy-local-job:

  stage: deploy 

  tags:

      - deploy 

  except:

    - master

    - production

  script:

    - rsync -ar --compress --delete --exclude-from=.gitignore --rsync-path="sudo rsync" --chown=www-data:www-data --exclude-from=.deploy_ignore . $DEPLOY_USER@$DEVELOP_SERVER:$DEVELOP_DIR/$PROJECT_NAME-$CI_BUILD_REF_NAME

5. Krok – Nastavení SSH klíče

Poslední část je nejvíce záludná a týká se vygenerování a správného nastavení SSH klíčů.

Pro vygenerování nového SSH klíče používáme metodu RSA, která se nám osvědčila.

Jako první se musíme přihlásit z roota pod uživatele “gitlab-runner”, který byl při instalaci Gitlabu automaticky vytvořen.

su gitlab-runner

Vygenerujeme SSH klíč.

ssh-keygen -o -t rsa -b 4096

Po vygenerování se vás zeptá, jestli chcete nechat defaultní cestu a pokud ano, stiskněte Enter. Poté se vás zeptá, jestli chcete zaheslovat SSH klíč, a to v našem případě rozhodně nechceme = stiskněte 2x enter.

Poté už se zobrazí klíč podobný tomuto:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQClpCnfh7fzJEKSu1+qXw9Rg5vx9S5tAtC2f57wF2JxjlodvaNvaeTK0yZjpOjwVZ4ZyRS5KNuh8QexPMV0tdMaxM2rnrdFU3PaDPNT2zUE2vz6NBkNwCNb7rhMQCGZGuU9T8b6/JAAMzmJudu2vgS3vFVuKbAohjECiWxK+gtVY5K6F4Z29PoOxNKAlHgvbkFYnCnSsXHruwTsjvmBWC95u/uzDwJLJsS6S9qCYnKHXUq4knIaD67LIqSrgDeel/LQBi0/FrZCrptG2hiz1bIb6VibQctTlYEIoKNfShYila/f5qXiQNkdeXF/38CBl2tsxMUBcQGLnZiSsxx4703O+kDxX+l3C2Y4MXdyWYPzFEXVVwXN5fXBBgmCjBiUYSyP1uq/nocUpSOo56I1MrIf/KZFbeCb2MCppiwA4wfceTfplpiH0U1YVHbQ7KJW+gHS2DZKefMEoA1UabGIcDKEQyM2NAdOioqatOLwjUj2jE0D6tggfoQ2tnc01Tgq1T0eGlvRPmS1gbgmPFDyKUoIvj9ODyPycyQFePoJWVdJb7wcvliVzU8grpRcBSch2KZbKMkHDFYPEc8TXL+BrBDQXs8wXjP7jNtIGRh4a8+idWlj4605cFEr6uk0pGivV6jyRK4xKwiMKB5J7I0VSWSL9+dRfXQcOdah2E+sWTJUxQ== gitlab-runner@xxx08-vh-test-gitlab2.vas-server.cz

Tento klíč si uložíme do poznámkového bloku, protože se nám bude za chvilku hodit.

Mezitím se STÁLE pod uživatelem gitlab-runner přihlásíme na ssh pod uživatele deploy.

ssh deploy@xxx11.vas-server.cz

Zeptá se vás to pouze napoprvé, jestli chcete tomuto serveru důvěřovat a napíšete: yes

Můžeme si otevřít další terminal či se přihlásit zpět na roota a následně se přihlásíme pod uživatele “deploy”.

su deploy

A musíme se podívat, jestli uživatel deploy má vytvořenou složku /.ssh.

cd ~

ls -a

Pokud složku .ssh neuvidíme, tak pokračujeme příkazem

mkdir .ssh

cd .ssh

touch authorized_keys

Poslední příkaz vytvoří soubor, kam se následně vkládají SSH klíče.

Poté pod rootem je třeba vložit SSH klíč tímto příkazem pod uživatele deploy. (Vyměňte za svůj SSH klíč)

echo "from="46.234.108.7,gitlab.vasedomena.com",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa  AAAAB3NzaC1yc2EAAAADAQABAAACAQClpCnfh7fzJEKSu1+qXw9Rg5vx9S5tAtC2f57wF2JxjlodvaNvaeTK0yZjpOjwVZ4ZyRS5KNuh8QexPMV0tdMaxM2rnrdFU3PaDPNT2zUE2vz6NBkNwCNb7rhMQCGZGuU9T8b6/JAAAbmJudu2vgS3vFVuKbAohjECiWxK+gtVY5K6F4Z29PoOxNKAlHgvbkFYnCnSsXHruwTsjvmBWC95u/uzDwJLJsS6S9qCYnKHXUq4knIaD67LIqSrgDeel/LQBi0/FrZCrptG2hiz1bIb6VibQctTlYEIoKNfShYila/f5qXiQNkdeXF/38CBl2tsxMUBcQGLnZiSsxx4703O+kDxX+l3C2Y4MXdyWYPzFEXVVwXN5fXBBgmC jBiUYSyP1uq/nocUpSOo56I1MrIf/KZFbeCb2MCppiwA4wfceTfplpiH0U1YVHbQ7KJW+gHS2DZKefMEoA1UabGIcDKEQyM2NAdOioqatOLwjUj2jE0D6tggfoQ2tnc01Tgq1T0eGlvRPmS1gbgmPFDyKUoIvj9ODyPycyQFePoJWVdJb7wcvliVzU8grpRcBSch2KZbKMkHDFYPEc8TXL+BrBDQXs8wXjP7jNtIGRh4a8+idWlj4605cFEr6uk0pGivV6jyRK4xKwiMKB5J7I0VSWSL9+dRfXQcOdah2E+sWTJUxQ== gitlab-runner@xxx08-vh-test-gitlab2.vas-server.cz ~deploy/.ssh/authorized_keys

Pokud vše proběhlo úspěšně, tak se můžete zpátky přihlásit pod uživatele “deploy” a podívat se jestli se klíč v pořádku vložil.

cat  ~/.ssh/authorized_keys

Nadále rsync potřebuje, aby uživatel deploy mohl spouštět “sudo” bez nutnosti zadávat heslo. Na to nám stačí 2 příkazy, které musíme spustit pod rootem.

echo "deploy  ALL=(root) NOPASSWD:/usr/bin/rsync,/usr/sbin/nginx

deploy    ALL=(www-data) NOPASSWD:ALL" > /etc/sudoers.d/deploy
chmod 0440 /etc/sudoers.d/deploy

Po těchto příkazech nám deploy začne fungovat!

Stačí jít do jakéhokoliv souboru a po kliknutí na edit udělat nějakou změnu. Klidně jenom přidat řádek navíc a po kliknutí na “Commit changes” se spustí uploadování změn.

Úprava souboru ve Web IDE

Následně v sekci CI / CD > Pipelines uvidíte veškeré změny, které proběhly a vždy chceme vidět zelenou fajfku na znamení, že je všechno v pořádku.

Úspěšný upload změn na produkční i develovou verzi

Doporučujeme se poté připojit na FTP a zkontrolovat, že se soubor nahrál do složky na produkční i develovou verzi, jak je specifikováno v konfiguračním souboru(.gitlab-ci.yml). Vyzkoušejte i jestli GitLab správně ignoroval složky nebo soubory, které jste do souboru .deploy_ignore nastavili.

Zůstaňte s námi v kontaktu

Jednou za měsíc posíláme souhrn novinek. Nemusíte se bát, spam neposíláme a odhlásit se můžete kdykoliv...

Karel Dytrych
Tým Váš Hosting
Vyzkoušejte náš trial na týden zdarma

Garance 14denní záruky vrácení peněz

Vyzkoušejte server na týden zdarma

Vyzkoušet server