---
title: "بناء Ruby وJRuby على CircleCi بالتوازي"
description: "اضبطوا CircleCI لبناء تطبيقكم على Ruby وJRuby بالتوازي."
canonical: https://oozou.com/ar/blog/building-ruby-and-jruby-on-circleci-in-parallel-22
locale: ar
date: 2016-11-25
author: "OOZOU Team"
---

# بناء Ruby وJRuby على CircleCi بالتوازي

> اضبطوا CircleCI لبناء تطبيقكم على Ruby وJRuby بالتوازي.

Published: 2016-11-25 · Author: OOZOU Team (Engineering) · 2 min read

احتجت مؤخرًا إلى تحويل تطبيق Rails ليس بالبسيط من MRI إلى JRuby لأحد عملائنا. سارت العملية بسلاسة إلى حد كبير، لكن متطلبات الأعمال تتغير، وقد يحتاج العميل إلى تشغيل التطبيق على MRI أو JRuby.

وللتأكد من أن تغييرات الكود لن تكسر البناء على أيٍّ من المنصتين، ضبطت [CircleCI](https://circleci.com/) لبناء النسختين في الوقت نفسه. وقررت [ضبط التوازي يدويًا](https://circleci.com/docs/parallel-manual-setup/)، بحيث تُبنى كل منصة في container مختلف في الوقت نفسه (MRI في container 0، وJRuby في container 1).

**إعداد البيئة**

يبدأ الإعداد بإضافة بعض متغيرات البيئة لتحديد إصدارات Ruby المختلفة. وأضفت أيضًا متغيرًا مجمّعًا باسم RUBY_VERSIONS، يُستخدم لتشغيل أوامر [RVM](https://rvm.io/) على المنصتين عبر rvm do. كما أضفت بعض خيارات الضبط الخاصة بـ Java لضمان أن تعمل عمليات بناء JRuby بسرعة معقولة دون أن تستهلك ذاكرة كبيرة.

```
machine:
  environment:
    MRI_VERSION: 2.3.3
    JRUBY_VERSION: jruby-9.1.6.0
    RUBY_VERSIONS: $MRI_VERSION,$JRUBY_VERSION
    JRUBY_OPTS: '--debug -J-XX:+TieredCompilation -J-XX:TieredStopAtLevel=1 -J-Xms512m -J-Xmx1024m'
    # other environment variables
lang-yaml
```

**تثبيت التبعيات**

هذا تجاوز (override) بسيط لطريقة CircleCI المعتادة في تثبيت التبعيات: نحدّث RVM للحصول على أحدث إصدارات Ruby، ونثبّت الإصدارات المحددة في RUBY_VERSIONS، ثم نستخدم rvm do لتثبيت Bundler والـ gems المحددة في Gemfile (وباستخدام [platforms](https://bundler.io/v1.3/man/gemfile.5.html#PLATFORMS-platforms-) يسهل إلى حد ما بناء Gemfile يعمل مع إصداري Ruby كليهما).

```
dependencies:
  override:
    - rvm get head
    - rvm install $RUBY_VERSIONS
    - rvm $RUBY_VERSIONS do gem install bundler
    - rvm $RUBY_VERSIONS do bundle install
lang-yaml
```

**إعداد الاختبارات**

هذه حيلة ذكية تعلّمتها من توثيق CircleCI. يمكنكم استخدام عبارة case من الـ shell داخل ملف الإعداد لتشغيل أوامر مختلفة في containers مختلفة. ومع rvm use أتاح لي ذلك "تثبيت" MRI على container 0 وJRuby على container 1، فنعرف فورًا أي إصدار تسبّب في فشل البناء.

```
test:
  override:
    - case $CIRCLE_NODE_INDEX in 0) rvm use $MRI_VERSION && bundle exec rspec ;; 1) rvm use $JRUBY_VERSION && bundle exec rspec ;; esac:
        parallel: true
lang-yaml
```

**الخلاصة**

رغم أن CircleCI بصيغته الحالية لا يدعم شيئًا مثل [build matrix في Travis](https://docs.travis-ci.com/user/customizing-the-build#Build-Matrix)، فإنه مرن بما يكفي لإيجاد حلول بديلة. وآمل أن يبسّط الإصدار [2.0](https://circleci.com/blog/say-hello-to-circleci-2-0/) هذه العملية، لكن الحل الحالي سهل بما يكفي ويؤدي الغرض جيدًا بالنسبة إلينا.

---

Contact OOZOU: hello@oozou.com · +66 2544 0000 · https://oozou.com/ar/contact

More for AI agents: https://oozou.com/llms.txt · every page has a markdown twin at its URL plus ".md"
