Il y a un peu plus d'un an, j'ai été confronté au fait que tout un département de développement web a grandi sur un projet interne d'une société totalement non-IT, que j'ai eu la chance de diriger. Le flux de travail semblait s'installer et convenait à tout le monde, mais des problÚmes persistaient:
- Chaque succursale a été vérifiée localement. J'ai dû faire reculer la base des modifications du contrÎle précédent, construire l'avant. Lorsque plusieurs développeurs étaient sur le point de terminer le travail et qu'il restait à vérifier chacune des petites choses, cela s'est transformé en enfer;
- Les environnements de production et entre les développeurs différaient, ce qui entraßnait des erreurs: «tout fonctionne pour moi».
Le perfectionniste intérieur voulait faire les choses correctement. Je partage les résultats de ma recherche d'une réponse à la question: "comment, en fait, est" correct ""?
Nous avons réalisé
- Déploiement facile et rapide en production (à titre expérimental, ils ont été affichés tous les jours pendant deux semaines consécutives);
- Une garantie de protection contre les erreurs dues aux différences dans l'environnement d'application;
- Nous pouvons organiser une interaction efficace avec le client:
- démontrer chaque branche de fonctionnalité;
- donnez aux invités l'accÚs pour créer des tùches et surveiller la progression du travail.
, :
- 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
:
""