What is CI?

معظم الناس دايما هتسمع الكلمتين دول ورا بعض CI/CD. لدرجه ان ناس كتير ممكن تكون فاكره ان الاتنين حاجه واحده

خلينا نبدا الاول باننا نعرف معني كل واحده فيهم و ايه ال tools اللي هنحتاجها و ازاي نطبقها. و الاهم بقي هل انا محتاج دا في ال project/product اللي انا شغال عليه ولا لا.

في المقاله دي هحكي عن ال CI و في المقاله الجايه هحكي عن ال CD

يعني ايه CI?

المعني الحرفي هوا continuous integration يعني من الاخر اني افضل اضيف features او integrations او تعديلات لل code بتاعي و افضل متاكد ان ال code الجديد اللي اتضاف مضربش ال code القديم و ان ال code الجديد مضربش اي code قديم. و ان كمان ال code الجديد ماشي علي نفس ال standards و ال conventions اللي متفقين عليها

امتي تعرف ان ال CI pipeline بتاعك محتاج تحسين؟

  • لو لقيته بيضيع وقت اكتر ما بيفيد

  • لو لقيت ان في ال code review في حاجات ممكن كانت تكتشف من غير تدخل انسان تاني. زي مثلا ان تلاقي في ال code review الناس بتعلق لبعض ان المفروض اسماء ال functions تبقي camelCase او انك تسب مسافه قبل ما تفتح } كل الكلام دا مش محتاح ان شخص يضيع وقته و يدقق فيه و لكن ممكن يكون في tools تكتشف دا. دا غير ان دا مش code review اصلا بس دا موضوع تاني

طيب بنسمع كتير عن حاجات زي travis, circleci, drone,… دول بيعملو ايه؟

دي tools كل شغلها ان كل لما يحصل تغيير في ال code هتنفذ شويه اوامر انت قايلها عليها عشان تتاكد ان ال code مظبوط و جاهر انه يتعمله merge علي ال project. الاوامر دي ممكن تكون انه ي run static code analysis او ي run ال unit tests مثلا

يعني ايه CI pipeline?

في حالات ساعات بنحتاج ان ال CI يعمل اكتر من حاجه بترتيب معين. زي مثلا انه يعمل generate لل coverage report بس بعد ما يكون عمل run لل unit tests و عدي الخطوه دي بنجاح. و قتها بنرتب ال CI بناء علي الخطوات دي و بنقول عليه CI pipleine. او بالعربي خط انابيب. و اتسمي كدا عشان لو تخيلت شكل الانابيبت هتلاقيها سلسله من الانابيب ملحومه في بعض و لو حصل مشكله في اي واحده فيهم بتاثر علي الخط كله.

مثال علي CI pipline ل Golang project

مثال علي حاجات ممكن ال CI يكون مسؤل عنها؟

  • Static code analysis/linting

  • Run unit/integration/end-to-end tests

  • Generate coverage report

علي فكرا انت لو مش شغال في team كبير و مش محتاج كل الدوشه و ال tools دي ممكن تعمل run لكل الكلام اللي فوق دا as a git pre-commit hook

يعني مثلا تلم كل ال commands اللي انت عايزها دي في bash file و هتعمل pre-commit hook ينفذ ال bash file دا قبل كل commit علي جهازك بس كدا و اعتبر ان عندك CI ياسيدي

لو عايز تتعامل مع ال pre-commit hooks بسهوله في nodejs tool اسمها husky

مراجع تانيه ممكن تبص عليها