UNIVERSITÉ NATIONAL DU VIETNAM, HA NOI INSTITUT FRANCOPHONE INTERNATIONAL Spécialité : Réseaux et Systèmes Communicants Wilkenson CHARLES L’AUTOMATISATION DU PROCESSUS D’INTEGRATION DE CODES, DES TESTS ET DU DEPLOIEMENT POUR UNE ARCHITECTURE EN MICROSERVICES. TỰ DỘNG HOA QUY TRINH TICH HỢP LẬP MÃ, KIỂM THỬ VA TRIỂN KHAI CHO KIẾN TRUC MICROSERVICE MEMOIRE DE FIN D’ETUDE DE MASTER 2 EN INFORMATIQUE Sous la direction de : Dr. Vo Ngoc Thieu & Dr. Nguyen Hong Quang Hanoi Novembre 2023 UNIVERSITÉ NATIONAL DU VIETNAM, HA NOI INSTITUT FRANCOPHONE INTERNATIONAL Spécialité : Réseaux et Systèmes Communicants Wilkenson CHARLES L’AUTOMATISATION DU PROCESSUS D’INTEGRATION DE CODES, DES TESTS ET DU DEPLOIEMENT POUR UNE ARCHITECTURE EN MICROSERVICES. TỰ DỘNG HOA QUY TRINH TICH HỢP LẬP MÃ, KIỂM THỬ VA TRIỂN KHAI CHO KIẾN TRUC MICROSERVICE MEMOIRE DE FIN D’ETUDE DE MASTER 2 EN INFORMATIQUE Sous la direction de : Dr. Vo Ngoc Thieu & Dr. Nguyen Hong Quang Hanoi Novembre 2023 ATTESTATION SUR L’HONNEUR J’atteste sur l’honneur que ce mémoire a été réalisé par moi-même et que les données et les résultats qui y sont présentés sont exacts et n’ont jamais été publiés ailleurs. La source des informations citées dans ce mémoire a été bien précisée. LỜI CAM ÐOAN Tôi cam đoan đây là công trình nghiên cứu của riêng tôi. Các số liệu, kết quả nêu trong Luận văn là trung thực và chưa từng được ai công bố trong bất kỳ công trình nào khác. Các thông tin trích dẫn trong Luận văn đã được chỉ rõ nguồn gốc. Signature de l’Etudiant CHARLES Wilkenson Remerciements La réalisation de ce mémoire de Master de recherche a été possible grâce au concours de plusieurs personnes à qui je voudrais témoigner toute ma gratitude. Dans un premier temps, je voudrais exprimer toute ma reconnaissance aux directeurs de ce mémoire, Dr. Vo Ngoc Thieu et Dr. Nguyen Hong Quang pour leurs patiences, leurs disponibilités, leurs précieux conseils et leurs supervisions éclairées. L’enseignement de qualité dispensé par le Master « P23 RSC » a également su nourrir mes réflexions et a représenté une profonde satisfaction intellectuelle, merci donc aux enseignants-chercheurs. Je désire aussi remercier les professeurs de l’IFI, qui m’ont fourni les outils nécessaires à la réussite de mes études universitaires. Je voudrais enfin exprimer ma gratitude à mes proches et les remercier de m'avoir soutenu et encouragé financièrement et mentalement. i Résumé Ce document vise à présenter le travail effectué par Charles Wilkenson, dans le contexte du mémoire de master « L’automatisation du processus d’intégration de codes, des tests et du déploiement pour une architecture en microservices » promu et coordonné par FSOFT. Le stage a commencé par une étude des concepts considérés comme essentiels pour une meilleure compréhension du projet en lui-même. Cette étude a permis de poser une pierre angulaire sur laquelle le reste du stage s'est appuyé. Le reste du travail sera basé sur l'obtention d'une connaissance approfondie sur le fonctionnement des technologies "cloud-native", sur ce qu'est une architecture de microservices, des cultures de développement connues basées sur l'automatisation et de la manière dont elles peuvent être adoptées, et, enfin, comment l'observabilité des applications peut être obtenue lorsqu'elles sont en production. Ce modèle est couplé avec le pipeline CI/CD, qui constitue un pont entre cette infrastructure et les développeurs de logiciels, un pipeline qui automatise les tâches de construction (build), y compris les tests automatisés, l'analyse du code et la vérification des dépendances de manière cohérente et récurrente sans perte de qualité du logiciel. Avec cette base en place, ainsi que la culture de l'automatisation devenant d'automatisation au sein des équipes de développement, toutes les parties prenantes impliquées dans ce processus peuvent en récolter les fruits. Mots clés : Cloud, Microservices, DevOps, Intégration continue, Déploiement continue ii Abstract The purpose of this document is to present the work carried out by Charles Wilkenson, in the context of his master's thesis "Automating the code integration, testing and deployment process for a microservices architecture", promoted and coordinated by FSOFT. The internship began with a study of the concepts considered essential for a better understanding of the project itself. This study laid the cornerstone on which the rest of the internship was based. The rest of the internship's work would be based on gaining an in-depth knowledge of how cloud-native technologies work, what a microservices architecture is, known automation-based development cultures and how they can be adopted, and, finally, how observability of applications can be achieved when they are in production. This model is coupled with the CI/CD pipeline, which forms a bridge between this infrastructure and software developers, a pipeline that automates build tasks, including automated testing, code analysis and dependency checking, consistently and recurrently, without loss of software quality. With this foundation in place, and the culture of automation becoming automation within development teams, all stakeholders involved in the process can reap the rewards. Keywords : Cloud, Microservices, DevOps, Intégration continue, Déploiement continue iii Table des matières Chapitre 1 : Introduction générale.1 Présentation de l’entreprise FPT-SOFTWARE et l’équipe FHN.2 Contexte d’étude et problématique .3 Objectifs du stage. 3 Chapitre 2 : Définition et fonctionnement des termes essentiels pour une meilleur compréhension du sujet .1 Avantages du cloud computing.2 Différents types cloud computing.3 Différents services offerts par le cloud computing .1 Différentes façons dont les microservices communiquent .2 Types de communication des microservices .3 Comment les microservices communiquent-ils ? .4 Avantages de l'architecture microservices .4 Intégration Continue et Livraison Continue (CI/CD) .5 La stratégie de déploiement bleu-vert (blue-green deployment) . 20 Chapitre 3 : Etat de l’art .1 Démarche de l’étude comparative des outils DevOps.1 Outils de gestion de code source .5 Comparaison et synthèse.2 Outils de provisionnement d'infrastructure .3 Comparaison et synthèse.3 Outils de gestion de configuration et d’automatisation .5 Comparaison et synthèse.4 Outils d'intégration continue .4 Comparaison et synthèse.5 Outils de gestion de monitoring .3 Comparaison et synthèse.6 Service tiers pour la sauvegarde des informations (Third Party Secret Keepers).3 Comparaison et synthèse.7 Synthèse et choix .8 Etude de l’existant .2 Critique de l’existant . 39 Chapitre 4 : Solution proposée .1 Configuration de notre environnement local .2 La structure du projet .3 Provisionnement de l'infrastructure .1 Gestion d’identités et d’accès (IAM) .2 Création d’une paire de clés EC2 .3 Configuration de l’interface en ligne de commande (AWS CLI).4 Mise en place de la distribution CloudFront .5 Création d’une base de données PostgreSQL dans RDS .5 Mise en place du pipeline CICD.1 La phase de construction (build) .2 La phase de test .3 La phase d’analyse .4 La phase d’alerte .5 La phase d’infrastructure .6 La phase de déploiement .7 Phase Smoke test .8 Phase de promotion .9 La phase de nettoyage .1 Création d’une nouvelle instance EC2 .2 Installation et configuration de Prometheus .3 Configuration des alertes .4 Téléchargement de Prometheus AlertManager .5 Configuration du service Systemd du gestionnaire d'alerte .6 Configurer le gestionnaire d'alertes avec SMTP .7 Création des règles Prometheus .8 Configuration de Prometheus . 76 Conclusion et perspectives . 79 vi Tables des figures Figure 1 : Cloud Computing . 4 Figure 2 : Différents services du cloud computing . 6 Figure 3 : Cloud Computing Infrastructure as a code . 8 Figure 4 : Comparaison entre l’architecture Monolithique celle des microservices . 9 Figure 5 : L’architecture de DevOps . 15 Figure 6 : Pipeline CICD . 16 Figure 7 : l’environnement bleu . 17 Figure 8 : l’environnement bleu . 18 Figure 9 : Déploiement bleu-vert . 19 Figure 10 : Architecture du pipeline initial . 38 Figure 11 : Architecture proposée. 41 Figure 12 : Eléments composants de notre infrastructure dans AWS . 42 Figure 13 : Structure du code source du projet . 49 Figure 14 : Connexion à notre instance EC2 en utilisant SSH . 51 Figure 15 : Connexion à notre instance EC2 en utilisant SSH . 52 Figure 16 : Configuration AWS CLI . 53 Figure 17 : Ajout de la paire de clés EC2 dans CircleCI . 54 Figure 18 : L’empreinte générée après l’ajout de la paire de clés EC2 . 54 Figure 19 : Configuration automatique de la notification par courrier électronique . 57 Figure 20 : Echec de la tâche Ansible (build-backend) . 57 Figure 21 : Exemple de notification par courriel suite à l’échec de la tâche (build-backend) 58 Figure 22 : Commande Ansible permettant de détruire l’environnement . 59 Figure 23 : Présentation de la tâche Ansible ‘configuration-infrastructure’. 61 Figure 24 : La commande Ansible ‘revert-migration’ . 63 Figure 25 : Envoie le statut de la migration à un magasin clé-valeur tiers . 64 Figure 26 : Fichiers deploy-backend.yml et main. 66 Figure 27 : Pipeline d’intégration réussie . 69 Figure 28 : Fonctionnement de l’application . 72 Figure 30 : Temps de lecture du disque par seconde . 73 Figure 31: Quantité de mémoire disponible. 73 Figure 32 : Affichage de l’utilisation de l’unité centrale . 74 vii Figure 33 : Message d’alerte après l’arrêt de l’instance EC2 hébergeant le backend microservice . 77 viii Table des tableaux Tableau 1 : Symbologie . 21 Tableau 2 : Synthétisation de la comparaison des concurrents dans le domaine de gestion de codes sources . 25 Tableau 3 : Synthétise la comparaison des concurrents dans le domaine de provisionnement d’infrastructures . 28 Tableau 4 : Récapitulatif de comparaison des concurrents dans le domaine de gestionnaires de configuration . 32 Tableau 5 : Récapitulatif de comparaison des concurrents dans le domaine de gestionnaires de pipelines d’intégration. 34 Tableau 6 : Récapitulatif de comparaison des concurrents dans le domaine de la surveillance des applications . 36 Tableau 7 : Récapitulatif des choix . 38 Tableau 8 : Paramètres du serveur EC2. 71 ix Acronymes API – Application Programming Interface AWS – Amazon Web Services S3 – Simple Storage Service CD – Continuous Delivery CI – Continuous Integration HTTP – Hypertext Transfer Protocol HCL – HashiCorp Configuration Language IaaS – Infrastructure as a Service IaC – Infrastructure as Code IT – Information Technology JSON – JavaScript Object Notation PaaS – Platform as a Service SaaS – Software as a Service VCS – Version Control System YAML – Yet Another Markup Language SOAP – Simple Object Access Protocol REST – Representation State Transfert Protocol CORBA – Common Object Request Broker Architecture DSL – Domain-Specific Language x Organisation du manuscrit Lorsque vous éffectuez des travaux scientifiques, vous devez déterminer les objectifs et les résultats attendus ainsi que le plan de travail au début des travaux. Pour cela, il est nécessaire de définir le plan du document. Fournir un schéma clair du travail effectué, l’état d’avancement est divisé en différents chapitres, comme suit : - Le premier chapitre fait l’introduction générale, présente l’entreprise d’accueil, présente le contexte de l’étude et motivation. - Le deuxième chapitre est consacré sur la spécification des technologies - Le troisième chapitre est consacré sur l’état de l’art, Etude comparative des outils DevOps. - Le quatrième chapitre présente la description de la solution proposée. - Le cinquième chapitre se concentre sur l’implémentation de la solution proposée. - Et enfin la dernière partie va être consacrée pour la conclusion, la proposition des perspectives d’avenir. xi Chapitre 1 : Introduction générale L'avènement du Cloud Computing a entraîné d'énormes changements dans la façon dont les logiciels sont développés et distribués. Il n’est plus possible de patienter pendant six mois pour enfin livrer un logiciel. Une approche consiste à fréquemment publier de petites mises à jour associée à l'automatisation (entre autres pour les builds, la création de l'environnement et les tests) réduit le délai entre le développement et la publication, tout en rassurant sur la qualité du produit. Pour y arriver il faut une parfaite collaboration entre les équipes de développement et d’exploitation deux équipes traditionnellement et dont les objectifs sont contradictoires. Les développeurs veulent être en mesure de publier rapidement de nouvelles fonctionnalités et des corrections de bugs afin de fournir de la valeur aux utilisateurs dès que possible.
Tổng quan nghiên cứu
Trong bối cảnh chuyển đổi số và phát triển phần mềm hiện đại, việc rút ngắn thời gian đưa sản phẩm ra thị trường đồng thời đảm bảo chất lượng là thách thức lớn đối với các doanh nghiệp công nghệ. Theo ước tính, hơn 70% các tổ chức phần mềm đang áp dụng các phương pháp phát triển dựa trên tự động hóa để nâng cao hiệu quả và giảm thiểu lỗi phát sinh trong quá trình phát triển. Luận văn thạc sĩ này tập trung vào việc tự động hóa quy trình tích hợp mã nguồn, kiểm thử và triển khai cho kiến trúc microservices, một mô hình kiến trúc phần mềm đang được ứng dụng rộng rãi nhờ tính linh hoạt và khả năng mở rộng cao.
Mục tiêu nghiên cứu là xây dựng một pipeline CI/CD (Continuous Integration/Continuous Delivery) tích hợp công cụ quản lý cấu hình Ansible, nhằm tự động hóa toàn bộ chu trình phát triển phần mềm từ viết mã, kiểm thử đến triển khai trên môi trường cloud-native. Nghiên cứu được thực hiện trong phạm vi dự án tại công ty FPT Software, với thời gian thực hiện từ tháng 6 đến tháng 11 năm 2023. Ý nghĩa của nghiên cứu thể hiện rõ qua việc giảm thiểu thời gian phát hành phần mềm, tăng tính ổn định và khả năng theo dõi hệ thống trong môi trường microservices, góp phần nâng cao năng suất và chất lượng sản phẩm phần mềm.
Cơ sở lý thuyết và phương pháp nghiên cứu
Khung lý thuyết áp dụng
Luận văn dựa trên hai khung lý thuyết chính: kiến trúc microservices và mô hình DevOps. Kiến trúc microservices phân tách ứng dụng thành các dịch vụ nhỏ, độc lập, có thể triển khai và mở rộng riêng biệt, giúp tăng tính linh hoạt và khả năng bảo trì. Các khái niệm chính bao gồm: giao tiếp giữa các microservices qua API RESTful, mô hình giao tiếp đồng bộ và bất đồng bộ, cũng như các chiến lược triển khai như blue-green deployment nhằm giảm thiểu downtime.
Mô hình DevOps tập trung vào sự hợp tác giữa các nhóm phát triển và vận hành, sử dụng các công cụ tự động hóa để tối ưu hóa quy trình phát triển phần mềm. Các khái niệm then chốt gồm: tích hợp liên tục (CI), giao hàng liên tục (CD), quản lý cấu hình bằng Ansible, và giám sát hệ thống với Prometheus. Ngoài ra, luận văn còn đề cập đến Infrastructure as Code (IaC) với AWS CloudFormation để quản lý hạ tầng một cách tự động và nhất quán.
Phương pháp nghiên cứu
Nguồn dữ liệu chính được thu thập từ thực tiễn triển khai dự án tại FPT Software, kết hợp với phân tích tài liệu chuyên ngành và các công cụ DevOps phổ biến trên thị trường. Cỡ mẫu nghiên cứu bao gồm toàn bộ hệ thống microservices và pipeline CI/CD được xây dựng trong dự án, với hơn 10 microservices và các công cụ tích hợp như CircleCI, Ansible, AWS CloudFormation, Prometheus.
Phương pháp phân tích sử dụng chủ yếu là phân tích định tính kết hợp với đánh giá hiệu năng dựa trên các chỉ số như thời gian build, tỉ lệ lỗi phát sinh, thời gian downtime trong quá trình triển khai. Timeline nghiên cứu kéo dài 6 tháng, bắt đầu từ khảo sát lý thuyết, lựa chọn công cụ, thiết kế pipeline, triển khai thực tế và đánh giá kết quả.
Kết quả nghiên cứu và thảo luận
Những phát hiện chính
-
Tự động hóa pipeline CI/CD giúp giảm 40% thời gian tích hợp và triển khai phần mềm so với quy trình thủ công trước đây. Thời gian trung bình từ khi commit code đến khi phần mềm được triển khai thành công giảm từ khoảng 2 giờ xuống còn dưới 1,2 giờ.
-
Tỉ lệ lỗi phát sinh trong quá trình build và kiểm thử giảm 30% nhờ áp dụng các bước kiểm thử tự động và phân tích mã nguồn trong pipeline. Điều này góp phần nâng cao chất lượng phần mềm và giảm thiểu rủi ro khi đưa sản phẩm vào môi trường sản xuất.
-
Chiến lược blue-green deployment giúp giảm thiểu downtime xuống gần như bằng 0 trong quá trình cập nhật phiên bản mới của microservices. Việc chuyển đổi lưu lượng giữa môi trường xanh và môi trường xanh lá cây được thực hiện mượt mà, đảm bảo trải nghiệm người dùng không bị gián đoạn.
-
Giám sát hệ thống bằng Prometheus cung cấp dữ liệu thời gian thực về hiệu năng và trạng thái của các microservices, giúp phát hiện sớm các sự cố và cảnh báo kịp thời. Tỉ lệ phát hiện lỗi trước khi ảnh hưởng đến người dùng tăng lên 25%.
Thảo luận kết quả
Nguyên nhân chính của các cải tiến trên là do việc áp dụng đồng bộ các công cụ và phương pháp DevOps hiện đại, kết hợp với kiến trúc microservices linh hoạt. So với các nghiên cứu trước đây, kết quả này khẳng định tính hiệu quả của việc tự động hóa pipeline CI/CD trong môi trường cloud-native, đồng thời nhấn mạnh vai trò của quản lý cấu hình và giám sát liên tục trong việc duy trì chất lượng phần mềm.
Biểu đồ thể hiện thời gian trung bình của các bước trong pipeline CI/CD (build, test, deploy) cho thấy sự giảm đáng kể sau khi triển khai giải pháp tự động hóa. Bảng so sánh tỉ lệ lỗi trước và sau khi áp dụng pipeline cũng minh chứng cho hiệu quả của việc tích hợp kiểm thử tự động.
Ý nghĩa của nghiên cứu không chỉ nằm ở việc nâng cao năng suất phát triển mà còn giúp doanh nghiệp tăng khả năng cạnh tranh trên thị trường bằng cách rút ngắn time-to-market và đảm bảo độ tin cậy của sản phẩm.
Đề xuất và khuyến nghị
-
Triển khai rộng rãi pipeline CI/CD tích hợp Ansible trong toàn bộ các dự án phát triển phần mềm nhằm chuẩn hóa quy trình và nâng cao hiệu quả phát triển. Thời gian thực hiện dự kiến 6 tháng, do phòng phát triển phần mềm chủ trì.
-
Đào tạo chuyên sâu về DevOps và quản lý cấu hình cho các nhóm phát triển và vận hành để đảm bảo sự hiểu biết và áp dụng đúng đắn các công cụ tự động hóa. Khuyến nghị tổ chức các khóa đào tạo định kỳ hàng quý.
-
Mở rộng ứng dụng chiến lược blue-green deployment cho tất cả các microservices quan trọng nhằm giảm thiểu rủi ro downtime trong quá trình cập nhật. Thực hiện song song với việc nâng cấp hạ tầng hỗ trợ.
-
Tăng cường giám sát và cảnh báo tự động bằng Prometheus và các công cụ bổ trợ để phát hiện và xử lý sự cố nhanh chóng, nâng cao độ ổn định hệ thống. Đề xuất xây dựng dashboard tổng hợp và báo cáo định kỳ hàng tháng.
Đối tượng nên tham khảo luận văn
-
Các kỹ sư DevOps và quản trị hệ thống: Luận văn cung cấp hướng dẫn chi tiết về thiết kế và triển khai pipeline CI/CD, giúp họ áp dụng hiệu quả các công cụ tự động hóa trong môi trường microservices.
-
Nhà quản lý dự án phần mềm: Thông tin về lợi ích và tác động của tự động hóa quy trình phát triển giúp họ đưa ra quyết định chiến lược phù hợp nhằm nâng cao năng suất và chất lượng sản phẩm.
-
Các nhà phát triển phần mềm: Hiểu rõ về kiến trúc microservices, các phương pháp giao tiếp và triển khai giúp họ phát triển ứng dụng linh hoạt, dễ bảo trì và mở rộng.
-
Các chuyên gia nghiên cứu và giảng viên trong lĩnh vực công nghệ thông tin: Luận văn là tài liệu tham khảo quý giá về ứng dụng thực tiễn DevOps, CI/CD và cloud-native trong phát triển phần mềm hiện đại.
Câu hỏi thường gặp
-
Tự động hóa pipeline CI/CD có thể áp dụng cho những loại dự án nào?
Tự động hóa pipeline CI/CD phù hợp với hầu hết các dự án phần mềm, đặc biệt là các ứng dụng microservices và cloud-native, giúp tăng tốc độ phát triển và giảm lỗi. Ví dụ, các dự án phát triển web, ứng dụng di động và dịch vụ backend đều có thể hưởng lợi. -
Lợi ích chính của việc sử dụng Ansible trong quản lý cấu hình là gì?
Ansible hoạt động không cần agent, dễ triển khai và sử dụng ngôn ngữ YAML đơn giản để mô tả cấu hình, giúp tự động hóa nhanh chóng và giảm thiểu lỗi cấu hình. Điều này giúp tiết kiệm thời gian và tăng tính nhất quán trong quản lý hạ tầng. -
Blue-green deployment giúp giảm downtime như thế nào?
Chiến lược này duy trì hai môi trường song song (màu xanh và màu xanh lá), cho phép chuyển đổi lưu lượng người dùng từ phiên bản cũ sang phiên bản mới một cách mượt mà, tránh gián đoạn dịch vụ. Nếu có sự cố, có thể nhanh chóng quay lại phiên bản cũ. -
Prometheus hỗ trợ giám sát hệ thống ra sao?
Prometheus thu thập dữ liệu theo thời gian thực, hỗ trợ truy vấn linh hoạt bằng PromQL và tích hợp cảnh báo tự động qua AlertManager, giúp phát hiện sớm các vấn đề về hiệu năng và trạng thái dịch vụ. -
Làm thế nào để đảm bảo tính bảo mật trong pipeline CI/CD?
Bảo mật được đảm bảo thông qua việc quản lý quyền truy cập, mã hóa dữ liệu, sử dụng các công cụ kiểm tra bảo mật tự động trong pipeline và áp dụng DevSecOps để tích hợp kiểm thử bảo mật xuyên suốt quá trình phát triển.
Kết luận
- Luận văn đã xây dựng thành công pipeline CI/CD tự động hóa tích hợp Ansible, AWS CloudFormation và Prometheus cho kiến trúc microservices.
- Giảm 40% thời gian tích hợp và triển khai, đồng thời giảm 30% lỗi phát sinh trong quá trình phát triển.
- Áp dụng chiến lược blue-green deployment giúp giảm downtime gần như bằng 0 trong quá trình cập nhật phần mềm.
- Giám sát hệ thống hiệu quả với Prometheus, nâng cao khả năng phát hiện và xử lý sự cố kịp thời.
- Đề xuất mở rộng triển khai và đào tạo để nhân rộng hiệu quả trong toàn doanh nghiệp.
Tiếp theo, cần tiến hành đánh giá chi tiết hiệu quả sau khi áp dụng rộng rãi pipeline, đồng thời nghiên cứu tích hợp thêm các công cụ bảo mật tự động nhằm nâng cao hơn nữa chất lượng và độ an toàn của phần mềm. Mời các chuyên gia và nhà quản lý phần mềm liên hệ để trao đổi và hợp tác phát triển giải pháp tự động hóa trong môi trường microservices hiện đại.