গিট পোস্ট কমিট হুক কীভাবে কনফিগার করবেন


126

জেনকিন্স থেকে দূরবর্তীভাবে কোনও বিল্ড ট্রিগার করবেন কীভাবে?
গিট পোস্ট কমিট হুক কীভাবে কনফিগার করবেন?

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

জেনকিনস ট্রিগার বিল্ড বিভাগে আমি ট্রিগার বিল্ডকে দূরবর্তীভাবে নির্বাচন করেছি।
ইন .gitডিরেক্টরি, আঙ্গুলসমূহ ডিরেক্টরির সেখানে আমরা কনফিগার পোস্টে আছে ফাইল কমিট।
আমি কীভাবে সেখান থেকে বিল্ডটি ট্রিগার করব তা আমি বিভ্রান্ত করছি (আমি কিছু অংশ জানি যে আমাদের কার্ল কমান্ড ব্যবহার করা উচিত)।


curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con

আমি এই আদেশটি আমার গিট সার্ভার হুক ডিরেক্টরিতে পোস্ট করেছি (পোস্ট কমিট হুক)।
সংগ্রহের পরিবর্তনগুলি যখনই ঘটে তখন এটি স্বয়ংক্রিয় বিল্ড চালিত হয়।

আমি চেঞ্জ-ইন চেক করতে চাই কমপক্ষে একটি জাভা ফাইলের মধ্যে বিল্ডটি শুরু হওয়া উচিত কিনা।
ধরুন, বিকাশকারীরা কেবলমাত্র এক্সএমএল ফাইল বা সম্পত্তি ফাইলগুলি পরিবর্তন শুরু করলে বিল্ডটি শুরু করা উচিত নয়।
পাশাপাশি xml, ধরুন .javaফাইলগুলি সেখানে বিল্ড শুরু হওয়া উচিত।


আপনার প্রশ্নের দ্বিতীয় অংশটি সম্বোধন করার জন্য আমি আমার উত্তর সম্পাদনা করেছি।
ভনসি

উত্তর:


164

" পোলিং অবশ্যই মরে যেতে হবে: জেনকিন্স একটি গিট হুক থেকে বিল্ড তৈরি করে " তে উল্লেখ করা হয়েছে , আপনি জেনকিন্সকে একটি নতুন প্রতিশ্রুতি সম্পর্কে অবহিত করতে পারেন:

সর্বশেষতম গিট প্লাগইনটি 1.1.14 (যা আমি এখনই প্রকাশ করেছি) দিয়ে আপনি এখন আরও সহজেই নিম্নলিখিত কমান্ডটি প্রয়োগ করে এটি করতে পারেন:

curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>

এটি নির্দিষ্ট ইউআরএল চেক করার জন্য কনফিগার করা সমস্ত কাজ স্ক্যান করবে এবং যদি তারাও পোলিংয়ের মাধ্যমে কনফিগার করা থাকে তবে তা অবিলম্বে পোলিংটিকে ট্রিগার করবে (এবং যদি এটি কোনও বিল্ডের মূল্য খুঁজে পায়, তবে একটি বিল্ড ঘুরে দেখা যাবে)। )

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

এখানে উল্লিখিত হিসাবে , আপনার জেনকিন্স সার্ভারের জন্য সঠিক ঠিকানাটি ব্যবহার করতে ভুলবেন না:

যেহেতু আমরা জেনকিন্সকে 8080 পোর্টে স্ট্যান্ডেলোন ওয়েবসভার হিসাবে চালাচ্ছি ইউআরএলটি এমনটি হওয়া উচিত ছিল না /jenkins:

http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git

যে শেষ বিন্দু শক্তিশালী করা, ptha যোগ মন্তব্য :

এটি সুস্পষ্ট হতে পারে তবে আমার এতে সমস্যা ছিল:

curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>. 

URL প্যারামিটার ঠিক সুসংগত হওয়া কি আছে সংগ্রহস্থলের প্রয়োগ URL টি আপনার জেনকিন্স কাজের।
উদাহরণগুলি অনুলিপি করার সময় আমি প্রোটোকলটি রেখেছিলাম, আমাদের ক্ষেত্রে ssh://, এবং এটি কার্যকর হয়নি।


এছাড়াও আপনি একটি সহজ ব্যবহার করতে পারেন মধ্যে "মত হুক পোস্ট গ্রহণ ভিত্তিক পুশ জেনকিন্স এবং এলেবেলে ব্যবহার তৈরী করে "

#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \

http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx

"ট্রিগার রিমোটলি বিল্ডস" করতে সক্ষম হতে আপনার জেনকিন্স কাজের কনফিগার করুন এবং একটি প্রমাণীকরণ টোকেন ব্যবহার করুন ( 1qaz2wsxএই উদাহরণে)।

তবে এটি একটি প্রকল্প-নির্দিষ্ট স্ক্রিপ্ট, এবং লেখক এটিকে সাধারণকরণের একটি উপায় উল্লেখ করেছেন।
প্রথম সমাধানটি সহজ কারণ এটি প্রমাণীকরণ বা নির্দিষ্ট প্রকল্পের উপর নির্ভর করে না।


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

মূলত, আপনার বিল্ড স্ক্রিপ্টটি করতে পারে:

  • git notesপ্রথম কলটিতে একটি 'বিল্ড' নোট রাখুন (দেখুন )
  • পরবর্তী কলগুলিতে, HEADআপনার শাখার প্রার্থীর জন্য বিল্ডের জন্য এবং git notes'বিল্ড' ( git show refs/notes/build):) দ্বারা প্রতিশ্রুতিবদ্ধ প্রতিশ্রুতিবদ্ধদের মধ্যে করা কমিটের তালিকাটি ধরুন git diff --name-only SHA_build HEAD
  • আপনার লিপিটি সেই তালিকাটিকে বিশ্লেষণ করতে পারে এবং সিদ্ধান্ত নিতে পারে যে বিল্ডের সাথে এটি চালিয়ে যাওয়া দরকার।
  • কোনো ক্ষেত্রে, তৈরি / আপনার সরাতে git notes' build' থেকে HEAD

মে 2016: cwhsu আউট পয়েন্ট মন্তব্যের নিম্নলিখিত বিষয়গুলোকে সম্ভাব্য URL:

আপনি curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKENযদি কেবল আপনার আইটেমটিতে ট্রিগার কনফিগার সেট করেন আপনি কেবল ব্যবহার করতে পারেন

http://i.imgur.com/IolrOOj.png


জুন 2016, polaretto তুলে ধরে মন্তব্য :

আমি যুক্ত করতে চেয়েছিলাম যে সামান্য শেল স্ক্রিপ্টিংয়ের সাহায্যে আপনি ম্যানুয়াল ইউআরএল কনফিগারেশন এড়াতে পারবেন, বিশেষত যদি আপনার একটি সাধারণ ডিরেক্টরিতে অনেকগুলি সংগ্রহস্থল থাকে।
উদাহরণস্বরূপ, রেপো নামটি পেতে আমি এই পরামিতিগুলির বিস্তৃতি ব্যবহার করেছি

repository=${PWD%/hooks}; 
repository=${repository##*/} 

এবং তারপরে এটি ব্যবহার করুন:

curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository

হাই ভন যেমন আপনি প্রথম কলটিতে বলেছিলেন আমাকে একটি বিল্ড নোটস রাখতে হবে my আমার প্রথম কলটি যখনই বিকাশকারীরা গিট রেপোতে পরিবর্তনগুলি চাপান তখনই জাভা ফাইলটি পড়তে হয়। আমি কেন এই পদক্ষেপের প্রতিটি পদক্ষেপ জিজ্ঞাসা করছি তা এই সমস্ত বিষয়ে আমি নতুন। দয়া করে কিছু মনে করবেন না এবং আমাকে এই কাজটি শেষ করতে হবে।
ফণিকুমার রাজা

এটি আমার পক্ষে অনেক সহায়ক। আমি এই বিষয়টির সহায়তায় গিট হুক লিখেছি। টিএনএক্স বলছি!
কিরিল বাজারভ

আমাকে পোস্টের পরে পাওয়া ফাইলটিতে কার্ল কল যুক্ত করতে হয়েছিল, যা এই উত্তর থেকে সম্পূর্ণ পরিষ্কার নয়। যাইহোক খুব সহায়ক!
ম্যাগনিলেক্স

1
আপনার বেয়ার রেপোর হুক ফোল্ডারে @ ইগোরগানাপলস্কি যা কমিটস গ্রহণ করছে এবং এতে yourRepo.git/hooks/post-receive
জিনকিন্স

2
এটি সুস্পষ্ট হতে পারে, কিন্তু আমি বিষয় ছিল: curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>URL প্যারামিটার ঠিক সুসংগত হওয়া কি আছে সংগ্রহস্থলের প্রয়োগ URL টি আপনার জেনকিন্স কাজের। উদাহরণগুলি অনুলিপি করার সময় আমি প্রোটোকলটি রেখেছিলাম, আমাদের ক্ষেত্রে ssh: // এবং এটি কার্যকর হয়নি।
পিটিএ

17

আশা করি এটি সহায়তা করে: http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html

curlগিট দ্বারা প্রদত্ত গিট হুক ব্যবহার করে জেনকিন্সের কাজটি ট্রিগার করার জন্য এটি কেবল বিষয় ।
আদেশ

curl http://localhost:8080/job/someJob/build?delay=0sec

জেনকিন্স কাজ চালাতে পারে, জেনকিন্স কাজের someJobনাম যেখানে ।

জন্য অনুসন্ধান করুন hooksআপনার লুকানো .git ফোল্ডারে ফোল্ডার। এতে post-commit.sampleফাইলটির নাম পরিবর্তন করুন post-commit। এটি নোটপ্যাড দিয়ে খুলুন, : Nothingলাইনটি সরান এবং এতে উপরের কমান্ডটি পেস্ট করুন।

এটাই. যখনই আপনি কোন কমিট করেন, গিট ফাইলটিতে সংজ্ঞায়িত পোস্ট কমিটের আদেশগুলি ট্রিগার করবে।


দেব মেশিন থেকে কমিট করার পরে পোস্ট-রিসিভ কল হয়, পোস্ট কমিট নয়। উভয় হুকগুলিতে লগ স্টেটমেন্ট লাগিয়ে যাচাই করা হয়েছে। আমি কি ডক্সটি ভুল পাঠ করছি, এটি কি প্রতিশ্রুতি পোস্ট করা উচিত নয় যা বলা হয়?
শিরীশ হীরেকোদি

@ শিরীশ: অদ্ভুত ব্যাপার। সম্ভবত আপনি
অন্যভাবে

এই পরিবর্তনটি সফলভাবে তৈরি করা হয় যখন আমি শেষ পরিবর্তনের প্রতিশ্রুতি রাখি কিন্তু যখন আমি পরিবর্তনগুলি করি তখন নির্মাণ করি না ... ???

3

পূর্ববর্তী উত্তরটি এখানে পুরো হুকের মতো দেখতে কেমন হতে পারে তার উদাহরণ দেখিয়েছে যে আমার কার্য-পোস্ট প্রাপ্তি হুকের কোড:

#!/usr/bin/python

import sys
from subprocess import call

if __name__ == '__main__':
    for line in sys.stdin.xreadlines():
        old, new, ref = line.strip().split(' ')
        if ref == 'refs/heads/master':
            print "=============================================="
            print "Pushing to master. Triggering jenkins.        "
            print "=============================================="
            sys.stdout.flush()
            call(["curl", "-sS", "http://jenkinsserver/git/notifyCommit?url=ssh://user@gitserver/var/git/repo.git"])

এই ক্ষেত্রে আমি জেনকিন্সের কাজগুলি কেবল তখনই চালিত করি যখন মাস্টারগুলিতে চাপ দেওয়া হয় এবং অন্য শাখাগুলিতে নয়।


1
আপনি কীভাবে জিনকিনসে এই পাইথন স্ক্রিপ্টটি বেঁধে রাখবেন? বা আপনি কি কেবল একবার চালাবেন?
ইগোরগানাপলস্কি

জেনকিনস এই হুক সম্পর্কে জানেন না, মূল অংশটি জেনকিন্স সার্ভারে notifyCommit url লোড করছে যা একটি পোল ট্রিগার করবে। আমি মনে করি জেনকিন্সের পক্ষে কোনও সময়সূচি ছাড়াই ভোটদান সক্ষম রয়েছে।
Zitrax

তাহলে এই অজগর স্ক্রিপ্টটি কোথায় থাকে?
কমিটস

1
দেরিতে উত্তর - তবে স্ক্রিপ্টের অবস্থান হিট / পোস্ট-রিসিভের গিট সার্ভারে থাকবে। আরও জানতে গিট হুক পড়ুন।
জিট্রাক্স

3

আমি উপরের উত্তরগুলিতে যুক্ত করতে চাই যে জেনকিনস অনুমোদন সক্ষম করা থাকলে এটি কিছুটা বেশি কঠিন হয়ে যায়।

এটি সক্ষম করার পরে আমি একটি ত্রুটি বার্তা পেয়েছি যে বেনামি ব্যবহারকারীর পড়ার অনুমতি প্রয়োজন।

আমি দুটি সম্ভাব্য সমাধান দেখেছি:

1: আমার হুক এতে পরিবর্তন করা:

curl --user name:passwd -s http://domain?token=whatevertokenuhave

2: প্রকল্প ভিত্তিক অনুমোদন নির্ধারণ।

পূর্ববর্তী সমাধানগুলির হ'ল ফাইলে আমার পাসডাব্লুটি প্রকাশ করতে হয়েছিল এমন অসুবিধা রয়েছে। আমার ক্ষেত্রে অগ্রহণযোগ্য।

দ্বিতীয়টি আমার পক্ষে কাজ করে। বিশ্বব্যাপী লেখক সেটিংসে আমাকে সামগ্রিক> বেনামি ব্যবহারকারীর জন্য পড়তে সক্ষম করতে হয়েছিল। প্রকল্পটিতে আমি ট্রিগার করতে চেয়েছিলাম আমাকে কাজ> বিল্ড এবং কাজ> বেনামে পড়ুন সক্ষম করতে হয়েছিল।

এটি এখনও একটি নিখুঁত সমাধান নয় কারণ এখন আপনি লগইন ছাড়াই জেনকিনসে প্রকল্পটি দেখতে পাচ্ছেন। HTTP লগইন সহ প্রাক্তন পদ্ধতির ব্যবহার করে এর থেকেও ভাল সমাধান হতে পারে তবে আমি এটি বের করে ফেলিনি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.