سؤال

المشكلة

أحاول إنشاء تطبيقي في Jenkins، وهو موجود في مستودع خاص على Github، وهناك أيضًا وحدة فرعية خاصة.

يمكنني استنساخ المستودع الخاص في Jenkins من خلال إعداد بيانات الاعتماد الخاصة به، لكن Jenkins لا يمكنه استنساخ الوحدة الفرعية، وإليك نتيجة البناء الفاشل:

Started by an SCM change
Building in workspace /var/lib/jenkins/jobs/Project/workspace
Fetching changes from the remote Git repository
Fetching upstream changes from git@github.com:user/repogit
using GIT_SSH to set credentials 
Checking out Revision 9cc99b67cc676d0ea8ccd489a8327f5c6dbb8d7f (origin/branch)
[workspace] $ /bin/sh -xe /tmp/hudson2710403018107019432.sh
+ git submodule update --init --recursive
Initialized empty Git repository in /var/lib/jenkins/jobs/repository/submodule/.git/
ERROR: Repository not found.
fatal: The remote end hung up unexpectedly
Clone of 'git@github.com:user/submodule.git' into submodule path 'repository/submodule/' failed
Build step 'Execute shell' marked build as failure
Discard old builds...
#156 is removed because status FAILURE is not to be kept
Publishing Clover coverage report...
No Clover report will be published due to a Build Failure
Sending e-mails to: 
Finished: FAILURE

إليك ما حاولت القيام به في جنكينز

  • تمت محاولة تعيين السلوك الإضافي "سلوك الوحدة الفرعية المتقدم"، دون نجاح.
  • حاولت إعداد خطوة جديدة قبل إجراء الاختبارات باستخدام phpunit:

git submodule update --init --recursive

  • حاولت تعيين مستودع git في مشروع الوحدة الفرعية الخاصة بي أيضًا، وليس فقط المستودع الرئيسي الذي يتم اختباره، ولم يحالفني الحظ أيضًا.

كل منهم يسبب الخطأ الذي يشير إلى أن Jenkins لا يمكنه العثور على مستودع الوحدة الفرعية.

أي أفكار حول كيف يمكنني حل هذا؟

(اسم المستخدم والمسارات والمستودعات صحيحة، لقد قمت للتو بتغييرها للنشر هنا)

هل كانت مفيدة؟

المحلول

تم حلها.في بيانات الاعتماد الخاصة بي، كنت أستخدم مفتاح SSH مباشرًا (الخيار "إدخال مباشر")، بدلاً من وضعه في ملف.

لقد قمت للتو بوضع المفاتيح (العامة والخاصة) في ~/.ssh، وغيرت بيانات الاعتماد الخاصة بي إلى الخيار "من Jenkins master ~/.ssh".

كانت المشكلة أن الوحدة الفرعية لم تكن تستخدم بيانات الاعتماد التي حددتها للمستودع الرئيسي، بل كانت تحاول استخدام مفتاح ssh الافتراضي (.ssh/id_rsa).

الحل الآخر هو تمرير -i my_key إلى خطوة git submodule (تحتاج إلى هذا فقط إذا لم يكن مفتاحك في المسار الافتراضي (~/.ssh/id_rsa))

لا تنس أيضًا إعطاء الأذونات الصحيحة لمفاتيحك، ففي حالتي كان عليّ:

chown apache ~/.ssh/id_rsa*
chmod 700 ~/.ssh/id_rsa*
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top