البحث في الموقع
المحتوى عن 'continuous integration'.
-
يمكن شرح مبدأ نظام التكامل المستمر Continuous Integration System في هندسة البرمجيات ببساطة على أنه دمج مجهود أفراد فريق عمل بشكل مستمر ويومي، فكل مرة تضيف شفرة جديدة لفرع master مثلًا، يحاول خادم CI أن يبني البرنامج (يجمّع البرنامج ويختبر الوحدات والتكامل ويحلل الجودة، إلخ). نظام Concourse للتكامل المستمر تحدث أخطاء غير مقصودة في المتغيرات التي لديك أثناء انتقالك من أحد أنظمة التكامل المستمر إلى غيره لمجرد استخدام واجهة النظام الجديد، ولأن عدد تلك المتغيرات كبير فإن احتمال حدوث الخطأ كبير أيضًا. وهنا يأتي Concourse CI، حيث يهدف إلى توفير نظام تكامل بسيط وقابل للتوسع وبه أقل عدد ممكن من الأجزاء المتحركة، عبر استخدام بنية تفسيرية Declarative syntax يمكن من خلالها نمذجة أي أنبوب pipeline سواء كان بسيطًا مثل (الوحدة unit، التكامل integration ، التطبيق deploy، الشحن ship)، أو كان أنبوبًا معقدًا مثل إجراء اختبارات على بنى تحتية infrastructures متعددة. وسنعرف في هذا المقال طريقة تثبيت Concourse CI على خادم أوبنتو 16.04 باستخدام PostgreSQL. الخطوة الأولى – تثبيت PostgreSQL نبدأ أولًا وقبل أي شيء بتثبيت PostgreSQL على الخادم، حيث سيستخدمها Concourse لتخزين بيانات الأنبوب الخاص به: # apt-get install postgresql postgresql-contrib ثم ننشئ مستخدم PostgreSQL، سيدير هذا المستخدم بيانات Concourse في قاعدة البيانات: $ sudo -u postgres createuser concourseusr يبحث Concourse بشكل افتراضي عن قاعدة بيانات اسمها atc، وسيحاول الاتصال بها، فننشئ قاعدة بيانات جديدة: $ sudo -u postgres createdb --owner=concourse atc تثبيت Concourse CI سنحمّل الآن الملفات التنفيذية الخاصة بلينكس في مجلد tmp (نُشر المقال في 3 أغسطس من هذا العام، واستخدم إصدار 3.3.2 من Concourse، وسنستخدم إصدار 3.4.1 في هذا المقال حيث أنه آخر إصدار متوفر إلى الآن، اطّلع على صفحة التحميلات وانظر الإصدار المناسب لك وغيّر رقم الإصدار في أوامر التحميل التالية: للذهاب إلى tmp: # cd /tmp والآن نفذ الأمر التالي لتحميل إصدار 3.4.1 : # curl -LO https://github.com/concourse/concourse/releases/download/v3.4.1/concourse_linux_amd64 ثم نحمّل الإصدار الأخير المتوفر من fly (إصدار 3.4.1) في مجلد tmp أيضًا: # curl -LO https://github.com/concourse/concourse/releases/download/v3.4.1/fly_linux_amd64 بعد تحميل الملفين، ننقلهما إلى هذا مجلد bin: # mv concourse* /usr/local/bin/concourse # mv fly* /usr/local/bin/fly نتأكد الآن من سلامة الملفات بفحص إصدارها $ 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
-
- concourse
- continuous integration
-
(و 1 أكثر)
موسوم في: