Jak postavit moderní plynovod CI / CD

Používání bezplatných a hostovaných služeb

Vývojáři softwaru jsou řešiteli problémů. I když mohou být velmi vytrvalí při hledání řešení, v okamžiku, kdy mají řešení, které chtějí sdílet se světem; pocit přepravního kódu je skvělý. Kód, který není nikdy spuštěn pro uživatele, je pouze produkt digitálního odpadu. Aby se předešlo plýtvání, moderní vývojáři softwaru dodávají svým uživatelům funkčnost v krátkých iteracích a malých přírůstcích.

Způsob, jak dodávat kód v malých přírůstcích a iteracích, je pomocí plynovodu Continuous Integration and Continuous Deployment nebo CI / CD. V tomto tutoriálu projdeme všechny kroky k nastavení takového potrubí pomocí bezplatných a hostovaných služeb. Od začátku do konce vám tento tutoriál ukazuje, jak:

  1. Napište malý Python program (ne Hello World)
  2. Přidejte některé automatické testy programu
  3. Vložte svůj kód do GitHubu
  4. Nastavte Travis CI, aby průběžně spouštěl vaše automatické testy
  5. Nastavit lepší kódový rozbočovač pro nepřetržitou kontrolu kvality kódu
  6. Proměňte program Python v webovou aplikaci
  7. Vytvořte pro webovou aplikaci obrázek Docker
  8. Posuňte obrázek doku do doku Hub
  9. Nasadit obrázek Docker Heroku

Cílem tohoto tutoriálu je ukázat vám základní stavební kameny moderního softwarového vývojového potrubí a jak je sestavit. Nejedná se zejména o metodiku vývoje programovacího jazyka nebo softwaru. Možná, že některé ze stavebních bloků neodpovídají vašemu výběru technologií. I když je to váš případ, pořád vám doporučuji projít všechny kroky. Jakmile získáte základní znalosti o kompletním potrubním systému end-to-end, můžete jej snadno přizpůsobit vašim konkrétním potřebám.

Úplné zveřejnění: Jsem jedním z vývojářů týmu Better Code Hub.

Aktualizace srpen 2017: Eran Barlev z codefresh.io zveřejnil krátké video na LinkedIn, které demonstruje, jak může Codefresh nahradit některé ze stavebních bloků popsaných v tomto tutoriálu. Protože žádné dva softwarové produkty nejsou stejné, vývojové potrubí se může také lišit. Nezapomeňte se podívat na Eranovo video a podívat se na alternativní implementaci moderního plynovodu CI / CD.

Krok 1: Napište malý generátor buzzů

Potřebujeme malý kus softwaru, který bude cestovat ve všech fázích potrubí, od vašeho notebooku po cloud. V našem případě je tento software malý program generátoru buzzů CI / CD napsaný v Pythonu.

Vytvořte nový adresář (řekněme tomu říkáme „cicd-buzz“). V tomto adresáři vytvořte další adresář nazvaný „buzz“ a do tohoto adresáře uložte úryvek níže do souboru s názvem „generator.py“.

Ve stejném adresáři také vytvořte nový prázdný soubor s názvem __init__.py. Struktura vašeho projektu by nyní měla vypadat takto:

cicd-buzz /
  bzučet/
    __init__.py
    generator.py

Měli byste být schopni spustit tento skript Python z příkazového řádku v adresáři „buzz“:

[cicd-buzz / buzz] $ python generator.py
End-to-end devops enormně zvyšuje kontinuální testování

Zkuste to několikrát, je to zábava:

[cicd-buzz / buzz] $ python generator.py
Kompletní průběžné zlepšování enormně zlepšuje devops
[cicd-buzz / buzz] $ python generator.py
Moderní Devops pozoruhodně zlepšuje kontinuální testování

Krok 2: Přidejte automatické testy

Potrubí pro nepřetržité dodávky má smysl pouze v případě, že máte značné množství automatizovaných testů, které vám brání v nepřetržitém zasílání poškozeného softwaru. Chcete-li získat správnou sadu jednotkových testů pro náš generátor buzzů, vytvořte nový kořenový adresář s názvem „testy“ v kořenovém adresáři vašeho projektového adresáře a úryvek níže uložte do nového souboru v adresáři „testů“. Nazvěte tento soubor „test_generator.py“:

K provedení testů použijeme framework „pytest“. K instalaci pytestu použijeme virtuální prostředí Python („virtualenv“). Nebojte se, je to jednodušší, než bylo řečeno. Nejprve se ujistěte, že máte nainstalován virtualenv, abyste mohli v adresáři projektu provést následující příkaz:

[cicd-buzz] $ virtualenv venv

To by mělo vytvořit nový adresář venv. Chcete-li začít používat tento typ prostředí:

[cicd-buzz] $ source venv / bin / Activate
(venv) [cicd-buzz] $

Dále vytvořte nový soubor s názvem „requirements.txt“, který uvádí závislost pytest:

pytest == 3.0.6

Chcete-li stáhnout závislosti uvedené v souboru požadavků, musíte provést příkaz „pip“:

(venv) [cicd-buzz] $ pip install -r requirements.txt

Po dokončení všech výše uvedených kroků by kořen adresáře projektu měl vypadat takto:

cicd-buzz /
  bzučet/
  požadavky.txt
  testy /
  venv /

Ve virtuálním prostředí můžete nyní provádět testy jednotek v souboru „test_generator.py“:

(venv) [cicd-buzz] $ python -m pytest -v testy / test_generator.py

Výstup by měl vypadat asi takto:

========== Zahájí se testovací relace ===========
platforma darwin - Python 2.7.10, pytest-3.0.6, py-1.4.32, pluggy-0.4.0 - / Users / rob / projects / workspace / cicd-buzz / venv / bin / python
cachedir: .cache
rootdir: / Users / rob / projects / workspace / cicd-buzz, inifile:
shromážděno 3 položky
testy / test_generator.py :: test_sample_single_word PASSED
testy / test_generator.py :: test_sample_multiple_words PASSED
testy / test_generator.py :: test_generate_buzz_of_at_least_five_words PASSED
========== 3 uplynulo za 0,02 sekund ===========

Krok 3: Vložte kód na GitHub

Přihlaste se ke službě GitHub (nejprve si vytvořte účet, pokud jej ještě nemáte) a vytvořte nové veřejné úložiště s názvem „cicd-buzz“.

V adresáři projektu vytvořte nový soubor s názvem „.gitignore“ obsahující pouze jeden řádek:

venv

Tím zabráníte git v přidání virtuálního souboru do našeho repo. Nyní je čas inicializovat Git lokálně a poslat váš kód do GitHubu:

[cicd-buzz] $ git init
[cicd-buzz] $ git add *
[cicd-buzz] $ git commit -m "Počáteční potvrzení"
[cicd-buzz] $ git vzdálené přidání původu git@github.com:  /cicd-buzz.git
[cicd-buzz] $ git push -u zdrojový master

Pokud si poslední příkaz výše stěžuje na přístupová práva, ujistěte se, že jste do svého účtu GitHub přidali klíč SSH.

Krok 4: Připojte Travis CI ke spuštění testů při každém odevzdání

Travis CI je hostovaná služba pro práci na kontinuální integraci. Je to zdarma pro veřejné úložiště GitHub a získání účtu Travis CI je jen otázkou návštěvy https://travis-ci.org a přihlášení se pomocí vašich přihlašovacích údajů GitHub.

Povolení aplikace Travis CI zahájit sestavení v každém požadavku Push and Pull pro vaše úložiště je stejně snadné jako překlopení přepínače před úložiště cicd-buzz před GitHub (v případě, že úložiště ještě není vidět), klikněte na tlačítko „Účet synchronizace“):

Posledním krokem při aktivaci aplikace Travis CI je přidání souboru „.travis.yml“ do kořenového adresáře vašeho projektového adresáře. Pro náš generátor buzzů by tento soubor měl obsahovat:

jazyk: python
skript:
  - python -m pytest -v

Přidejte soubor do Gitu, poté potvrďte a zasuňte změny:

[cicd-buzz] $ git přidat .travis.yml
[cicd-buzz] $ git commit -m "Přidat konfiguraci Travis CI"
[cicd-buzz] $ git push

Přejděte na palubní desku Travis CI. Po krátké době by si měl Travis všimnout změn vašeho kódu a zahájit proces sestavování / testování. Výstupní protokol ukazuje provedení jednotkových testů:

Krok 5: Přidejte do svého kanálu lepší rozbočovač kódu

Nyní, když máme dobře naolejovaný plynovod, který průběžně kontroluje funkčnost našeho kódu automatizovanými testy, je pokušení zaměřit se na funkčnost a zapomenout na kvalitu. Better Code Hub je hostovaná platforma, která kontroluje kvalitu vašeho kódu podle 10 pokynů pro udržovatelný, budoucí kontrolní kód. Better Code Hub je hlídací pes, který průběžně monitoruje naši vývojovou práci (doslova každý tlak na GitHub) a upozorní vás, když je kvalita ohrožena.

Better Code Hub je stejně jako Travis CI služba, která se bez problémů integruje do GitHubu. Chcete-li jej připojit k našemu repo, přejděte na https://bettercodehub.com a vyberte přihlašovací tlačítko s nápisem Zdarma.

Po přihlášení pomocí přihlašovacích údajů ke GitHubu se na následující stránce zobrazí seznam všech vašich úložišť GitHub. Najděte úložiště s názvem „cicd-buzz“ a stiskněte tlačítko Přehrát. Better Code Hub se poté zeptá, zda je v pořádku provést analýzu s výchozí konfigurací. Klikněte na tlačítko „Přejít“ a počkejte několik sekund. Zpráva o analýze by nyní měla být na obrazovce.

Zpráva o horní části analýzy v nástroji Better Code Hub

Pokud si přejete, aby se na vašem repo běhu spustil Better Code Hub pro všechny Push and Pull Request (stejně jako Travis CI), přepněte ikonu pull-request, která se zobrazí v levé dolní části repo karty:

Automatická analýza Push / PR je nyní povolena

Krok 6: Proměňte generátor buzzů v jednoduchou webovou aplikaci

Dobrá práce! Již máte kontinuální integrační potrubí, které v tomto okamžiku kontroluje funkčnost a kvalitu. Dalším krokem je nepřetržité nasazení softwaru, kdykoli proběhnou všechny testy.

Protože nasadíme software do Heroku jako webovou aplikaci, musíme nejprve napsat malý obal Python Flask kolem našeho generátoru buzzů, aby program reagoval na požadavky HTTP a výstupní HTML. Přidejte níže uvedený kód do souboru s názvem „app.py“ v kořenovém adresáři vašeho projektového adresáře:

Do rámce souboru „requirements.txt“ také přidejte další řádek pro rámec Flask:

pytest == 3.0.6
Baňka = 0,12

A nainstalujte novou závislost:

(venv) [cicd-buzz] $ pip install -r requirements.txt

Nyní můžete na svém notebooku spustit webovou aplikaci:

[cicd-buzz] $ python app.py
* Běží na http://0.0.0.0:5000/ (Stisknutím kláves CTRL + C ukončete)

Otevřete v prohlížeči umístění http: // localhost: 5000 a obdivujte svůj úspěch. Zasáhnout párkrát, jen pro zábavu.

Nakonec nezapomeňte přidat svůj závazek a provést změny:

[cicd-buzz] $ git add app.py
[cicd-buzz] $ git přidat požadavky.txt
[cicd-buzz] $ git commit -m "Krok 6"
[cicd-buzz] $ git push

A užijte si sledování Travis CI a Better Code Hub, který zvedá tento tlak!

Krok 7: Kontejnerizujte svou webovou aplikaci pomocí ukotvitelného panelu

Docker použijeme k vytvoření jediné samostatné implementovatelné jednotky naší webové aplikace. Pro jednoduchou aplikaci Python Flask to může vypadat jako spousta režijních nákladů, ale nasazení různých verzí vaší kódové základny jako malé samostatné jednotky má mnoho výhod, když váš systém v průběhu času roste.

Za předpokladu, že je Docker nainstalován a spuštěn, přidejte do nového souboru s názvem „Dockerfile“ v kořenovém adresáři vašeho projektu následující:

Výše uvedené říká ukotviteli, aby vybral obrázek alpské základny, nainstaloval Python a pip a také nainstaloval naši webovou aplikaci. Poslední řádek říká ukotvitelnému při spuštění webové aplikace při každém spuštění kontejneru.

Měli byste být schopni vytvořit obrázek této konfigurace Docker a spustit jej (v závislosti na konfiguraci operačního systému budete možná muset umístit sudo před příkazy níže):

[cicd-buzz] $ docker build -t cicd-buzz.
[cicd-buzz] $ docker run -p 5000: 5000 - rm -it cicd-buzz

Výsledek můžete obdivovat v prohlížeči:

Generátor buzzů CI / CD spuštěný v místním kontejneru Docker

Nezapomeňte přidat svůj závazek a provést změny:

[cicd-buzz] $ git přidat Dockerfile
[cicd-buzz] $ git commit -m "Krok 7"
[cicd-buzz] $ git push

Krok 8: Nasazení do Docker Hubu

Nasazení kontejnerů do centrálního registru obrázků Docker, například Docker Hub, usnadňuje sdílení kontejnerů v různých prostředích nebo návrat k předchozí verzi. Chcete-li tento krok dokončit, musíte se zaregistrovat na adrese https://docker.com a do souboru s názvem „deploy_dockerhub.sh“ v novém adresáři nazvaném „.travis“ v adresáři projektu přidat následující položky:

Výše uvedený skript zavolá Travis CI na konci každé výstavby potrubí a vytvoří pro tuto sestavení potrubí nový rozmístitelný obrázek Docker. Skript vyžaduje 3 proměnné prostředí, které můžete nastavit v zobrazení „nastavení“ vašeho reprosoustavy cicd-buzz na Travis CI:

Proměnné prostředí Travis CI pro Docker

Chcete-li, aby aplikace Travis CI nasadila váš obrázek Docker do Docker Hubu pro každý kód vložený do úložiště GitHub, upravte svůj soubor „.travis.yml“ tak, aby vypadal takto:

Po potvrzení a provedení těchto změn (a po čekání, než Travis CI dokončí celý plynovod), byste měli být schopni spustit svůj obrázek Docker přímo z Docker Hub:

[cicd-buzz] $ docker run -p5000: 5000 - rm -it  / cicd-buzz: nejnovější

Krok 9: Nasadit Heroku

Heroku je cloudová platforma pro hostování malých a škálovatelných webových aplikací. Nabízí bezplatný plán, přejděte na https://signup.heroku.com a zaregistrujte se, pokud jste tak již neučinili.

Nainstalujte nástrojový řádek příkazového řádku Heroku az kořene adresáře projektu spusťte následující příkazy:

[cicd-buzz] $ přihlášení heroku
[cicd-buzz] $ heroku vytvořit
Vytváření aplikace… hotovo, ⬢ fathomless-vstupu-53225
https://fathomless-inlet-53225.herokuapp.com/ | https://git.heroku.com/fathomless-inlet-53225.git
[cicd-buzz] $ heroku pluginy: install @ heroku-cli / plugin-container-registry
[cicd-buzz] $ heroku kontejner: přihlášení
[cicd-buzz] $ heroku kontejner: push web
[cicd-buzz] $ heroku kontejner: uvolněte web

Po těchto příkazech byste měli mít přístup k aplikaci na adrese URL hlášené příkazem heroku create (nebo alternativně spustit $ heroku open).

Generátor buzzů CI / CD běží na Heroku

Všimněte si, že kontejner Heroku: příkaz push web, posune stejný kontejner na platformu Heroku, jako jste se dostali do registru Docker Hub.

Chcete-li automatizovat proces nasazení každého sestavení hlavní větve našeho projektu, přidejte do souboru s názvem „deploy_heroku.sh“ v adresáři „.travis“ následující text:

Do souboru „.travis.yml“ přidejte také následující řádek:

after_success:
  - sh .travis / deploy_dockerhub.sh
  - test "$ TRAVIS_BRANCH" = "master" && sh .travis / deploy_heroku.sh

A konečně přidejte do svého repo na Travis CI další 2 proměnné prostředí. Klíč API Heroku najdete pod Heroku „Nastavení účtu“. Název aplikace Heroku je název hlášený příkazem Heroku create.

Potvrdit a poslat tyto změny do GitHubu. Po úspěšném sestavení by nyní měl být nový obrázek Docker přesunut do Docker Hub i Heroku.

Krok 10: CI / CD FTW!

Nyní, když máme zřízen moderní vývojový plynovod, začíná zábava zábavních funkcí v krátkých iteracích a malých přírůstcích. Řekněme, že chceme přistání trochu zatraktivnit. Typický pracovní postup, který to vypadá, vypadá takto:

  1. Začněte vytvořením nového vydání funkce: https://github.com/robvanderleek/cicd-buzz/issues/1
  2. Vytvořte větev funkce Git pro tento lístek: https://github.com/robvanderleek/cicd-buzz/tree/issue-1
  3. * Zde se stane kódovací magie *
  4. Sledujte zpětnou vazbu od Travis CI a Better Code Hub: https://github.com/robvanderleek/cicd-buzz/commits/issue-1
  5. Zkontrolujte běžící instanci své aplikace lokálním spuštěním nejnovějšího obrazu Docker: docker run --rm -p5000: 5000 -it robvanderleek / cicd-buzz: issue-1 Tento kontejner můžete také sdílet s ostatními.
  6. Pokud jste s novou funkcí spokojeni, otevřete požadavek Pull a váš kód je připraven k odeslání potrubím CI / CD do výroby: https://github.com/robvanderleek/cicd-buzz/pull/2
Větev generátoru buzzů CI / CD běží v místním kontejneru Docker

Šťastný kódování a doprava!