التكامل المستمر: تثبيت Concourse CI على أوبنتو 16.04


أسامه دمراني

يمكن شرح مبدأ نظام التكامل المستمر Continuous Integration System في هندسة البرمجيات ببساطة على أنه دمج مجهود أفراد فريق عمل بشكل مستمر ويومي، فكل مرة تضيف شفرة جديدة لفرع master مثلًا، يحاول خادم CI أن يبني البرنامج (يجمّع البرنامج ويختبر الوحدات والتكامل ويحلل الجودة، إلخ).

نظام Concourse للتكامل المستمر

تحدث أخطاء غير مقصودة في المتغيرات التي لديك أثناء انتقالك من أحد أنظمة التكامل المستمر إلى غيره لمجرد استخدام واجهة النظام الجديد، ولأن عدد تلك المتغيرات كبير فإن احتمال حدوث الخطأ كبير أيضًا.
وهنا يأتي Concourse CI، حيث يهدف إلى توفير نظام تكامل بسيط وقابل للتوسع وبه أقل عدد ممكن من الأجزاء المتحركة، عبر استخدام بنية تفسيرية Declarative syntax يمكن من خلالها نمذجة أي أنبوب pipeline سواء كان بسيطًا مثل (الوحدة unit، التكامل integration ، التطبيق deploy، الشحن ship)، أو كان أنبوبًا معقدًا مثل إجراء اختبارات على بنى تحتية infrastructures متعددة.
وسنعرف في هذا المقال طريقة تثبيت Concourse CI على خادم أوبنتو 16.04 باستخدام PostgreSQL.

الخطوة الأولى – تثبيت PostgreSQL

  1. نبدأ أولًا وقبل أي شيء بتثبيت PostgreSQL على الخادم، حيث سيستخدمها Concourse لتخزين بيانات الأنبوب الخاص به:
# apt-get install postgresql postgresql-contrib
  1. ثم ننشئ مستخدم PostgreSQL، سيدير هذا المستخدم بيانات Concourse في قاعدة البيانات:
$ sudo -u postgres createuser concourseusr
  1. يبحث Concourse بشكل افتراضي عن قاعدة بيانات اسمها atc، وسيحاول الاتصال بها، فننشئ قاعدة بيانات جديدة:
$ sudo -u postgres createdb --owner=concourse atc

تثبيت Concourse CI

سنحمّل الآن الملفات التنفيذية الخاصة بلينكس في مجلد tmp (نُشر المقال في 3 أغسطس من هذا العام، واستخدم إصدار 3.3.2 من Concourse، وسنستخدم إصدار 3.4.1 في هذا المقال حيث أنه آخر إصدار متوفر إلى الآن، اطّلع على صفحة التحميلات وانظر الإصدار المناسب لك وغيّر رقم الإصدار في أوامر التحميل التالية:
1. للذهاب إلى tmp:

# cd /tmp
  1. والآن نفذ الأمر التالي لتحميل إصدار 3.4.1 :
# curl -LO https://github.com/concourse/concourse/releases/download/v3.4.1/concourse_linux_amd64
  1. ثم نحمّل الإصدار الأخير المتوفر من fly (إصدار 3.4.1) في مجلد tmp أيضًا:
# curl -LO https://github.com/concourse/concourse/releases/download/v3.4.1/fly_linux_amd64
  1. بعد تحميل الملفين، ننقلهما إلى هذا مجلد bin:
# mv concourse* /usr/local/bin/concourse
# mv fly* /usr/local/bin/fly
  1. نتأكد الآن من سلامة الملفات بفحص إصدارها
$ concourse --version
$ fly version

ويجب أن يظهر لك أن الإصدار هو 3.4.1 (هذا آخر إصدار متوفر وقت ترجمة المقال، وهو الذي استخدمناه).

ضبط وإعداد Concourse CI

ننشئ أولًا مجلدًا لضبط وإعداد Concourse:

# mkdir /etc/concourse

1. إنشاء مفاتيح تشفير

تحتاج العناصر التي يتكون منها concourse إلى التواصل فيما بينها بأمان، خاصة TSA وWorkers
TSA: خادم SSH بني خصيصًا لتسجيل workers مع ATC
Workers: آلات تستخدم خوادم Garden وbaggageclaim وتسجّل نفسها من خلال TSA
ولضمان أمان ذلك التواصل فإننا نحتاج إلى إنشاء هذه المفاتيح:
• مفاتيح لـ Worker
• مفاتيح لـ TSA
• مفاتيح تسجيل الجلسة (Session Signing Keys) من أجل تسجيل الرموز (Tokens)
ستُستخدم تلك المفاتيح تلقائيًا حين يبدأ عنصر ما، لذا من المهم ألا تستخدم كلمة مرور لقفل المفاتيح. والآن، سننشئ تلك المفاتيح اللازمة، عبر هذه الأوامر:

# ssh-keygen -t rsa -q -N '' -f /etc/concourse/worker_key
# ssh-keygen -t rsa -q -N '' -f /etc/concourse/tsa_key
# ssh-keygen -t rsa -q -N '' -f /etc/concourse/session_key

سيقرر خادم TSA آلات workers التي يسمح لها بالاتصال بالنظام، لذا يجب أن نمنح تلك الصلاحية لمفتاح worker العام، وسنكتفي في حالتنا بتنفيذ هذا الأمر:

# cp /etc/concourse/worker_key.pub /etc/concourse/authorized_worker_keys

2. تهيئة البيئة Environment Configuration

لا يقرأ ملف Concourse التنفيذي أي ملفات تهيئة (Configuration)، لكن هذا لا يعني أنه لا يمكن تهيئته، فهو يأخذ قِيَمه من متغيرات البيئة التي أُدخلت في بداية العملية.
1- أنشئ ملفًا جديدًا لتهيئة عملية web:

# $EDITOR /etc/concourse/web_env

2- ألصق هذا المحتوى داخل الملف:

CONCOURSE_SESSION_SIGNING_KEY=/etc/concourse/session_key
CONCOURSE_TSA_HOST_KEY=/etc/concourse/tsa_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/etc/concourse/authorized_worker_keys
CONCOURSE_POSTGRES_SOCKET=/var/run/postgresql


# Match your environment
CONCOURSE_BASIC_AUTH_USERNAME=your_usr_name
CONCOURSE_BASIC_AUTH_PASSWORD=strong_pwd
CONCOURSE_EXTERNAL_URL=http://server_IP:8080

3- احفظ الملف وأغلقه.
4- أنشئ ملفًا جديدًا من أجل worker

# $EDITOR /etc/concourse/worker_env

5- ألصق هذا المحتوى فيه:

CONCOURSE_WORK_DIR=/var/lib/concourse
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/etc/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/etc/concourse/tsa_key.pub
CONCOURSE_TSA_HOST=127.0.0.1

6- عدّل الصلاحيات لملفات البيئة:

# chmod 600 /etc/concourse/w*_env

3. إنشاء المستخدم

1- سننشئ مستخدمًا جديدًا لتشغيل عملية web، ويجب أن يطابق هذا المستخدم اسم المستخدم الذي أنشأناه لـ PostgreSQL من قبل:

# adduser --system --group concourseusr

2- أعط هذا المستخدم ملكية مجلد تهيئة Concourse CI:

chown -R concourse:concourse /etc/concourse

3- أنشئ ملف concourse-web.service في مجلد system:

# $EDITOR /etc/systemd/system/concourse-web.service

4- ألصق هذا المحتوى فيه:

[Unit]
Description=Concourse CI web process (ATC and TSA)
After=postgresql.service

[Service]
User=concourse
Restart=on-failure
EnvironmentFile=/etc/concourse/web_env
ExecStart=/usr/local/bin/concourse web

[Install]
WantedBy=multi-user.target

5- احفظ وأغلق الملف.
6- أنشئ ملفًا من أجل عملية Worker

# $EDITOR /etc/systemd/system/concourse-worker.service

7- ألصق فيه هذا المحتوى:

[Unit]
Description=Concourse CI worker process
After=concourse-web.service

[Service]
User=root
Restart=on-failure
EnvironmentFile=/etc/concourse/worker_env
ExecStart=/usr/local/bin/concourse worker

[Install]
WantedBy=multi-user.target

4. ضبط UFW (Uncomplicated FireWall)

تستمع عملية web للاتصالات التي على منفذ 8080، لذلك سنتيح الدخول إلى هذا المنفذ بتنفيذ أمر ufw:

# ufw allow 8080

وسنحتاج إلى السماح بتصدير الدخول (forwarding access):

# ufw default allow routed

5. بدء الخدمات

هنا نصل إلى خطوة تشغيل كلا الخدمتين:

# systemctl start concourse-worker concourse-web

ثم نضبطهما ليعملا في وقت إقلاع الخادم (Server Boot Time):

# systemctl enable concourse-worker concourse-web

والآن صار الخادم جاهزًا لتنفيذ كل مزايا التكامل المستمر التي يوفرها Concourse CI في أوبنتو 16.04.

ترجمة -بتصرف- لمقال Continuous Integration: Concourse CI on Ubuntu 16.04 لصاحبه Giuseppe Molica





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن