Vor etwas mehr als einem Jahr war ich mit der Tatsache konfrontiert, dass eine gesamte Webentwicklungsabteilung auf einem internen Projekt eines vollständig nicht-IT-Unternehmens aufgewachsen ist, das ich leiten durfte. Der Workflow schien sich zu beruhigen und war für alle in Ordnung, aber es blieben Probleme:
- Jeder Zweig wurde lokal überprüft. Ich musste die Basis von den Änderungen aus der vorherigen Prüfung zurückrollen, die Front bauen. Als mehrere Entwickler die Arbeit beenden wollten und jeder einzelne im Detail überprüft werden musste, wurde es zur Hölle.
- Die Umgebungen in der Produktion und zwischen den Entwicklern waren unterschiedlich, was zu Fehlern führte: „Alles funktioniert für mich“.
Der innere Perfektionist sehnte sich danach, alles richtig zu organisieren. Ich teile die Ergebnisse meiner Suche nach einer Antwort auf die Frage: "Wie ist" richtig "?"
Wir haben erreicht
- Einfache und schnelle Bereitstellung in der Produktion (aus VersuchsgrĂĽnden wurden sie zwei Wochen hintereinander jeden Tag angezeigt);
- Eine Garantie fĂĽr den Schutz vor Fehlern aufgrund von Unterschieden in der Anwendungsumgebung;
- Wir können eine effektive Interaktion mit dem Kunden organisieren:
- Demonstrieren Sie jeden Feature-Zweig.
- Geben Sie dem Gast Zugriff, um Aufgaben zu erstellen und den Arbeitsfortschritt zu ĂĽberwachen.
, :
- IT- ;
- (workflow);
- , ;
- DevOps, CI/CD, , , .
- ;
- ;
- : -;
- , .
:
- ;
- ;
- -.
,
, , . -, , , (- DevOps).
, , : “, , ?”.
“” , . , . , . .
, , , . , , “best practices”. -.
, , , , -.
, .
:
- - . , ;
- , , ;
- , git, Linux, Docker, GitLab, Traefik.
1. git
A successful Git branching model by Vincent Driessen
— : master, dev feature.
Feature
feature- / , dev-. , dev.
Dev
dev , master.
Master
production-. , , hotfix-, .
Master dev , .
2. . .
. feature , . “, xxx” , , . Merge Request- . wiki , .
, - — .
GitLab, , .
3.
— , . , //.
, IT- , DevOps. . . , . - (LXC), Docker, ...
, . , , . , . , - , . , , , .
, , , , , — . , .
, , . ( ) , , , , , . . , , “ ”. .
/
, - , . , , . . , .
UI/UX
, . ( Microsoft, ).
. . .
, , , , . .
. - .
: , , .., .
(QA / QC)
Quality Control (QC) . , . Quality Assurance (QA) , ( Toyota — ). , docker-, , .
(DevOps)
, . , .
workflow
- - (feature) , . .
- . . . , .
- , ( ), , , . — .
- feature- dev , , . , feature-, . , .
: , , , . , , , merge-request.
- merge-request dev-, , feature-.
- , . — -, , .
- feature- dev.
- , dev- merge-request master 5, 6 .
- 7, .
- , ( changelog-), . .
- , production.
- . .
:
- production-ready
- ( )
- 3 [Production], [Staging] [Services]. , , . /. , [Production] . [Services] GitLab (, docker registry: Portainer, ELK, Harbor, etc), Services. . Docker-. GitLab , .
- Traefik DNS-
*.dev.company.ru
, [Staging] TCP . SSL [Production]. Wildcard (WC)*dev.company.ru
letsencrypt-dns, DNS- Traefik. Traefik , SSL http . [Production] App. - GitLab [Services] GitLab-runner-, , Merge Request- () dev master, - [Staging] [Production] .gitlab-ci.yml .
- , [Staging].
- GitLab Docker Registry, .
- GitLab, Traefik Gitlab-runner- docker-, .
github-, . , :
https://github.com/Akkarine/demo_cicd
- , . . , Enterprise Traefik GitLab .
- , . , , , ..
- , Traefik GitLab . , Traefik DNS Yandex ( ) . GitLab . , rules.
- “ ”.
-
https://github.com/Akkarine/demo_cicd_project
-, , :
- . downtime ( API , ), load-balancer- , — — kubernetes. “ ”
- ( )
- production- ( , )
- root ( )
— .gitlab-ci.yml. pipeline- :
- base-img-rebuild
- rebuild-base-backend
. — , , . ( build), .
- rebuild-base-backend
- rebuild-dev-db
- rebuild-dev-db
, .
- rebuild-dev-db
- build
- rebuild-proxy-img
- nginx , latest - build-backend
, ( GitLab)
- rebuild-proxy-img
- test
- testing
- testing
- deploy-review
- deploy_review
, production, , .
- deploy_review
- skip_review
, , . - review
- approve-dev
. Merge-request dev (.. — feature), . . - approve-staging
. Merge-request master (.. — hotfix dev ), build latest . , latest , — . - reject
. . Merge Request- , - . - stop_review
, . .
- approve-dev
- rebuild-approved-db-img
- rebuild-approved-db-img
review , latest .
- rebuild-approved-db-img
- deploy-prod
- deploy-production
latest. , . - deploy-production-wo-containers
, , .
- deploy-production
- clear
staging production
- clean-staging
- clean-prod
- restore-db
- restore-db
— .
- restore-db
, . — , . , .
Traefik
reverse proxy + SSL nginx
- https://habr.com/ru/post/328048/
- https://habr.com/ru/post/445448/
- https://github.com/jwilder/nginx-proxy
- https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion
GitLab
GitLab SSL config
- https://docs.gitlab.com/omnibus/settings/ssl.html
- reverse-proxy https://docs.gitlab.com/omnibus/settings/nginx.html#supporting-proxied-ssl
GitLab Registry
- https://docs.gitlab.com/ce/administration/container_registry.html#configure-container-registry-under-its-own-domain
- : https://docs.gitlab.com/omnibus/maintenance/#container-registry-garbage-collection
Gitlab-runner
- https://docs.gitlab.com/runner/install/docker.html
- Docker Executor https://docs.gitlab.com/runner/executors/docker.html
- SSH Executor https://docs.gitlab.com/runner/executors/ssh.html
- https://docs.gitlab.com/runner/register/index.html#docker
- Docker GitLab CI/CD https://docs.gitlab.com/ce/ci/docker/using_docker_build.html
- Docker Docker priveleged mode registry
( ) https://docs.gitlab.com/ce/ci/docker/using_kaniko.html - https://docs.gitlab.com/runner/configuration/advanced-configuration.html
- CLI https://docs.gitlab.com/runner/commands/README.html
Docker
- https://docs.docker.com/install/linux/linux-postinstall/
- docker-compose https://docs.docker.com/compose/reference/overview/
- https://docs.docker.com/compose/reference/config/
- Docker (TCP + TLS): https://docs.docker.com/engine/security/https/
-: https://github.com/wagoodman/dive
# docker ( ) sudo docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest gitlab/gitlab-runner:latest
SSL: https://ssl-config.mozilla.org/#server=traefik&server-version=2.1&config=intermediate
GitLab Shell Runner. docker-compose https://habr.com/ru/post/449910
:
""