Jenkins لنظام Android بناء باستخدام عامل ميناء

مرحبا بالجميع!

أعمل كمطور لأجهزة Android ، ومنذ وقت ليس ببعيد واجهنا بعض المهام الروتينية في مشروعنا والتي نود أن نتمتع بها تلقائيًا. على سبيل المثال ، لدينا 5 نكهات مختلفة ، نحتاج لكل منها إلى تحميل تصميمنا على القماش ، وأحيانًا للعربات المختلفة عدة مرات في اليوم. نعم ، يمكن تنفيذ هذه المهمة بمهمة gradle ، لكنني لا أرغب في بدء هذه العملية على جهاز المطور ، ولكن للقيام بذلك بطريقة مركزية. أو على سبيل المثال ، قم تلقائيًا بتحميل الإنشاء في google play إلى الإصدار التجريبي. حسنًا ، أردت فقط اختيار نظام CI. ما الذي خرج منه ، وكيف قمنا بإعداده ، لماذا يوجد Docker ، لاحقًا في المقالة.



حسب فهمي ، تم تقسيم المهمة بأكملها إلى مرحلتين تقريبًا:

  1. تثبيت وتكوين Jenkins نفسها مع Android SDK
  2. إعداد المهام بالفعل داخل جنكينز

في هذه المقالة ، أود أن أتطرق إلى النقطة الأولى ، وإذا كان هذا الأمر يهم أي شخص ، في المقالة التالية سوف أصف عملية إعداد مهام التجميع في جنكينز نفسها.

لذلك ، النقطة الأولى هي تثبيت وتكوين نظام جنكينز


لدى هابري بالفعل مقالة رائعة حول هذا الموضوع ، لكنها بالفعل بضع سنوات ، وبعض الأشياء فيه قديمة بعض الشيء (على سبيل المثال sdkmanager) ، على الرغم من أنها ساعدتني كثيرًا في معرفة ماذا وكيف أفعل في المراحل الأولية.

إذا نظرت إلى الوثائق الرسمية لتثبيت Jenkins ، فسنرى ثلاث طرق مختلفة للقيام بذلك: إطلاق صورة مرساة جاهزة ، وتنزيل وتشغيل ملف حرب ، وأيضًا تثبيت jenkins في النظام بالطريقة القديمة (على سبيل المثال ، apt-get install jenkins باستخدام ubuntu كمثال). الخيار الأول هو الأصح ، لأنه لا يحمل أي إعدادات أو تبعية غير ضرورية لنظامنا المضيف ، وفي أي وقت حتى لو حدث خطأ ما ، فمن السهل والبسيط حذف كل شيء والبدء من جديد. لكن صورة عامل الإرساء القياسية لجينكينز تحتوي على بعض البيانات التي لا نحتاج إليها (على سبيل المثال ، البرنامج المساعد Blueocean) ولا تحتوي على ما سنحتاجه بالتأكيد (على سبيل المثال ، android sdk). تقرر إنشاء صورة عامل الإرساء الخاصة بنا والتي بداخلها ستقوم بتنزيل وتشغيل ملف الحرب ، وتنزيل وتثبيت android sdk ، بالإضافة إلى تهيئة جميع الإعدادات الأخرى التي نحتاج إليها. من أجل بدء تشغيله لاحقًا ، نحتاج إلى نظام مضيف مثبت به عامل ميناء. أقترح هنا عدم إعادة اختراع العجلة واستخدام DigitalOcean.

إنشاء وتكوين جهاز الظاهري


بادئ ذي بدء ، إذا كان هناك شخص آخر غير مسجل هناك ، أقترح التسجيل (هنا في وقت كتابة المقال كان هناك رابط إحالة ، ولكن بعد قراءة القواعد رميتها). بعد التسجيل ، يمكنك google رمزًا ترويجيًا واحدًا أو آخر على الإنترنت ، والحصول على حوالي 10 دولارات للبدء.

بعد أن نحتاج إلى الحصول على قطرة جديدة. حدد قطرات العنصر ، ثم قم بإنشاء دروبلت .

صورة

النظام المضيف هو أوبونتو 18.04. يمكنك اختيار صورة مثبتة بالفعل في Docker وتكوينها ، لكننا سنفعل كل شيء بمفردنا. نظرًا لأن تجميع عمليات بناء android لا يزال كثيف الاستخدام للموارد ، نحتاج إلى اختيار تكوين لا يقل عن 20 دولارات حتى يتم جمعها بشكل طبيعي وسريع نسبياً.

صورة

سنختار موقعًا أقرب (على سبيل المثال ، في ألمانيا). ثم هناك خياران لكيفية الاتصال بخادمنا الافتراضي. يمكننا إضافة مفتاح ssh أو الاستغناء عنه. إذا لم نذكر في هذا المكان المفتاح الذي يجب استخدامه ، فسيتم إرسال كلمة المرور الخاصة بالمستخدم الجذر إلى بريدنا.

صورة

هنا يمكننا تغيير اسم الخادم ، واستكمال الإنشاء من خلال النقر على زر إنشاء .

صورة

الآن نذهب إلى القطرة التي تم إنشاؤها ، ونسخ عنوان IP لأنفسنا ، لمزيد من الاتصال والتكوين.

صورة

نحن بحاجة إلى عميل سه. إذا كنت تعمل من تحت الخشخاش ، فيمكنك استخدام الجهاز الطرفي القياسي ، وإذا كان من تحت Windows ، فيمكننا استخدام المعجون للعمل أو استخدام نظام Linux الفرعي (لنظام Windows 10 فقط). أنا شخصياً استخدم الخيار الأخير ، وهو يناسبني تمامًا.

اتصل بخادمنا باستخدام الأمر التالي

 ssh root@YOUR_IP_ADDRESS 

سوف نقدم لكم وحدة التحكم لحفظ المفتاح ، ونحن نتفق مع هذا. بعد الاتصال ، سننشئ مستخدمًا جديدًا لأنفسنا ، ونضيفه إلى المستخدمين الخارقين (ونمنحه الفرصة لاستخدام sudo بدون كلمة مرور) ، وانسخ مفتاح الوصول إليه عبر ssh ونقول أنه مالك هذه الملفات (وإلا فلن يعمل). يتم تغيير اسم المستخدم إلى أي مناسبة لك.

 useradd -m -s /bin/bash username \ && echo 'username ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \ && mkdir /home/username/.ssh \ && cp /root/.ssh/authorized_keys /home/username/.ssh/authorized_keys \ && chown username:username -R /home/username/.ssh 

قطع الاتصال من الجذر باستخدام الأمر

 exit 

وسنقوم بإعادة الاتصال بالفعل بمساعدة المستخدم الجديد الذي تم إنشاؤه

 ssh username@YOUR_IP_ADDRESS 

بعد تحديث النظام ، وإعادة تشغيل الخادم الخاص بنا (إذا كان النظام أثناء عملية التحديث سيطلب منك شيئًا ، يكفي دائمًا اختيار القيم الافتراضية في هذه الحالة).

 sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo reboot 

اكتمال الإعداد الأساسي. من وجهة نظر النظام القتالي ، فهو غير آمن للغاية ، ولكنه في إطار هذه المقالة مناسب تمامًا.

تثبيت عامل الميناء.


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

 sudo apt-get remove docker docker-engine docker.io containerd runc 

لا تنس أن تتصل أولاً عبر ssh بخادمنا. يتم وصف تثبيت Docker نفسه بتفصيل كبير في الوثائق ، وسأقدم أوامر عامة لتسهيل الأمر عليك. ما يفعلونه يمكن قراءتها هناك. أولاً أضف المستودع.

 sudo apt update \ && sudo apt install -y apt-transport-https ca-certificates \ curl gnupg-agent software-properties-common \ && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - \ && sudo apt-key fingerprint 0EBFCD88 \ && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 

ثم قم بتثبيت Docker نفسه:

 sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io 

حتى نتمكن في المستقبل من استدعاء أوامر docker بدون بادئة sudo ، قم بتنفيذ الأمر التالي (الموضح أيضًا بعناية في التعليمات ).

 sudo usermod -aG docker username 

بعد ذلك ، تحتاج إلى إعادة تسجيل الدخول (باستخدام أمر الخروج وإعادة الاتصال بالخادم) حتى يعمل هذا.

تم تثبيت عامل الميناء نفسه ، والذي يمكننا التحقق من الأمر

 docker run hello-world 

تقوم بتنزيل صورة الاختبار وتشغيلها في الحاوية. الحاوية ، بعد البدء ، تطبع رسالة إعلامية وتخرج.

تهانينا ، لقد انتهينا من مرحلة إعداد الخادم للعمل!

خلق صورة عامل الميناء الخاص بك


سنقوم بإنشاء صورة Docker عن طريق كتابة Dockerfile الخاصة بنا. أمثلة على كيفية القيام بذلك بشكل صحيح على الإنترنت عربة وعربة صغيرة ، سأعرض الإصدار النهائي الخاص بي ، وسأحاول التعليق عليه قدر الإمكان. يوجد أيضًا دليل إرشادات من عامل الإرساء نفسه مع أمثلة على الإملاء الصحيح والشرعي لرسو السفن.

قم بإنشاء Dockerfile وافتحه للتحرير

 touch Dockerfile && nano Dockerfile 

في ذلك ، على سبيل المثال ، سنضع محتويات ملف Dockerfile الخاص بي

بلدي dockerfile بأكمله مع التعليقات
 #    . FROM ubuntu:18.04 #      LABEL author="osipovaleks" LABEL maintainer="osipov.aleks.kr@gmail.com" LABEL version="1.0" LABEL description="Docker image for Jenkins with Android SDK" #  ,  Jenkins    ENV TZ=Europe/Kiev RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # i386    ia32-libs RUN dpkg --add-architecture i386 #      RUN apt-get update && apt-get install -y git \ wget \ unzip \ sudo \ tzdata \ locales\ openjdk-8-jdk \ libncurses5:i386 \ libstdc++6:i386 \ zlib1g:i386 #  ,       RUN apt-get clean && rm -rf /var/lib/apt/lists /var/cache/apt #  RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 #   Android Sdk     ARG android_home_dir=/var/lib/android-sdk/ ARG sdk_tools_zip_file=sdk-tools-linux-4333796.zip RUN mkdir $android_home_dir RUN wget https://dl.google.com/android/repository/$sdk_tools_zip_file -P $android_home_dir -nv RUN unzip $android_home_dir$sdk_tools_zip_file -d $android_home_dir RUN rm $android_home_dir$sdk_tools_zip_file && chmod 777 -R $android_home_dir # environment    ENV ANDROID_HOME=$android_home_dir ENV PATH="${PATH}:$android_home_dir/tools/bin:$android_home_dir/platform-tools" ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ #   Android SDK RUN yes | sdkmanager --licenses #    Jenkins ENV JENKINS_HOME=/var/lib/jenkins RUN mkdir $JENKINS_HOME && chmod 777 $JENKINS_HOME #     jenkins,   ,         RUN useradd -m jenkins && echo 'jenkins ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers USER jenkins WORKDIR /home/jenkins #   war     Jenkins RUN wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war -nv CMD java -jar jenkins.war #      EXPOSE 8080/tcp 


بعض التوضيحات:

  • في البداية ، كانت هناك رغبة في استخدام جبال الألب الأفتح بدلاً من أوبونتو ، لكن ليس لديها دعم ia32-libs ، وهو أمر ضروري لبناء المشاريع باستخدام Android SDK.
  • نحن نقوم بتثبيت openjdk-8-jdk ، وليس نظام openjdk-8-jdk بدون رأس ، حيث أن بعض وظائف Jenkins تحتاج إلى نظام كامل (على سبيل المثال ، عرض نتائج اختبار الوحدة).
  • من الضروري تثبيت لغات ، نظرًا لحقيقة أنه في بعض المشروعات ، بدونها ، يتعطل التجميع دون أخطاء وسجلات واضحة ، وقضيت عدة أيام للوصول إلى أسفل هذا السبب (على أوبونتو العادية التي ليست في ميناء ، يتم ملء جميع اللغات بشكل افتراضي) .
  • نحتاج إلى قبول جميع التراخيص الخاصة بـ Android SDK على الفور ، حتى يتمكن Jenkins أثناء عملية الإنشاء من تثبيت المكونات التي يحتاجها بشكل مستقل (على سبيل المثال ، SDKs التي يحتاجها لإصدارات مختلفة من api). إذا لزم الأمر ، في وقت لاحق داخل حاوية الإرساء ، سيكون من الممكن إدارة SDK باستخدام sdkmanager ، على سبيل المثال sdkmanager --list تسمح sdkmanager --list بعرض جميع المكونات المتاحة وجميع المكونات المثبتة ، و sdkmanager --install "platforms;android-26" بتثبيت SDK للإصدار 26 من api.
  • بشكل عام ، كان من الممكن عدم بدء تشغيل جنكين المستخدم ، والبقاء مع مستخدم الجذر ، ولكن بطريقة ما ، هذا ليس صحيحًا تمامًا ، لا يمكنك أيضًا منحه حقوق المستخدم الخارق ، ولكن تم ذلك من حيث الراحة ، إذا كان هناك حاجة إلى تثبيت شيء ما في مرحلة الإعداد والتصحيح.
  • اتضح أن الحجم الأساسي للصورة كبير جدًا (حوالي 800 ميغابايت) ، لكن عمومًا توصلت إلى استنتاج مفاده أن هذا ليس بالغ الأهمية بالنسبة لي ، ومن الأسهل بالنسبة لي تنزيله في هذا النموذج بدلاً من قضاء الوقت في البحث عن الحزم وإزالتها التي لا أحتاج إليها.

بعد كتابة Dockerfile ، نحتاج إلى تحويلها إلى صورة جاهزة لـ Docker ، على أساسها سيتم إنشاء الحاويات. يتم ذلك ببساطة عن طريق فريق

 docker build -t jenkins-image 

حيث تكون المعلمة -t jenkins-image مسؤولة عن اسم صورتك ، وتشير النقطة في نهاية الأمر إلى أنك بحاجة إلى البحث عن Dockerfile للتجميع داخل هذا الدليل. تستغرق عملية التجميع نفسها بعض الوقت ، وبعد التجميع يجب أن يكون هناك شيء مثل هذا في وحدة التحكم.
بنيت بنجاح 9fd8f5545c27
تم وضع علامة jenkins-image بنجاح: الأحدث
الذي يخبرنا أنه تم تجميع صورتنا بنجاح ، ويمكننا المضي قدمًا إلى الخطوة التالية ، وهي إطلاق الحاوية الخاصة بنا

عامل ميناء hub والصور الجاهزة


نعم ، بالطبع ، يمكننا استخدام صورنا الجاهزة لتشغيل الحاوية ، ولكن إذا كنا بحاجة إلى القيام بذلك على أكثر من عدة أجهزة ، فإن إنشاء ملف Dockerfile في كل مرة وبناء صورة جاهزة منه لن يكون ملائمًا للغاية. وإذا قمنا أيضًا بتحديث محتويات ملف Dockerfile الخاص بنا ، فلن يكون تطبيق التغييرات على جميع العقد مناسبًا على الإطلاق. لهذه الأغراض ، يوجد مستودع عام لصور Docker Hub . يتيح لك عدم جمع صورة في كل مرة ، على كل عقدة ، ولكن ببساطة تنزيلها على نفسك من المستودع العام ، واستخدامها بالتساوي على جميع الآلات. على سبيل المثال ، تتوفر الصورة التي كانت بمثابة مثال لهذه المقالة في مستودع باسم osipovaleks / docker-jenkins-android ، وفي وقت لاحق في المقالة سوف نعمل معها.

لا تتضمن هذه المقالة دراسة مفصلة لـ Docker Hub ، ولن نفهم كيفية تحميل صورنا هناك (على الرغم من أن هذا ليس صعبًا للغاية) وما الذي يمكن القيام به هناك ، لن نفهم أنه ربما لا تزال هناك مستودعات خاصة أو عامة خاصة بك ، في هذا كل شيء يمكن تسويتها بشكل مستقل إذا لزم الأمر.

إطلاق الحاويات


هناك طريقتان لبدء الحاوية.

  1. الطريقة الأولى ، ببساطة باستخدام docker run ، تتيح لك القيام بذلك بسهولة وبسرعة بالطريقة التالية

     docker run --name jenkins -d -it -v jenkins-data:/var/lib/jenkins -v jenkins-home:/home/jenkins -p 8080:8080 --restart unless-stopped osipovaleks/docker-jenkins-android 

    حيث يحتوي الأمر run على المعلمات التالية

    • - اسم --name jenkins - اسم الحاوية المستقبلية
    • -d - بدء الحاوية في الخلفية
    • -it - أعلام للعمل مع STDIN و tty
    • -v jenkins-data:/var/lib/jenkins و -v jenkins-home:/home/jenkins - قم بإنشاء (إن لم يتم إنشاؤه) وتعيين ملفات حجم خاص إلى الأقسام الداخلية للحاوية التي ستسمح لنا بحفظ Jenkins المكون لدينا حتى بعد إعادة البناء حاوية
    • -p 8080:8080 - قم بتعيين المنفذ المضيف إلى منفذ الحاوية حتى يتسنى لنا الوصول إلى واجهة الويب (نعم هذا هو المنفذ الذي حددناه في Dockerfile)
    • --restart unless-stopped - يحدد الخيار سياسة التشغيل التلقائي للحاوية بعد إعادة تشغيل المضيف (في هذه الحالة ، التشغيل التلقائي إذا لم يتم إيقاف تشغيل الحاوية يدويًا)
    • osipovaleks/docker-jenkins-android - صورة للنشر.

    عند الخروج إلى وحدة التحكم Docker ، يجب أن نحصل على معرف الحاوية التي تم إنشاؤها ، ونعرض أيضًا معلومات حول كيفية تحميل الصورة في النظام (بالطبع ، إذا لم يتم تحميلها بالفعل) ، شيء من هذا القبيل
    يتعذر العثور على الصورة "osipovaleks / docker-jenkins-android: الأحدث" محليًا
    الأحدث: السحب من osipovaleks / docker-jenkins-android
    6cf436f81810: سحب كامل
    987088a85b96: سحب كامل
    b4624b3efe06: سحب كامل
    d42beb8ded59: سحب كاملة
    b3896048bb8c: سحب كامل
    8eeace4c3d64: سحب كاملة
    d9b74624442c: سحب كاملة
    36bb3b7da419: سحب كاملة
    31361bd508cb: سحب مكتمل
    cee49ae4c825: سحب كاملة
    868ddf54d4c1: سحب مكتمل
    361bd7573dd0: سحب كامل
    bb7b15e36ae8: سحب كامل
    97f19daace79: سحب كامل
    1f5eb3850f3e: سحب مكتمل
    651e7bbedad2: سحب كامل
    a52705a2ded7: سحب كاملة
    الموجز: sha256: 321453e2f2142e433817cc9559443387e9f680bb091d6369bbcbc1e0201be1c5
    الحالة: تم تنزيل صورة أحدث لـ osipovaleks / docker-jenkins-android: الأحدث
    ef9e5512581da66d66103d9f6ea6ccd74e5bdb3776747441ce6a88a98a12b5a4
  2. تتضمن الطريقة الثانية للبدء كتابة ملف إنشاء خاص ، حيث يتم وصف أمر التشغيل ببساطة باستخدام لغة YAML ، ويتم تشغيله باستخدام Docker Compose.

    للقيام بذلك ، نحتاج إلى تثبيته:

     sudo apt update && sudo apt install -y docker-compose 

    بعد ذلك ، قم بإنشاء دليل للمشروع (هذا مهم إذا كنت تهتم بما ستسمى وحدات التخزين التي تم إنشاؤها تلقائيًا للحاوية) وانتقل إليها

     mkdir jenkinsProject && cd jenkinsProject 

    وفي الداخل نقوم بإنشاء ملف الإنشاء نفسه والدخول في وضع التحرير

     touch docker-compose.yml && nano docker-compose.yml 

    ووضع المحتويات التالية في ذلك

     version: '3' services: jenkins: container_name: jenkins image: osipovaleks/docker-jenkins-android ports: - "8080:8080" restart: unless-stopped volumes: - "jenkins-data:/var/lib/jenkins" - "jenkins-home:/home/jenkins" volumes: jenkins-data: jenkins-home: 

    في ذلك ، ربما ، السطر الأول فقط يطرح أسئلة ( version: '3' ) يشير إلى إصدار إمكانيات ملف الإنشاء ، بالإضافة إلى قسم مع كتلة volumes التي تسرد تلك المستخدمة في هذه الحاوية

    قم بتشغيل الحاوية الخاصة بك باستخدام الأمر:

     docker-compose up -d 

    حيث تشير علامة -d أيضًا إلى أنه سيتم إنشاء الحاوية وتشغيلها في الخلفية. نتيجةً لذلك ، يجب على Docker إظهار شيء مثل التالي:
    إنشاء وحدة تخزين "jenkinsproject_jenkins-data" باستخدام برنامج التشغيل الافتراضي
    إنشاء وحدة تخزين "jenkinsproject_jenkins-home" باستخدام برنامج التشغيل الافتراضي
    سحب جنكينز (osipovaleks / docker-jenkins-android: الأحدث) ...
    الأحدث: السحب من osipovaleks / docker-jenkins-android
    6cf436f81810: سحب كامل
    987088a85b96: سحب كامل
    b4624b3efe06: سحب كامل
    d42beb8ded59: سحب كاملة
    b3896048bb8c: سحب كامل
    8eeace4c3d64: سحب كاملة
    d9b74624442c: سحب كاملة
    36bb3b7da419: سحب كاملة
    31361bd508cb: سحب مكتمل
    cee49ae4c825: سحب كاملة
    868ddf54d4c1: سحب مكتمل
    361bd7573dd0: سحب كامل
    bb7b15e36ae8: سحب كامل
    97f19daace79: سحب كامل
    1f5eb3850f3e: سحب مكتمل
    651e7bbedad2: سحب كامل
    a52705a2ded7: سحب كاملة
    ملخص: sha256: 321453e2f2142e433817cc9559443387e9f680bb091d6369bbcbc1e0201be1c5
    الحالة: تم تنزيل صورة أحدث لـ osipovaleks / docker-jenkins-android: الأحدث
    إنشاء جنكينز ...
    خلق جنكينز ... القيام به
    تذكر ، قلت إن اسم وحدات التخزين التي تم إنشاؤها سيعتمد على اسم المشروع؟ قم بتشغيل الأمر:

     docker volume ls 

    ونحن نحصل على مثل هذا الإخراج
    اسم المجلد الحجم
    jenkinsproject_jenkins-data
    jenkinsproject_jenkins المحلية
    حيث سنرى أنه على الرغم من حقيقة أن اسم وحدة التخزين قد تم اختياره من قبل jenkins-home ، في الواقع ، بادئة من اسم المشروع تمسك به وحجم الاسم تبين أنه jenkinsproject _jenkins-home


أي خيار بدء التشغيل للاستخدام؟ هنا يمكنك أن تختار لنفسك ، ويعتقد أن Docker Compose هي بالأحرى أداة لإطلاق عدة حاويات في وقت واحد ، وهي مرتبطة ببعضها البعض ، وإذا كنت بحاجة إلى تشغيل حاوية واحدة فقط ، فيمكنك استخدام docker run .

الآن بعد هذه الخطوات الفرعية لبدء الخادم وتكوينه ، وكذلك بدء تشغيل الحاوية مع Jenkins ، يمكننا المتابعة إلى التكوين الأولي

إعداد جنكينز الأولي


خذ عنوان IP لخادمنا ، أضف المنفذ 8080 الذي أشرنا إليه إليه واتبع هذا الرابط في المتصفح.

http://YOUR_IP_ADDRESS:8080/

إذا كان قد تم قبل كل شيء تكوين كل شيء وبدأ بشكل صحيح ، ثم سنرى الصورة التالية



بالنسبة للإعداد الأول ، نحتاج إلى إدخال كلمة المرور التي أنشأها النظام أثناء التثبيت. للقيام بذلك ، نحتاج فقط إلى إلقاء نظرة على محتويات الملف /var/lib/jenkins/secrets/initialAdminPassword . ولكن هذا الملف موجود داخل الحاوية قيد التشغيل ، ومن أجل قراءته ، نحتاج إلى الاتصال بالحاوية باستخدام الأمر التالي:

 docker exec -it jenkins /bin/bash 

عندما يكون الخيار -it مشابهًا لتشغيل docker run jenkins ، فإن jenkins هو اسم الحاوية الخاصة بنا ، وسوف يقوم /bin/bash بتشغيل /bin/bash لنا في الحاوية ومنحه حق الوصول. بعد ذلك ، يمكننا أن نرى كلمة المرور الأولية لجينكينز:

 cat /var/lib/jenkins/secrets/initialAdminPassword 

يظهر التالي في وحدة التحكم
91092b18d6ca4492a2759b1903241d2a
هذه هي كلمة المرور

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

 docker logs jenkins 


حيث jenkins اسم الحاوية الخاصة بنا ، وفي السجلات يمكنك رؤية ما يلي:

***************************************************** ***********
***************************************************** ***********
******************************** .... ***********

الإعداد الأولي لـ Jenkins مطلوب. تم إنشاء مستخدم مسؤول وإنشاء كلمة مرور.
يرجى استخدام كلمة المرور التالية لمتابعة التثبيت:

91092b18d6ca4492a2759b1903241d2a

يمكن العثور على هذا أيضًا على: / var / lib / jenkins / secrets / initialAdminPassword

***************************************************** ***********
***************************************************** ***********

***************************************************** ***********

هذا الخيار أبسط قليلاً وأسرع.

انسخها ، الصقها في حقل كلمة مرور المسؤول في واجهة الويب وانقر فوق " متابعة" . في الشاشة التالية ، حدد تثبيت المكونات الإضافية المقترحة وتثبيت مجموعة من المكونات الإضافية الافتراضية.





بعد تثبيت المكونات الإضافية ، أنشئ مستخدمًا لأنفسنا وانقر فوق " حفظ وإنهاء"



نحن نتفق مع قسم تهيئة الحالة ، حيث يُطلب منا ملء عنوان URL الذي سيعمل عليه جينكينز (في حالتنا ، اترك كل شيء كما هو)



وعلى الشاشة التالية ، انقر فوق Start (بدء) العزيزة باستخدام Jenkins



لذلك ، قمنا بتثبيت وإطلاق جنكينز!



من الممكن بالفعل التعامل معها ، ولكن من أجل جمع تصميمات Android الخاصة بنا ، ستحتاج إلى تكوين بضع نقاط إضافية. يرتبط توطين جنكينز باللغة المحددة في متصفحك ، وبالطبع فإن الترجمة إلى اللغة الروسية ليست كاملة حتى النهاية ، ونحصل على مزيج جهنمي من اللغتين الروسية والإنجليزية. إذا نجحت بنفس الطريقة تمامًا ، وأثارت غضبك ، فيمكنك استخدام المكون الإضافي الخاص وتعيين لغة الواجهة الافتراضية. حسنًا ، أو بدّل متصفحك إلى الواجهة الإنجليزية.

انتقل إلى إعدادات جينكينز واختر تكوين النظام.



تحقق من متغيرات البيئة ، وأدخل اسم ANDROID_HOME في الحقل ، وحدد / var / lib / android-sdk / في الحقل (حددنا هذه البيانات في Dockerfile كدليل رئيسي لـ Android SDK).



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



قم بإعداد قسم JDK (حيث تم إدخال متغير JAVA_HOME أيضًا من قبلنا في Dockerfile ، ويمكننا استخدام قيمته / usr / lib / jvm / java-8-openjdk-amd64 / هنا ).



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



مع هذا يمكننا إنهاء المرحلة الأولى لدينا. نظام جنكينز يعمل بشكل كامل ويمكننا الانتقال إلى تخصيص مهام البناء بأنفسهم. يرجى ملاحظة أن النظام قد تم تخصيصه وفقًا لاحتياجاتنا وقد لا يوفر ما تحتاجه - على سبيل المثال ، لا توجد محاكيات Android للاختبار و NDK.

إذا كانت هذه المقالة تهم أي شخص ، فسأواصل في الجزء الثاني بمثال واحد أو اثنين من المتاعب ، وسأصف تكامل Jenkins و Bitbucket (هو ، وليس Github ، لأنه أسهل مع المستودعات الخاصة والمقالات المجانية على الإنترنت حول إنه أصغر ، ولكن ربما يكون أكثر متعة) ، وسأخبرك عن كيفية تكوين صداقات باستخدام المفتاح ssh الموجود في حاوياتنا من خلال المستودع ، وإشعارات البريد الإلكتروني ، بالإضافة إلى العديد من الرقائق الأخرى. بشكل عام ، عن كل ما قمنا بتكوينه.

أطلب منك عدم الركل كثيرًا ، هذا هو مقالي الأول عن هبر. جيد للجميع!

Source: https://habr.com/ru/post/ar443606/


All Articles