Desarrollo web desde cero: una guía para equipos jóvenes sobre la construcción de una infraestructura y un proceso de desarrollo de CI / CD

Hace poco más de un año, me enfrenté al hecho de que todo un departamento de desarrollo web creció en un proyecto interno de una empresa completamente ajena a las TI, que tuve la oportunidad de liderar. El flujo de trabajo pareció estabilizarse y estaba bien para todos, pero persistieron los problemas:



  • Cada sucursal se revisó localmente. Tuve que revertir la base de los cambios de la verificación anterior, construir el frente. Cuando varios desarrolladores estaban a punto de terminar el trabajo y se dejó revisar cada uno en detalle, se convirtió en un infierno;
  • Los entornos en producción y entre los desarrolladores eran diferentes, lo que conducía a errores: “todo me funciona”.


El perfeccionista interior anhelaba organizar todo bien. Estoy compartiendo los resultados de mi búsqueda de una respuesta a la pregunta: "¿cómo, de hecho, es" correcto ""?



Hemos logrado



  • Implementación fácil y rápida en producción (por el simple hecho de experimentar, se mostraron todos los días durante dos semanas seguidas);
  • Una garantía de protección contra errores debidos a diferencias en el entorno de la aplicación;
  • Podemos organizar una interacción eficaz con el cliente:

    • demostrar cada rama de característica;
    • Dar acceso a invitados para crear tareas y monitorear el progreso del trabajo.


, :



  • 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



  1. - (feature) , . .
  2. . . . , .
  3. , ( ), , , . — .
  4. feature- dev , , . , feature-, . , .

    : , , , . , , , merge-request.

  5. merge-request dev-, , feature-.
  6. , . — -, , .
  7. feature- dev.
  8. , dev- merge-request master 5, 6 .
  9. 7, .
  10. , ( changelog-), . .
  11. , production.
  12. . .




:



  • production-ready
  • ( )


: Traefik, GitLab Docker.





  • 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-dev-db

    • rebuild-dev-db

      , .
  • build

    • rebuild-proxy-img

      - nginx , latest
    • build-backend

      , ( GitLab)
  • test

    • testing

  • deploy-review

    • deploy_review

      , production, , .
  • skip_review

    , , .
  • review

    • approve-dev

      . Merge-request dev (.. — feature), . .
    • approve-staging

      . Merge-request master (.. — hotfix dev ), build latest . , latest , — .
    • reject

      . . Merge Request- , - .
    • stop_review

      , . .
  • rebuild-approved-db-img

    • rebuild-approved-db-img

      review , latest .
  • deploy-prod

    • deploy-production

      latest. , .
    • deploy-production-wo-containers

      , , .
  • clear

    staging production

    • clean-staging
    • clean-prod
  • restore-db

    • restore-db

      — .


, . — , . , .







Traefik





reverse proxy + SSL nginx





GitLab





GitLab SSL config





GitLab Registry





Gitlab-runner





Docker










All Articles