كيفية أتمتة عمليات نشر قاعدة البيانات باستخدام Liquibase؟

ائتمان

Liquibase هي أداة لإدارة تغيير قاعدة البيانات. باستخدامه ، يمكنك تتبع تغييرات قاعدة البيانات التي تم إجراؤها باستخدام البرامج النصية SQL (أو XML). يمكن إضافة هذه البرامج النصية إلى أنظمة التحكم في الإصدار مثل git.

في هذا المنشور ، سنرى كيفية أتمتة عمليات نشر قاعدة البيانات باستخدام Liquibase. يمكن أن يتم الأتمتة باستخدام

1. خط أنابيب جنكينز

2. مخطوطات شل

لن أتحدث عن أي من هذين الاثنين لأنه لا يخضع لهذا المنصب - فقط لإبقاء الأمور واضحة ومباشرة.

هناك طريقتان لكتابة التغييرات في Liquibase ، مثل XML و SQL. لقد اخترت SQL لتجنب كتابة تغييرات XML المطابقة لكل تحديث SQL نقوم به. بهذه الطريقة - يتم استخدام نفس ملف SQL الذي نكتبه لتطويرنا في عمليات نشر Liquibase.

لاحظ أني اختبرت هذه الخطوات لقاعدة بيانات Postgre فقط ولكن يجب تكرار نفس الخطوات لأي قاعدة بيانات. تأكد أيضًا من تكوين Liquibase على جهازك.

اتبع الخطوات الموضحة أدناه:

إنشاء ملف سجل التغيير

قم بإنشاء ملف XML باسم liquibase-changelog.xml (يمكن أن يكون الاسم عبارة عن btw!) مع المحتوى التالي:

<؟ xml version = "1.0" encoding = "UTF-8"؟>
XMLNS: XSI = "http://www.w3.org/2001/XMLSchema-instance"
XSI: schemaLocation = "http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd ">

... المزيد من العلامات  تذهب هنا ...

لاحظ علامة التضمين في XML أعلاه. يجب تسجيل كل ملف من ملفات مجموعة التغييرات SQL التي يجب تتبعها بواسطة Liquibase في ملف سجل التغيير هذا.

إنشاء SQLetsets

أضف ملفات SQLchangeset في مكان من اختيارك. بناء جملة SQL الذي يعمل مع Liquibase هو:

--liquibase تنسيق مزود
- Changeset <اسم المؤلف>: 
<عبارات SQL تذهب هنا>
<عبارات SQL تذهب هنا>
- استرجاع <استرجاع عبارات SQL>
- استرداد <عبارات SQL التراجع>

دعونا نرى مثالا:

--liquibase تنسيق مزود
- Changeset xameeramir: إنشاء اختبار الجدول
إنشاء جدول إذا لم يكن موجودًا testTable (
عمود اسم 1 VARCHAR (355)
- استعادة الجدول قطرة
- إعادة اختبار testTable
لاحظ أن ملف Changes SQL يختلف عن ملف XML changelog.

تسجيل SQLetet في ملف سجل التغيير

قم بتضمين ملف تغييرات مجموعة SQL في ملف سجل التغيير الذي أنشأناه مسبقًا باستخدام علامات XML التالية:

إضافة العديد من SQLchangesets وتسجيلها في ملف سجل التغيير كما تريد.

مشغل Liquibase لتحديث قاعدة البيانات

ببساطة قم بتشغيل الأمر أدناه:

liquibase --changeLogFile = <المسار إلى ملف سجل التغيير> / <اسم ملف سجل التغيير> .xml - اسم المستخدم = <اسم مستخدم قاعدة البيانات> - كلمة المرور = <كلمة مرور قاعدة البيانات> --classpath = <المسار إلى تثبيت قاعدة البيانات> / postgresql- 42.2.5.jar --url = jdbc: postgresql: //  / <اسم قاعدة البيانات> التحديث

classpath هو برنامج تشغيل JDBC الذي قمنا بتكوينه في آخر مشاركة. postgresql-42.2.5.jar هو برنامج تشغيل JDBC المخصص لـ Postgres ويجب أن يكون قابلاً للاستبدال بقاعدة البيانات التي تختارها دون أي تغييرات خاصة في هذه الخطوات.

يمكن استخدام الأمر أعلاه في البرامج النصية shell أو CI / CD pipeline لتشغيل تحديثات قاعدة البيانات.

أتمتة CI / CD

بمجرد وضع التكوين أعلاه - يمكن إجراء التشغيل الآلي على العميل باستخدام البرامج النصية shell أو على الخادم باستخدام البرامج النصية shell أو تنفيذ CI / CD.

بافتراض وجود تطبيق CI / CD في المكان الذي يؤدي إلى نشر Liquibase ، فإن الأمر يؤدي إلى تشغيل أمر Liquibase trigger الوارد أعلاه في كل بوابة git إلى DEVELOP (أو أي فرع).

سيكون الشرط المسبق الأول هو امتلاك ملف liquibase-changelog.xml. دعنا نقول إننا نحتفظ بها عند مستوى ~ / مع تضمين عبارات تشير إلى المجلد الذي توجد به مجموعة إعدادات SQL. سير العمل التالي سيقوم بأتمتة عمليات نشر قاعدة البيانات باستخدام خط أنابيب CI / CD:

  • ادفع ملف تغييرات مجموعة SQL إلى مستودع الميزة
  • رفع طلب سحب ضد فرع DEVELOP
  • بعد مراجعة النظراء والموافقات الصحيحة ، قم بدمج فرع الميزة مع فرع DEVELOP
  • سيؤدي تطبيق CI / CD الذي تم تكوينه على خادم DEVELOP إلى تشغيل Liquibase لتحديثات قاعدة البيانات
  • يقوم Liquibase بتنفيذ الملفات الجديدة تلقائيًا فقط (لن يتم تنفيذ أي ملفات تم تنفيذها بالفعل مرة أخرى)

الأتمتة باستخدام البرامج النصية قذيفة

سيتم كتابة نفس أمر تشغيل Liquibase في نصوص shell. بمجرد تنفيذ البرامج النصية للصدفة ، سيتم تنفيذ مجموعات التغييرات Liquibase التي تحتوي على تلقائيًا.

قد تتساءل كيف ستعرف البرامج النصية الخاصة بالصدفة وقت التنفيذ؟ الجواب بسيط:

  • يمكن تنفيذ البرامج النصية shell على مشغلات cron
  • يمكن تنفيذ البرامج النصية shell في بعض أحداث النظام

الخيار لك!