জিনকিনস বিল্ডে গিট সাবমডিউলগুলি আপডেট হচ্ছে না


86

জেনকিনসের একটি প্রকল্পে আমার একটি সাবমডিউল রয়েছে। আমি পুনরাবৃত্তভাবে সাবমডিউলগুলি আপডেট করতে অগ্রণী সেটিং সক্ষম করেছি।

আমি যখন বিল্ডটি চালাচ্ছি, আমি দেখতে পাচ্ছি যে ওয়ার্কস্পেসে সাবমডিউল থেকে ফাইল রয়েছে। সমস্যাটি হ'ল এটি মনে হয় এটি সাবমডিউলের প্রথম সংশোধন। আমি যখন পরিবর্তনগুলি ঠেকি (গিটহাবের উপর হোস্ট করা ভান্ডার) জেনকিন্স সঠিক পরিবর্তনগুলি পেতে সাবমডিউলটি আপডেট করবে বলে মনে হয় না। কেউ কি কখনো এই দেখা হয়েছে?

উত্তর:


98

নোট করুন যে জেনকিনস গিট প্লাগইন ২.০ এর "অ্যাডভান্স সাবমডিউল আচরণ" থাকবে, যা সাবমোডিয়ুলগুলির যথাযথ আপডেট নিশ্চিত করে:

গিট 2.0

হিসাবে মন্তব্য করেছেন vikramvi:

Advanced sub-modules behavior> " Path of the reference repo to use during submodule update" এই ক্ষেত্রের বিপরীতে, সাবমডিউল গিট url যুক্ত করুন।

পথ


ওভেন বি মন্তব্যে উল্লেখ করেছেন :

প্রমাণীকরণ ইস্যুটির জন্য, এখন একটি "প্যারেন্ট রিপোজিটরির ডিফল্ট দূরবর্তী থেকে শংসাপত্রগুলি ব্যবহার করুন" বিকল্প রয়েছে

জেনকিন্স -20941 এ এখানে দেখেছে :

https://issues.jenkins-ci.org/secure/attachment/33245/Screen%20Shot%202016-07-08%20at%2010.09.17.png


6
কিন্তু কিভাবে? আপনি কি বিশদ পদক্ষেপগুলি সরবরাহ করতে পারেন, কোন বিকল্পগুলি নির্বাচন করতে হবে? ধন্যবাদ
zavié

8
@ zavié আমার মনে হয় আপনার "উন্নত সাব-মডিউলগুলি আচরণ" চয়ন করা উচিত এবং তারপরে প্রদর্শিত হবে "পুনরাবৃত্তভাবে আপডেট সাবমডিউলগুলি" চেকবাক্সটি পরীক্ষা করুন এবং সংরক্ষণে ক্লিক করুন।
কাজম্যাগনুস

9
আপনি যদি কোনও ব্যক্তিগত সংগ্রহস্থল ব্যবহার করেন তবে এটি কার্যকরভাবে কাজ করে না।
এরিক

4
একটি ব্যক্তিগত রেপো দিয়ে আমার জন্য নিখুঁতভাবে কাজ করেছিলেন

4
এটি কেবল তখনই কাজ করে যদি আপনার রেপোতে আপনার গিট সাবমডিউলটি পড়ার জন্য প্রমাণীকরণের প্রয়োজন হয় না। জেনকিন্স বাগ
আর্নস্ট কুশকে

33

এটি জেনকিন্স সাইটে গিট প্লাগইন ডকুমেন্টেশনে বিভাগটির আওতায় রয়েছে: পুনরাবৃত্ত সাবমডিউলগুলি

উদ্ধৃতি

জিআইটি প্লাগইন সাবমোডিয়ুলগুলির সাহায্যে সংগ্রহস্থলগুলিকে সমর্থন করে যার পরিবর্তে সাবমডিউলগুলি তাদের থাকে। এটি অবশ্যই চালু করা আবশ্যক: জব কনফিগারেশনে -> বিভাগ সোর্স কোড ম্যানেজমেন্ট , গিট -> অ্যাডভান্সড বাটন (নির্মাণের শাখাগুলির অধীনে) -> পুনরাবৃত্তভাবে সাবমডিউলগুলি আপডেট করুন

উদাহরণ

আপনার কাজের কনফিগারেশন স্ক্রিন থেকে, সোর্স কোড ম্যানেজমেন্ট বিভাগে অ্যাড বোতামটি নীচে টানুন "উন্নত সাব-মডিউলগুলি আচরণ" নির্বাচন করুন।

   s1

                                 এস 2

তারপরে "পুনরাবৃত্তভাবে সাবমডিউলগুলি আপডেট করুন" নির্বাচন করুন:

   s3


4
আপনাকে ধন্যবাদ তবে এটি তখন কার্যকর হয়নি যখন আমি এটি চেষ্টা করেছিলাম (প্রায় 2 বছর আগে)
বেন

@ বেন - ঠিক আছে, আমি এটি চেষ্টা করেছি এবং এটি আমার পক্ষে কাজ করেছে। আপনার সংস্করণ সম্পর্কিত হতে পারে।
slm

4
এটি কেবল তখনই কাজ করে যদি আপনার রেপোতে আপনার গিট সাবমডিউলটি পড়ার জন্য প্রমাণীকরণের প্রয়োজন হয় না।
আর্নস্ট কুশকে

@ আর্নস্টকুশকে - আমি বিশ্বাস করি জেনকিন্সকে একটি এসএসএইচ কী দেওয়া যেতে পারে যাতে এটিও রুপের সাথে ইন্টারঅ্যাক্ট করতে পারে যার জন্য লেখক প্রয়োজন require
slm

30

আপনি কি জানেন যে আপনার গিট সংগ্রহস্থল সর্বদা একটি নির্দিষ্ট সংশোধনকে বোঝায় একটি submodule এর? জেনকিনস স্বয়ংক্রিয়ভাবে পুনর্বিবেচনা পরিবর্তন করতে যাচ্ছে না।

আপনি যদি সাবমডিউলটিকে নতুনভাবে ব্যবহার করতে চান তবে এটি আপনার স্থানীয় গিট সংগ্রহস্থলে করতে হবে:

cd submoduledir
git pull
cd ..
git add submoduledir
git commit -m 'Updated to latest revision of submoduledir'
git push # Go and watch Jenkins build with the new revision of the submodule

আপনি যখন এটি এটি করেন, জেনকিনস নির্মাণের সময় সাবমডিউলের ঠিক একই সংশোধনটি পরীক্ষা করে দেখবেন। জেনকিনস নিজে সিদ্ধান্ত নেন না যে সাবমডিউলের কোন সংশোধন ব্যবহার করবেন। এটি গিট সাবমডিউল এবং এসভিএন এক্সটার্নালগুলির মধ্যে মৌলিক পার্থক্য।

আপনি সাবমডিউলগুলিতে একটি ভাল রেফারেন্স পড়তে চাইতে পারেন, যেমন: http://progit.org/book/ch6-6.html


4
@ প্রদত্ত প্রোজিট লিঙ্কটি পুরানো। আমি মনে করি এটি বর্তমান সমতুল্য https://git-scm.com/book/en/v2/Git-Tools-Submodules
স্টিভেল

লিঙ্কটি ভাঙা হয়েছে (এইচটিটিপিএস সম্পর্কিত?) - "502 খারাপ গেটওয়ে"
পিটার মর্টেনসেন

17

অবশেষে এটি করার পথে হোঁচট খেয়েছে এবং এটি সহজ।

সমস্যাটি:

শংসাপত্রগুলির সাথে প্রাথমিক ক্লোনটি সূক্ষ্মভাবে কাজ করে তবে পরবর্তী submoduleক্লোনিং ভুল শংসাপত্রগুলির সাথে ব্যর্থ হয়।

  1. স্বয়ংক্রিয়ভাবে উন্নত সাব-মডিউল ক্লোনিং Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours: ফলাফল শংসাপত্রের ত্রুটিতে।
  2. git submodule update --initমধ্যে Execute Shellঅধ্যায় এছাড়াও পরিচয়পত্র ত্রুটি সহ ব্যর্থ।

সমাধান:

আমি ব্যবহার করছি jenkins-1.574

  1. Build Environment >> SSH Agentবাক্সটি চেক করুন ।
  2. সঠিক শংসাপত্র নির্বাচন করুন (সম্ভবত Source Code Managementবিভাগে নির্বাচিত হিসাবে একই
  3. Execute Shellবিভাগে সাবমডিউলগুলি আপডেট করুন

    git submodule sync
    git submodule update --init --recursive
    

এখানে একটি স্ক্রিন শটএখানে চিত্র বর্ণনা লিখুন


4
এরকম চেকবক্স আর নেই।
adi518

11

দেখে মনে হচ্ছে আমি এর সমাধান খুঁজে পেয়েছি:

নিম্নলিখিত শেল কমান্ডগুলি কার্যকর করতে আমি একটি বিল্ড স্টেপ যুক্ত করেছি:

git submodule foreach git checkout master
git submodule foreach git pull

আপনি এই কমান্ডগুলি করার পরে, আপনাকে সুপারপজেক্টে কমিট করার প্রয়োজন হতে পারে যদিও আপনার সাবমডিউলগুলিতে হেড আপডেট করা হবে।
অস্পষ্টতা

হাই বেন, আপনি কি আরও কিছু বিশদ দিয়ে সমাধান সমাধান করতে পারেন? আমি একই জিনিস করতে চাই। এছাড়াও, কেবল তা নিশ্চিত করার জন্য, আপনার সমাধানটি সাবমোডিয়ালকে ওয়ার্কস্পেসে কোনও প্রকল্পের সাবমডিউলগুলি আপডেট করবে, হ্যাঁ?
কিম স্ট্যাকস

এর চেয়ে অনেক বেশি বিশদ নেই। আমি আমার বিল্ড প্রক্রিয়ায় কেবল সেই 2 টি লাইন যুক্ত করেছি এবং এটি সর্বদা সাবমডিউলের সর্বশেষতম সংস্করণটি টানতে পারে।
বেন

10
@ স্টি যেমন এখানে অন্য প্রতিক্রিয়াতে বলেছেন, দেখে মনে হচ্ছে আপনি এসভিএন এক্সটার্নালের মতো গিট সাবমডিউল ব্যবহার করার চেষ্টা করছেন। জেনকিন্সে এই আদেশগুলি যুক্ত করার পরিবর্তে আপনার মূল গিট রেপোতে যথোপযুক্ত সাবমোডিয়াল সংস্করণগুলি প্রতিস্থাপন করা ভাল। জেনকিনস তখন আপনার প্রকল্পের একটি নির্দিষ্ট সংস্করণ তৈরি করার সময় সবসময় সাবমডিউলের একই সংস্করণটি পরীক্ষা করে দেখবে। প্রজননযোগ্য বিল্ডগুলি ভাল জিনিস।
কোডি কাস্টারলাইন

4
@ বেন আমি এই আদেশটি পেরিয়ে এসেছি যে আপনি সাব-মডুলের মাস্টার শাখাটি ব্যবহার না করে থাকলে আপনি esepologically আরও কার্যকর খুঁজে পেতে পারেন git submodule update --init --recursive
কোরি স্কট

7

যদি আপনি জেনকিনস গিট মডিউলটি ব্যবহার করেন তবে আপনি এটি "বিল্ডিংয়ের আগে ওয়ার্কস্পেস মুছতে" সেট করতে পারেন, এইভাবে এটি সর্বদা সঠিক উপ মডিউলটি পাবে।


2

আমি চেকআউট প্লাগইন সহ স্ক্রিপ্টযুক্ত পাইপলাইন ব্যবহার করছি। আপনি যদি চান আপনার সাবমোডিয়ুলগুলি আপনার সংগ্রহস্থলের মতোই হয় তবে কেবল ট্র্যাকিংসডমডিউলস বিকল্পটি বন্ধ করুন:

checkout([$class: 'GitSCM', branches: [[name: '*/develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: false]], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '[myCredentials]', url: 'https://git.myRepo.git']]])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.