كيفية تكوين Grails 2.4.0 لحل القطع الأثرية من JFrog Artifactory مع المصادقة؟
-
20-12-2019 - |
سؤال
إنها مشكلة تحدث كل بضعة أشهر.أقوم ببعض ترقيات الكأس ولا يستطيع التطبيق حل القطع الأثرية الخاصة بي من مستودع التصنيع الآمن الخاص بي.هذه المرة قمت بالترقية إلى Grails 2.4.0 ولكن المشكلة موجودة مرة أخرى.لقد قمت بتكوين المستودع الخاص بي كما هو موضح في وثائق Grails (التي تبدو قديمة جدًا) ولكن لا تستطيع Grails حل تبعياتي من الريبو الخاص بنا.لا يتم المصادقة بشكل صحيح.
إذن أسئلتي الأخيرة التي طرحها العديد من الأشخاص بالفعل:
كيفية تكوين Grails (الحالي 2.4.0) مع maven كمحلل التبعية للعمل مع مستودع مخضرم خاص (مصنع) مع المصادقة بشكل صحيح؟ما الذي يجب علي كتابته إلى BuildConfig الخاص بي حتى يعمل؟
هذا لا يعمل:
if (Environment.current == Environment.PRODUCTION) {
if (grails.project.dependency.resolver == "maven") {
mavenRepo "http://repo.myRepoHost.com/plugins-release-local/", {
auth([
username: "reader",
password: "readerPw"
])
}
}
}
المحلول 2
يمكنني حل هذه المشكلة ووجدت سبب وجود مشاكل دائما مع مستودعات آثارية تتطلب المصادقة.
هناك مشكلة حالة HTTP Heather مع Artifactory. إذا كنت قد جعلت من القطارات القذرة بأكملها الخاصة مع Admin-> Security-> General-> اسمح لعلم الاختيار الوصول المجهول (غير محدد) كل شيء يعمل لأن Artifactory يستجيب برمز حالة HTTP "401 إذن مطلوب" والغزورات طلب آخر مع تكوينه أوراق اعتماد التفويض التي تعمل بشكل جيد.
إذا قمت بتحقق من مربع الاختيار (نظرا لأن لديك مستودعات خاصة ورسمية مثلي)، فستحصل على مشكلة مقدمة لأن Artifactory لا يستجيب مع رمز الحالة 401 بعد الآن. بدلا من ذلك يستجيب ب "404 غير موجود" حتى لو Artifact في مستودع ومجهول فقط ليس لديه حق الوصول إليه. في Access.log، يمكنك العثور على "Download Demied" في هذه الحالة، ولا تقدم الشجر طلبا ثانيا مع بيانات الاعتماد التي تكوينها بسبب رمز الحالة 404.
إذا قمت بإنشاء مثيلات آثارية منفصلة لمستودعات عامة وخاصة أو علينا تنفيذ خيار تكوين جديد للحصول على وجبات لدعم ميزة "مصادقة دائما" على المستودعات المختارة. سأقترح هذا لفريق تطوير الشاجرات عبر Grains Bughtracker وسأبحث أيضا عن المطورين القذرين لبناء خيار الحل البديل لهذا الغرض.
نصائح أخرى
الإعداد التالي يعمل معي مع Artifactory
grails.project.dependency.resolver = "maven"
grails.project.ivy.authentication = {
repositories {
mavenRepo('http://localhost:8081/artifactory/grails-remote') {
auth([
realm: "Artifactory Realm",
username: 'user',
password: 'pass'
])
}
}
}
grails.project.dependency.resolution = {
...
repositories {
inherits true
}
...
}
لاحظ أن المستودع لم يتم تعريفه في ملف grails.project.dependency.resolution
قسم.
بالإضافة إلى ذلك، يجب عليك التأكد من أن المستخدم "القارئ" لديه الأذونات المطلوبة لمستودع "plugins-release-local".
إحدى الطرق الجيدة لاختبار إعداد المستودع هي التحقق من سجل الطلب/الوصول Artifactory ومراقبة الطلبات التي تنفذها Grails.