GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak používat Rsync a SSH v Dockerized GitLab CI Pipeline

rsync je populární nástroj pro synchronizaci souborů, který používá účinný algoritmus k minimalizaci spotřeby šířky pásma. Jednou z běžných rolí rsync je nasazení webové stránky na vzdálený produkční server. Zde je návod, jak zkombinovat všestrannost rsync s automatizací poskytovanou GitLab CI pipelines.

Vykonavatelé potrubí

GitLab CI podporuje několik typů pipeline exekutorů. Ty definují prostředí, ve kterém bude vaše úloha probíhat. shell executor je výchozí a běží na holém počítači na hostitelském počítači. Umožňuje vašim kanálům používat jakýkoli příkaz dostupný na hostiteli bez další konfigurace. Protože se většina populárních linuxových distribucí dodává s nainstalovaným nástrojem rsync, lze tento přístup snadno zvládnout.

Bohužel, shell exekutor neposkytuje silnou izolaci a může časem znečišťovat prostředí vašeho hostitele. Lepší alternativou je docker exekutor, který pro každou úlohu CI spustí nový kontejner Docker. Všechny úlohy běží v čistém prostředí, které nemůže ovlivnit hostitele.

Nevýhodou je, že základní obrázky Dockeru obecně neobsahují rsync nebo ssh . Dokonce i oficiální obrázky OS jako ubuntu:latest odesílat jako minimální sestavení bez těchto příkazů. Díky tomu je o něco složitější kanálový skript pro přidávání závislostí a rsync vaše soubory.

Zde je návod, jak přidat rsync do vašeho kanálu. Než budete pokračovat, ujistěte se, že máte k dispozici GitLab Runner založený na Dockeru. Budeme také předpokládat, že máte projekt GitLab, který je připraven k použití.

Příprava

Budete-li k připojení ke vzdálenému hostiteli SSH používat rsync, budete potřebovat pár klíčů SSH. Veřejné a soukromé klíče můžete vygenerovat spuštěním ssh-keygen -t rsa . Zkopírujte veřejný klíč na server, ke kterému se budete připojovat.

Dále zkopírujte vygenerovaný soukromý klíč do schránky:

cat ~/.ssh/id_rsa | xclip -selection c

Přejděte do svého projektu GitLab a klikněte na „Nastavení“ v dolní části levé navigační nabídky. Klikněte na položku „CI/CD“ v podnabídce. Na výsledné stránce přejděte dolů do sekce Proměnné.

Klikněte na modré tlačítko „Přidat proměnnou“. Do pole „Klíč“ zadejte název nové proměnné. Používáme SSH_PRIVATE_KEY . Vložte svůj soukromý klíč do pole „Value“ včetně úvodního ----BEGIN a koncové -----END řádky.

Přidáním klíče jako proměnné CI na něj budete později odkazovat ve svém kanálu. Bude přidán do agenta SSH v kontejnerech, které vytvoří váš kanál.

Přidání souboru kanálu

GitLab CI spouští úlohy založené na obsahu .gitlab-ci.yml soubor ve vašem úložišti. GitLab tento soubor automaticky najde a spustí kanál, který definuje, když do svých větví posíláte změny.

deploy:
  stage: deploy
  image: alpine:latest
  script:
    - rsync -atv --delete --progress ./ [email protected]:/var/www/html

Tento .gitlab-ci.yml obsahuje úlohu, která používá rsync pro synchronizaci obsahu pracovního adresáře do /var/www/html na example.com server. Používá alpine:latest Docker image jako prostředí sestavení. Potrubí aktuálně selže, protože rsync není součástí obrázku Alpine.

Instalace SSH a rsync

Alpine je dobrým základem pro tuto práci, protože je to lehký obraz s několika závislostmi. To snižuje využití sítě, zatímco GitLab stahuje obraz na začátku úlohy, čímž se zrychluje váš kanál. Aby rsync fungoval, přidejte do obrazu SSH a rsync a poté spusťte agenta SSH a zaregistrujte soukromý klíč, který jste vygenerovali dříve.

deploy:
  stage: deploy
  image: alpine:latest
  before_script:
    - apk update && apk add openssh-client rsync
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | ssh-add -
  script:
    - rsync -atv --delete --progress ./ [email protected]:/var/www/html

OpenSSH a rsync se instalují pomocí Alpine apk správce balíčků. Spustí se ověřovací agent SSH a váš soukromý klíč se přidá pomocí ssh-add . GitLab automaticky vkládá SSH_PRIVATE_KEY proměnná prostředí s hodnotou, kterou jste definovali v nastavení projektu. Pokud jste na obrazovce proměnných GitLab použili jiný klíč, ujistěte se, že jste odpovídajícím způsobem upravili svůj kanál.

Správa ověření hostitele

SSH interaktivně vyzve k potvrzení při prvním připojení k novému vzdálenému hostiteli. To není kompatibilní s prostředím CI, kde tyto výzvy neuvidíte ani na ně nebudete moci reagovat.

K řešení tohoto problému jsou k dispozici dvě možnosti:Zakázat přísné kontroly klíčů hostitele nebo svůj server předem zaregistrovat jako „známého“ hostitele.

Pro první možnost přidejte následující řádek do before_script vašeho kanálu :

- echo "Host *ntStrictHostKeyChecking no" >> ~/.ssh/config

I když to funguje, je to potenciální bezpečnostní riziko. Pokud by útočník získal kontrolu nad doménou nebo IP vašeho serveru, neměli byste žádné varování. Použití kontroly klíče hostitele vám umožní ověřit, že identita vzdáleného ovladače je taková, jakou očekáváte.

Vzdálené ovládání můžete přidat jako známého hostitele neinteraktivně tak, že se k němu připojíte na svém vlastním počítači mimo váš kanál. Zkontrolujte své ~/.ssh/known_hosts soubor a najděte řádek obsahující IP nebo název hostitele vzdáleného. Zkopírujte tento řádek a použijte postup z dříve k přidání nové proměnné GitLab CI. Pojmenujte tuto proměnnou SSH_HOST_KEY .

Nyní aktualizujte svůj before_script oddíl s následujícím řádkem:

- echo "$SSH_HOST_KEY" > ~/.ssh/known_hosts

Nyní se budete moci připojit k serveru, aniž byste obdrželi jakékoli potvrzovací výzvy. Vložte svůj kód do svého úložiště GitLab a sledujte, jak se vaše potrubí dokončuje.

Další vylepšení

Tento kanál je jednoduchým příkladem toho, jak začít s SSH a rsync v dockerizovaném prostředí. Existují příležitosti k dalšímu vylepšení systému zabalením přípravných kroků do vyhrazené fáze sestavení, která vytvoří obraz Dockeru, který můžete znovu použít mezi kanály.

Soubor .gitlab-ci.yml by také těžilo z většího využívání proměnných. Abstrahování názvu hostitele vzdáleného serveru (example.com ), adresář (/var/www/html ) a uživatel (user ) do proměnných GitLab CI by pomohly udržet soubor čistý, zabránily běžným repozitářům vidět podrobnosti o prostředí a umožnily by vám měnit hodnoty konfigurace bez úpravy souboru kanálu.

Přehled

Použití rsync v kanálech GitLab CI vyžaduje trochu ručního nastavení, aby se vytvořilo prostředí sestavení, které má potřebné závislosti. Musíte ručně vložit soukromý klíč SSH a zaregistrovat vzdálený server jako známého hostitele.

Ačkoli jsou k dispozici komunitní obrazy Dockeru, které dávají SSH a rsync na oblíbené základní obrazy, nakonec vám dávají menší kontrolu nad vaší sestavou. Rozšiřujete dodavatelský řetězec vašeho potrubí o obrázek, kterému nemůžete nutně věřit. Začněte základní bitovou kopií operačního systému a přidejte to, co potřebujete, pomůže vám mít důvěru ve vaše sestavy.


Docker
  1. Jak používat SSH Port Forwarding

  2. Jak a proč používat vzdáleného hostitele dockeru

  3. Jak nainstalovat a používat Docker Compose na CentOS

  1. Jak používat rsync k zálohování dat

  2. Jak používat rsync k vyloučení souborů a adresářů v přenosu dat

  3. Jak nainstalovat a používat SFTP na serverech Linux

  1. Co je příkaz SSH a jak používat SSH pro připojení ke vzdálenému serveru

  2. Jak používat Rsync

  3. Jak používat příkaz rsync ke kopírování dat lokálně a přes SSH