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

Jak nastavit automatický deploy aplikací pomocí Gitlabu?

Váš Hosting
Váš Hosting 4. 6. 2019 - 7 min. čtení
Blog

Vítejte u pokračování z původního článku: Jak nainstalovat GitLab. Dneska se podíváme na důležitější část, a to je nastavení deploye na produkční a testovací server.

Jestli GitLab ještě nemáte nainstalovaný, můžete si objednat náš server na týden zdarma a všechno si vyzkoušet. Doporučujeme min. konfiguraci VPS Basic.

Obsah

Základní nastavení

Instalace GitLab runneru

Nastavení SSH klíče

Pokud instalace proběhla úspěšně a nastavili jste si heslo, tak po přihlášení pod loginem root uvidíte uvítací stránku.

První přihlášení do GitLabu

VPS Centrum

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

Základní nastavení

První krok je vytvoření vlastního projektů. Můžete založit úplně nový (náš případ) nebo nějaký projekt naklonovat či importovat.

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.

Pozor! Jeden ze čtenářů nás upozornil, že při vytvoření uživatele se vytvořil v jeho domovské složce soubor .bash_logout. Ten způsoboval chybu v deploy „ERROR: Job failed (system failure): prepare environment: exit status 1“ 

Podle dokumentace soubor smazal, a vše začalo fungovat.

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: "erm07.vas-server.cz"

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

  DEVELOP_SERVER: "erm07.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

Instalace GitLab runneru

Důležitou součástí GitLabu jsou tzv. gitlab-runnery, kteří se dají popsat jako nonstop běžící  deamon, který čeká, co mu dáte za úkol a je zodpovědný za slavné “pushování”. 🙂

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.

Oficiální návod pro registraci runneru v ENG.

Přidáme gitlab-runner do oficiálního repozitáře:

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

Pak nainstalujeme runner příkazem:

sudo apt-get install gitlab-runner

Začneme s registrací

sudo gitlab-runner register

Pak instalace bude chtít URL na které běží instance gitlabu

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com)

 https://gitlab.vas-hosting.cz

V dalším kroku je nutné vložit tzv. registration token runneru, který najdete v administraci Admin Area > Runners.

Token, který můžete zkopírovat z administrace

Ve 4. kroku můžete popsat svůj runner. Později můžete v administraci hostname změnit.

Please enter the gitlab-ci description for this runner

 [hostame] first-runner

5. krok je VELICE důležitý. V našem souboru .gitlab-ci.yml máme uvedeno, že deploy provádí runner, který má tag: deploy. V administraci můžete tag později změnit.

Please enter the gitlab-ci tags for this runner (comma separated):

 deploy

V posledním kroku zvolíme tzv. “Runner executor”. Na výběr máme:

Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:

shell

My pro naše potřeby zvolíme shell. Můžete se podívat i na srovnávací tabulku, kde jsou jednotlivé výhody popsané.

A je to! Úspěšně jsme registrovali prvního runnera. 🙂

Dále máme v souboru .gitlab-ci.yml specifikovaného uživatele “deploy”, kterého musíme nyní vytvořit.

useradd -m -s /bin/bash deploy

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. Už naposledy. 🙂

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

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

2.

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 zkontrolvoat, že se soubory nahráli do složek 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.

Pokud se vám povedl GitLab rozchodit, tak vám velice gratulujeme! Není to žádná procházka růžovou zahradou. 🙂

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