منذ أكثر من عام بقليل ، واجهت حقيقة أن قسم تطوير الويب بأكمله نشأ في مشروع داخلي لشركة لا تعمل في مجال تكنولوجيا المعلومات تمامًا ، وكان لدي فرصة لقيادتها. يبدو أن سير العمل يستقر وكان جيدًا مع الجميع ، ولكن ظلت المشكلات قائمة:
- تم فحص كل فرع محليًا. اضطررت إلى التراجع عن القاعدة من التغييرات من الفحص السابق ، وبناء الجبهة. عندما كان العديد من المطورين على وشك الانتهاء من العمل وترك الأمر للتحقق من كل من الأشياء الصغيرة - تحول إلى جحيم ؛
- اختلفت البيئات على خط الإنتاج وبين المطورين ، مما أدى إلى حدوث أخطاء: "كل شيء يناسبني".
أراد الكمال الداخلي تصحيح الأمور. أشارك نتائج بحثي عن إجابة للسؤال: "كيف ، في الواقع ، هو" صحيح "؟
لقد حققنا
- نشر سهل وسريع في الإنتاج (من أجل التجربة ، تم عرضها كل يوم لمدة أسبوعين على التوالي) ؛
- ضمان الحماية من الأخطاء بسبب الاختلافات في بيئة التطبيق ؛
- يمكننا تنظيم تفاعل فعال مع العميل:
- إظهار كل فرع مميز ؛
- منح الضيف إمكانية الوصول لإنشاء المهام ومراقبة تقدم العمل.
ستكون هذه المقالة مفيدة إذا كنت:
- شركة تقنية معلومات ناشئة أو تواجه العمل الجماعي لأول مرة في مشروع كبير ؛
- تريد تحديث سير العمل القديم الخاص بك ؛
- البحث عن أفضل الممارسات وترغب في معرفة كيف يفعل الآخرون ؛
- غالبًا ما تصادف مقالات حول 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.ruletsencrypt-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
:
""