في عملية إدارة كميات كبيرة من البيانات وتصورها ، نواجه بشكل متزايد الحاجة إلى تقديم أداة واحدة للوصول إلى الإدارة الوظيفية في المستودع. علاوة على ذلك ، يجب أن تكون هذه الأداة مريحة ومفهومة بنفس القدر لجميع موظفي قسم إدارة البيانات: المسؤولون والمحللون والمطورون والمختبرون.

اسمي Vitaliy ، أنا مسؤول في Rostelecom عن اتجاه اختبار التشغيل الآلي وتنفيذ عمليات DevOps. في هذه المقالة ، سأتحدث عن حل مثير للاهتمام لهذه المشكلة في مستودع بيانات كبير من Rostelecom.
وهكذا توصلنا إلى مجموعة من الأدوات لحل هذه المشكلة.
بالنسبة للمبتدئين ، خلفية صغيرة. في وقت سابق ، كتبت أننا كتبنا الوحدة الخاصة بنا في بيثون لأتمتة عملية تثبيت الكائنات في مستودع البيانات. يتم التحكم فيه بواسطة Jenkins ويتيح لك بدء الوظيفة الضرورية إما يدويًا بواسطة زر مع إدخال معلمات بدء التشغيل الضرورية ، أو تلقائيًا بالكامل وفقًا لجدول زمني دون تدخل المستخدم. أيضًا ، قامت شركتنا بالفعل بتنفيذ عدد من التطبيقات المكتوبة باستخدام Oracle APEX.
ما هو Oracle Application Express (Oracle APEX)؟
Oracle APEX - في الإصدارات السابقة من التطبيق كان يسمى HTML DB. باستخدام هذه الأداة ، باستخدام متصفح فقط ولديه خبرة في البرمجة بلغات مثل PL / SQL و JavaScript ، يمكنك تطوير تطبيقات ويب سريعة وقابلة للتطوير وآمنة يمكن نشرها لاحقًا بسهولة على أي دائرة للتطوير والاختبار والتنفيذ اللاحق في الإنتاج .
لإنشاء نموذج إدخال بيانات ، ليست هناك حاجة لبرمجة الواجهة بطريقة معقدة. يحتوي التطبيق على العديد من القوالب الجاهزة التي يمكن إعادة استخدامها لتطوير الحل الخاص بك. يحصل المستخدمون النهائيون أيضًا على إمكانية الوصول إلى التطبيق من خلال متصفح ، مما يلغي الحاجة إلى تثبيت التطبيق على جهاز كمبيوتر. ومع كل الميزات الإضافية المذكورة أعلاه ، فإن البيانات الوصفية (معلومات حول البيانات المستخدمة) في مستودعنا موجودة في قاعدة بيانات Oracle ، لذلك لا يمكننا تجاهل هذه الأداة.
مثال على تطبيق بنية APEXخدمات Oracle REST Data Services (ORDS) هي خدمة بيانات تحل محل
خادم Oracle HTTP و
mod_plsql ، بناءً على
Java EE . ويوفر التفاعل مع الكائنات من خلال
RESTfull.قليلا عن جنكينز
ربما يعرف الكثيرون بالفعل نوع الوحوش ، لكن بالنسبة لأولئك الذين ينظرون فقط إلى هذه الأداة ، سوف أخبركم ما هي وكيف نستخدمها في مستودعنا.
Jenkins هي أداة تكامل مستمرة ، غالبًا ما تستخدم لتطوير البرمجيات ونشر التطبيقات في مراحل مختلفة من عملية التطوير. بعبارات بسيطة ، توفر جينكينز بيئة أتمتة العمليات. نظرًا لمرونته ومجموعة كبيرة من المكونات الإضافية ، فإنه يتيح الاندماج في أي تطبيق أو تقنية ويدعم العمل مع أنظمة التحكم في الإصدارات المختلفة.
في قسم إدارة البيانات لدينا ، يتم تنفيذ عمليات CI / CD مع تشغيل الاختبارات الآلية. يدير Jenkins عدة وحدات مكتوبة ذاتيًا ، بفضلها تتم أتمتة العديد من العمليات اليدوية.
جنكينز مثال على شبكة الإنترنت واجهة العميل ، قابلة للنقرمشكلة سوء الفهم وحلها
بعد أن نفذنا العديد من المهام وأتمناها ، واجهنا مشكلة: ليس فقط مهندسو DevOps ومتخصصو الاختبار سيضطرون إلى إدارة هذه العمليات ، ولكن أيضًا الأشخاص الذين لا يواجهون هذه الأدوات ، ولكنهم يشاركون في عملية التطوير. كان المستخدمون النهائيون جميعهم موظفين داخليين في القسم. في رأيي ، تعد واجهة عميل Jenkins بسيطة ومريحة للغاية ، لكنني أنظر إليها من خلال عيون DevOps ، ولا يمكن لأي شخص أن ينظر إليها بنفس الطريقة. نظرًا لوجود عدد من المهام التي اضطررنا إلى تشغيلها على الزر بواسطة الموظفين ، فقد أصبح من الضروري التوصل إلى واجهة تكون صديقة للمستخدم. في الواقع ، هناك مكون إضافي لجينكينز يسمى
المحيط الأزرق ، والذي يسمح لك بتغيير تمثيل واجهة المستخدم للأداة.
مثال Jenkins على الويب لواجهة العميل (البرنامج المساعد Blue Ocean) ، قابل للنقرهذا المكون الإضافي لا يمكن أن يحل مشكلتنا ، ولكن كبديل ، إذا كانت الواجهة القياسية لا تناسبك ، فيمكنك إعادة تكوينها. في أغلب الأحيان ، يصبح من الضروري دمج الوحدة في جينكينز ، وليس العكس. هذا هو مصلحة المشكلة التي يجري حلها. في وقت حلها ، كما كتبت ، كان لدينا بالفعل عدد من التطبيقات المكتوبة باستخدام Oracle APEX.
مثال على واجهة أحد تطبيقات APEX ، قابل للنقربعد التحقق من أن الواجهة سهلة الاستخدام بما فيه الكفاية وأنه من الممكن إدارتها ، ويتم تخزين كافة المعلمات لبدء المهام الضرورية في Jenkins في قاعدة بيانات Oracle ، نشأت الفكرة لإطلاق عدد من مهام Jenkins من APEX.
استغرق الأمر الكثير من الوقت. تم تنفيذ التفاعل بين التطبيقات وفقًا للمبدأ المعماري المتمثل في بناء أنظمة موجهة نحو الخدمة مثل REST. تتضمن بنية REST قواعد تفاعل مكونات التطبيق الموزع على الشبكة. يتيح لك APEX-application استخدام هذا النمط ويوفر قالبًا جاهزًا لتشكيل عملية إرسال طلبات HTTP / HTTPs من النوع REST أثناء تطوير التطبيق. نتيجة لذلك ، قمنا بسرعة برفع التطبيق لبدء مثل هذه المهام ، وبدأ سحب بيانات التشغيل مباشرة من قاعدة البيانات مع إمكانية اختيارها ، مما أدى إلى إلغاء إمكانية حدوث خطأ في إدخال معلمات بدء التشغيل. يتم تنفيذ نقل المعلمات لتشغيل المهام في جنكينز عن طريق طلب POST ، والذي يكمن في جسده JSON مع المعلمات اللازمة.
نموذج استدعاء REST عند تطوير تطبيق APEX ، قابل للنقرمثال JSON:
{"parameter":[{"name":"SERVER","labels":"master"},{"name":"INSTANCE","value":"DEV"},{"name":"SRC_CODE_START","value":"SRC_ID"},{"name":"SRC_CODE_END","value":"SRC_ID"},{"name":"MODEL_ID","value":"MODEL_ID"},{"name":"SAVE_DATA","value":"0"}],"statusCode":"303","redirectTo":"."}
مثال على تطبيق APEX جاهز لاستدعاء عمليات جنكينز ، قابل للنقرستكون نتيجة النقر فوق الزر "تشغيل العملية" نقل المعلمات إلى مهمة Jenkins والإطلاق اللاحق لها. سجلات معروضة لعمليات الإطلاق الناجحة وغير الناجحة ، والتي يتم إرجاعها مباشرةً من وحدة التحكم في عملية تنفيذ مهمة Jenkins. المهمة نفسها يمكن أن تحتوي على أي عملية تلقائية.
في النهاية
أظهر دمج بيانات التطبيق في قسمنا نتيجة ممتازة. لم تعد هناك حاجة لإجبار الأشخاص الذين يجب ألا يعملوا مباشرة مع جينكينز لفهم مجموعة أدوات التطبيق. تمكنا من التمييز وترك السيطرة على تنفيذ المهام على مستوى جينكينز باستخدام مصفوفة حقوق مخصصة بحيث يتمتع المستخدمون بالقدرة على إنشاء المهام ، لكن ليس لديهم القدرة على تحريرها.
نظرًا لأن هذه التجربة كانت ناجحة ، فقد ظهرت أفكار التطوير في شكل كتابة أطر عمل مفتوحة المصدر لدينا لتبسيط التفاعل مع Jenkins والتطبيقات الأخرى التي تعمل معنا. لكن هذه قصة مختلفة تمامًا ، سأحاول أن أخبر عنها في المقالات المستقبلية.