ProHoster > بلوق > إدارة > إعداد GitLab CI لتحميل مشروع java إلى maven Central
إعداد GitLab CI لتحميل مشروع java إلى maven Central
هذه المقالة مخصصة لمطوري جافا الذين يحتاجون إلى نشر منتجاتهم بسرعة إلى sonatype و / أو إنشاء مستودعات مركزية باستخدام GitLab. في هذه المقالة ، سأتحدث عن إعداد gitlab-runner و gitlab-ci و maven-plugin لحل هذه المشكلة.
المتطلبات الأساسية:
تخزين آمن لمفاتيح mvn و GPG.
تأمين تنفيذ مهام CI العامة.
تحميل القطع الأثرية (إصدار / لقطة) إلى المستودعات العامة.
فحص تلقائي لإصدارات الإصدار للنشر في Maven Central.
حل عام لتحميل القطع الأثرية إلى مستودع لمشاريع متعددة.
وصف مفصل لآلية نشر القطع الأثرية إلى Maven Central عبر خدمة استضافة مستودع Sonatype OSS موصوفة بالفعل في هذا المقال المستعمل غوغل بلكس، لذلك سوف أشير إلى هذه المقالة في الأماكن الصحيحة.
التسجيل المسبق في سوناتايب جيرا وابدأ تذكرة لفتح المستودع (لمزيد من التفاصيل ، اقرأ القسم قم بإنشاء تذكرة Sonatype JIRA). بعد فتح المستودع ، سيتم استخدام زوج تسجيل الدخول / كلمة المرور لـ JIRA (المشار إليه فيما يلي باسم حساب Sonatype) لتحميل الأدوات إلى رابط Sonatype.
علاوة على ذلك ، يتم وصف عملية إنشاء مفتاح GPG بشكل جاف للغاية. انظر القسم لمزيد من التفاصيل. تكوين GnuPG لتوقيع المشغولات
إذا كنت تستخدم وحدة تحكم Linux لإنشاء مفتاح GPG (gnupg / gnupg2) ، فأنت بحاجة إلى التثبيت RNG الأدوات لتوليد الانتروبيا. خلاف ذلك ، قد يستغرق إنشاء المفاتيح وقتًا طويلاً جدًا.
بادئ ذي بدء ، تحتاج إلى إنشاء وتكوين مشروع يتم فيه تخزين خط الأنابيب لنشر القطع الأثرية. لقد اتصلت بمشروعي ببساطة وغير معقد - نشر
بعد إنشاء المستودع ، تحتاج إلى تقييد الوصول لتغيير المستودع.
انتقل إلى المشروع -> الإعدادات -> المستودع -> الفروع المحمية. نحذف جميع القواعد ونضيف قاعدة واحدة مع Wildcard * مع الحق في الدفع والدمج فقط للمستخدمين الذين لديهم دور الصيانة. ستعمل هذه القاعدة مع جميع مستخدمي هذا المشروع والمجموعة التي ينتمي إليها هذا المشروع.
إذا كان هناك العديد من المشرفين ، فإن أفضل حل هو تقييد الوصول إلى المشروع من حيث المبدأ.
انتقل إلى المشروع -> الإعدادات -> عام -> الرؤية وميزات المشروع والأذونات وتعيين رؤية المشروع على خاص.
لديّ مشروع في الوصول العام ، حيث إنني أستخدم GitLab Runner الخاص بي وليس لدي سوى حق الوصول لتعديل المستودع. حسنًا ، ليس من مصلحتي في الواقع إظهار المعلومات الخاصة في سجلات خطوط الأنابيب العامة.
تشديد قواعد تغيير المستودع
انتقل إلى المشروع -> الإعدادات -> المستودع -> قواعد الدفع وقم بتعيين قيود Committer الخاصة بالعلامات ، وتحقق مما إذا كان المؤلف من مستخدمي GitLab. أوصي أيضًا بالإعداد الالتزام بالتوقيع، وقم بتعيين علامة عمليات رفض غير الموقعة.
بعد ذلك ، تحتاج إلى تكوين مشغل لتشغيل المهام
انتقل إلى المشروع -> الإعدادات -> CI / CD -> مشغلات خط الأنابيب وأنشئ رمزًا جديدًا للمشغل
يمكن إضافة هذا الرمز المميز على الفور إلى التكوين العام للمتغيرات لمجموعة من المشاريع.
انتقل إلى المجموعة -> الإعدادات -> CI / CD -> المتغيرات وأضف متغيرًا DEPLOY_TOKEN مع رمز المشغل في القيمة.
يصف هذا القسم التكوين لتشغيل المهام عند النشر باستخدام عداء أصلي (محدد) وعام (مشترك).
عداء محدد
أستخدم العدائين الخاصين بي ، لأنه أولاً وقبل كل شيء مريح وسريع ورخيص.
بالنسبة للعداء ، أوصي بـ Linux VDS مع وحدة معالجة مركزية واحدة ، وذاكرة وصول عشوائي 1 جيجا بايت ، و 2 جيجا بايت HDD. سعر الإصدار ~ 20 في السنة.
عداء بلدي
بالنسبة للعداء ، أخذت VDS 4 CPU و 4 غيغابايت من ذاكرة الوصول العشوائي و 50 غيغابايت SSD. تكلف حوالي 11000 ولم يندم عليها أبدًا.
لدي ما مجموعه 7 آلات. 5 على أروبا و 2 على ihor.
لذلك ، لدينا عداء. الآن سنقوم بإعداده.
نذهب إلى الجهاز عبر SSH ونثبت java و git و maven و gnupg2.
Runtime platform arch=amd64 os=linux pid=17594 revision=3001a600 version=11.10.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.com/
Please enter the gitlab-ci token for this runner:
REGISTRATION_TOKEN
Please enter the gitlab-ci description for this runner:
[ih1174328.vds.myihor.ru]: Deploy Runner
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
Registering runner... succeeded runner=ZvKdjJhx
Please enter the executor: docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes, docker, ssh, docker+machine, shell:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
تأكد من تسجيل العداء. انتقل إلى gitlab.com -> publish-project -> Settings -> CI / CD -> العداءون -> عداءون محددون -> المتسابقون المنشطون لهذا المشروع
شاشة
إضافة متفرق خدمة /etc/systemd/system/gitlab-deployer.service
نقوم بإنشاء مفتاح من خلال الإجابة على الأسئلة. لقد استخدمت اسمي والبريد الإلكتروني.
تأكد من تحديد كلمة المرور للمفتاح. القطع الأثرية سيتم توقيعها بهذا المفتاح.
gpg --gen-key
مراجعة
gpg --list-keys -a
/home/gitlab-deployer/.gnupg/pubring.gpg
----------------------------------------
pub 4096R/00000000 2019-04-19
uid Petruha Petrov <[email protected]>
sub 4096R/11111111 2019-04-19
تحميل مفتاحنا العام إلى خادم المفاتيح
gpg --keyserver keys.gnupg.net --send-key 00000000
gpg: sending key 00000000 to hkp server keys.gnupg.net
إذا كان لديك مشروع متعدد الوحدات ، ولست بحاجة إلى تحميل وحدة معينة إلى المستودع ، فأنت بحاجة إلى الإضافة إلى ملف pom.xml الخاص بهذه الوحدة nexus-staging-maven-plugin مع العلم skipNexusStagingDeployMojo
<repositories>
<repository>
<id>SonatypeNexus</id>
<url>https://oss.sonatype.org/content/groups/staging/</url>
<!-- Не надо указывать флаги snapshot/release для репозитория -->
</repository>
</repositories>
المزيد من الإيجابيات
قائمة غنية جدًا بالأهداف للعمل مع مستودع nexus (mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin).
فحص الإصدار التلقائي لقابلية التنزيل في مركز المخضرم
عند تعيين العلامة ، يتم تشغيل المهمة المقابلة في مشروع النشر تلقائيًا لتحميل نسخة الإصدار إلى nexus (مثال).
أفضل جزء هو أن الإصدار القريب يتم تشغيله تلقائيًا في nexus.
[INFO] Performing remote staging...
[INFO]
[INFO] * Remote staging into staging profile ID "9043b43f77dcc9"
[INFO] * Created staging repository with ID "orgtouchbit-1037".
[INFO] * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1037
[INFO] * Uploading locally staged artifacts to profile org.touchbit
[INFO] * Upload of locally staged artifacts finished.
[INFO] * Closing staging repository with ID "orgtouchbit-1037".
Waiting for operation to complete...
.........
[INFO] Remote staged 1 repositories, finished with success.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Shields4J 1.0.0 .................................... SUCCESS [ 9.603 s]
[INFO] test-core .......................................... SUCCESS [ 3.419 s]
[INFO] Shields4J client ................................... SUCCESS [ 9.793 s]
[INFO] TestNG listener 1.0.0 .............................. SUCCESS [01:23 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:47 min
[INFO] Finished at: 2019-04-21T04:05:46+03:00
[INFO] ------------------------------------------------------------------------
وإذا حدث خطأ ما ، فستفشل المهمة
[INFO] Performing remote staging...
[INFO]
[INFO] * Remote staging into staging profile ID "9043b43f77dcc9"
[INFO] * Created staging repository with ID "orgtouchbit-1038".
[INFO] * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1038
[INFO] * Uploading locally staged artifacts to profile org.touchbit
[INFO] * Upload of locally staged artifacts finished.
[INFO] * Closing staging repository with ID "orgtouchbit-1038".
Waiting for operation to complete...
.......
[ERROR] Rule failure while trying to close staging repository with ID "orgtouchbit-1039".
[ERROR]
[ERROR] Nexus Staging Rules Failure Report
[ERROR] ==================================
[ERROR]
[ERROR] Repository "orgtouchbit-1039" failures
[ERROR] Rule "signature-staging" failures
[ERROR] * No public key: Key with id: (1f42b618d1cbe1b5) was not able to be located on <a href=http://keys.gnupg.net:11371/>http://keys.gnupg.net:11371/</a>. Upload your public key and try the operation again.
...
[ERROR] Cleaning up local stage directory after a Rule failure during close of staging repositories: [orgtouchbit-1039]
[ERROR] * Deleting context 9043b43f77dcc9.properties
[ERROR] Cleaning up remote stage repositories after a Rule failure during close of staging repositories: [orgtouchbit-1039]
[ERROR] * Dropping failed staging repository with ID "orgtouchbit-1039" (Rule failure during close of staging repositories: [orgtouchbit-1039]).
[ERROR] Remote staging finished with a failure: Staging rules failure!
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Shields4J 1.0.0 .................................... SUCCESS [ 4.073 s]
[INFO] test-core .......................................... SUCCESS [ 2.788 s]
[INFO] Shields4J client ................................... SUCCESS [ 3.962 s]
[INFO] TestNG listener 1.0.0 .............................. FAILURE [01:07 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
نتيجة لذلك ، لم يتبق لنا سوى خيار واحد. أو احذف هذا الإصدار أو انشره.
بعد الإصدار ، بعد مرور بعض الوقت ، ستدخل القطع الأثرية
خارج الموضوع
لقد كان كشفًا لي أن المخضرم يفهرس المستودعات العامة الأخرى.
اضطررت إلى تحميل ملف robots.txt لأنه فهرس مستودعي القديم.
مشروع نشر منفصل يمكنك من خلاله تنفيذ العديد من مهام CI لتحميل الأدوات إلى المستودعات العامة للغات التطوير المختلفة.
يتم عزل مشروع النشر عن التداخل الخارجي ولا يمكن تعديله إلا من قبل المستخدمين الذين لديهم دور المالك والقائمين على الصيانة.
مشغل خاص منفصل مزود بذاكرة تخزين مؤقت "ساخنة" لتشغيل مهام النشر فقط.
نشر إصدارات لقطة / إصدار في مستودع عام.
فحص تلقائي لنسخة الإصدار للتأكد من جاهزيتها للنشر في Maven Central.
الحماية ضد النشر التلقائي للإصدارات "الخام" في maven Central.
إنشاء نسخ سريعة ونشرها "عند النقر".
مستودع واحد للحصول على إصدارات لقطة / إصدار.
خط أنابيب عام لبناء / اختبار / نشر مشروع جافا.
لا يعد إعداد GitLab CI موضوعًا معقدًا كما يبدو للوهلة الأولى. يكفي إعداد CI على أساس تسليم المفتاح عدة مرات، والآن أنت بعيد عن الهواة في هذا الشأن. علاوة على ذلك، فإن وثائق GitLab زائدة عن الحاجة. لا تخف من اتخاذ الخطوة الأولى. يظهر الطريق تحت خطوات الماشي (لا أتذكر من قال ذلك :)
سأكون سعيدا لردود الفعل.
في المقالة التالية ، سأوضح لك كيفية إعداد GitLab CI لتشغيل مهام اختبار التكامل بشكل تنافسي (تشغيل خدمات الاختبار باستخدام docker-compose) إذا كان لديك عداء صدفة واحد فقط.