البرمجة

تنفيذ الوظائف المتوازية في جينكينز

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

بدلاً من استخدام الخيار wait: false في أوامر build، يمكنك استخدام وظيفة تحكم تسلسلية تسمى parallel لتنفيذ الوظائف المتوازية والانتظار حتى انتهائها جميعًا. يمكنك تعديل النص البرمجي الخاص بك كما يلي:

node {
    stage('Testing') {
        def tests = [:]
        
        tests['Foo1'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Foo1')] }
        tests['Bar1'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Bar1')] }
        tests['Baz1'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Baz1')] }
        tests['Foo2'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Foo2')] }
        tests['Bar2'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Bar2')] }
        tests['Baz2'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Baz2')] }
        
        parallel tests
    }
}

بهذا التعديل، يتم تنفيذ الوظائف المختلفة بواسطة parallel، الذي ينتظر حتى انتهاء جميع الوظائف قبل استئناف النقطة الرئيسية في الخط الأنابيب. هذا يضمن أن الخط الأنابيب لن ينتهي حتى تنتهي جميع الوظائف المتوازية.

عند استخدام هذا النهج، سيتم تنفيذ الوظائف المذكورة (Foo1، Bar1، Baz1، Foo2، Bar2، Baz2) بشكل متزامن وسينتظر البرنامج الرئيسي حتى انتهاء جميعها قبل استئناف تنفيذ الخط الأنابيب.

المزيد من المعلومات

بعد أن قمت بتعديل النص البرمجي ليستخدم وظيفة التحكم التسلسلي parallel، يمكنك أيضًا إضافة خطوة إضافية للتأكد من انتهاء جميع الوظائف المتوازية بنجاح. يمكنك استخدام الأمر waitUntil للانتظار حتى تنتهي جميع الوظائف بنجاح وبعدها استئناف تنفيذ الخط الأنابيب الرئيسي.

قم بتعديل الكود ليبدو كما يلي:

groovy
node { stage('Testing') { def tests = [:] tests['Foo1'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Foo1')] } tests['Bar1'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Bar1')] } tests['Baz1'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Baz1')] } tests['Foo2'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Foo2')] } tests['Bar2'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Bar2')] } tests['Baz2'] = { build job: 'Test', parameters: [string(name: 'Name', value: 'Baz2')] } parallel tests waitUntil { tests.every { _, result -> result == 'SUCCESS' } } } }

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

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

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر