Redeploy Docker stacků pomocí CircleCI a Swarmpitu
|
V TopMonks máme značnou část služeb hostovaných v našem Docker Swarm prostředí zvaném TMCloud. Na menežování Swarmu používáme naše skvělé Docker Swarm management UI Swarmpit a na Continuous Integration pro změnu CircleCI.
Ačkoliv Swarmpit poskytuje pohodlný způsob editace stacků, je dobrou DevOps praxí mít stacky verzované ve VCS v podobě docker-compose.yml
nebo jiné IaC alternativy. A aby bylo VCS opravdu zdrojem pravdy, je dobré v rámci Continuous Delivery nebo Continuous Deployment pushovat definici stacků po každém úspěšném buildu nebo zmáčknutí tlačítka pro nasazení.
Swarmpit poskytuje na úrovni jednotlivých služeb fukcionalitu zvanou Autoredeploy. Pokud ji máte zapnutou, stačí docker push
do stejného tagu a swarmpit automaticky nasadí aktualizovanou verzi. To je hezká feature, která celkem usnadňuje Continuous Deployment a vede k cheatování na úrovni stacků.
Proto jsem vytvořil CircleCI Orb topmonks/swarmpit, který umožňuje pohodlně redeployovat celé stacky přímo z integrační pipeline. (Je dobré vypnout Autoredeploy, s tímto Orbem by mohl dělat problémy.) Orb využívá Swarmpit API a několik řádků shellového scriptu.
Zjednodušená ukázka použití Swarmpit Orbu může vypadat nějak tak:
version: 2.1
orbs:
docker: circleci/docker@1.4.0
swarmpit: topmonks/swarmpit@1.2.0
jobs:
# ...
workflows:
build_and_deploy:
jobs:
# ...
- docker/publish:
name: publish-container
context: org-docker
image: topmonks/insight
tag: latest
- swarmpit/deploy:
name: deploy-to-swarm
stack_name: insight
compose_file_path: docker-compose.prod.yml
context: org-swarmpit-prod
requires:
- publish-container
Pro přehlednost vynechávám všechny joby, které aplikaci sestaví a otestují. Soustředím se jen na poslední krok samotného deploye stacku. Použijeme Orb pro práci s Dockerem pro přihlášení do Docker Hubu a push nového image tamtéž. Následně použijem Swarmpit Orb pro deploy stacku.
Samotný job má aktuálně 4 parametry – z nichž povinný je jen stack_name
. Parametr compose_file_path
je potřeba zadat, jen pokud se váš stack file nejmenuje docker-compose.yml
.
Parametry swarmpit_api_url
a swarmpit_api_key
slouží k určení, kde běží Swarmpit API a jak se k němu autorizovat. Je dobrou praxí mít tyto informace uložené v kontextu, který nastavuje ENV proměnné vybranému jobu. Proto je jejich výchozí hodnotou reference na ENV proměnnou stejného názvu.
Adresa API je rootová adresa, kde vám bězí Swarmpit, s postfixem /api
(např. https://swarmpit.my.cloud/api
).
API Key si vygenerujete ve Swarmpitu v Account managementu (/#/account-management
).
Doufejme, že tato nenápadná věc pomůže lepší kultuře udržování infrastrukturního kódu – hezky verzovaného společně s tím aplikačním. Samozřejmě není použití omezeno pouze na CircleCI, vytvořený script můžete modifikovat a používat dle libosti. Nakonec je to jen ošablonkovaný shell script.