জেনকিন্স স্ক্রিপ্টেড পাইপলাইন বা ঘোষিত পাইপলাইন


100

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

এখন, আমি নিশ্চিত নই যে এই পরিস্থিতিতে দুটি ধরণের প্রতিটিই একটি সেরা ম্যাচ হবে। তাহলে declarativeকী জেনকিনস পাইপলাইনের ভবিষ্যত হবে ?

যে কেউ এই দুটি সিনট্যাক্স ধরণের সম্পর্কে কিছু চিন্তা ভাগ করতে পারেন।


4
আমি স্ক্রিপ্টটিকে অবহেলিত হওয়ার বিষয়ে কিছুই দেখতে পাচ্ছি না এবং এটি ঘোষণামূলক এবং স্ক্রিপ্টের মধ্যে বৈশিষ্ট্যের ব্যবধান বিবেচনা করে উদ্বেগজনক হবে।
ম্যাট শুচার্ড

@ ম্যাটস্কুচার্ড আপনি এখনও 3 বছর পরে ঠিক এখনও উপস্থিত রয়েছেন। আমি এখনই প্রশ্নটির বাইরে এডিট করতে লাফ দিয়েছি।
cellepo

উত্তর:


89

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

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

দুটিই মূলত নীচে একই পাইপলাইন উপ-সিস্টেম system এগুলি উভয়ই "কোড হিসাবে পাইপলাইন" এর টেকসই বাস্তবায়ন। তারা উভয়ই পাইপলাইনে অন্তর্নির্মিত বা প্লাগইনগুলির দ্বারা সরবরাহিত পদক্ষেপগুলি ব্যবহার করতে সক্ষম। উভয়ই ভাগ করে নেওয়া গ্রন্থাগারগুলি ব্যবহার করতে সক্ষম

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

Https://jenkins.io/doc/book/pipline/syntax/#compare থেকে অনুলিপি করা হয়েছে


4
আমি ঘোষিত পাইপলাইন চাকরিগুলির একটি ধারাবাহিক স্ক্রিপ্ট পাইপলাইনে স্থানান্তরিত করার চেষ্টা করেছি কারণ তারা "বিদ্যুৎ-ব্যবহারকারী এবং আরও জটিল প্রয়োজনীয়তা সম্পন্নদের জন্য আদর্শ পছন্দ" ছিল। স্ক্রিপ্টযুক্ত পাইপলাইনের জন্য প্রায় শূন্য ডকুমেন্টেশন রয়েছে। কিছুই না। এটি এর মতো প্রায় অকেজো। এটি একটি বড় পার্থক্য যা জনগণকে সচেতন করা উচিত।
কোশি

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

4
@ ইলিকাস কোথায়? ব্যবহারকারীর হ্যান্ডবুকটিতে কোনও "টগলস" নেই। আপনার কি লিংক আছে? এমনকি স্ক্রিপ্টযুক্ত পাইপলাইনের পাইপলাইন পদক্ষেপগুলি কেবল বলেছে যে ঘোষণামূলক পাইপলাইন এবং ঘোষিত পাইপলাইন ডক্সের লিঙ্কগুলির সাথে কোনও পার্থক্য নেই, যা বিভ্রান্তিকর।
সতর্কী

4
@ কচির উদাহরণ jenkins.io/doc/book/piplines , নীচে একটি টগল যা jenkins.io/doc/book/pipline/# এ যায় , যা ঘোষিত পাইপলাইনের স্ক্রিপ্টযুক্ত সমতুল্য প্রসারিত করে
ইলিকাস

সমস্যাটি আপনার ডকুমেন্টেশন সঠিকভাবে না পড়ার উপর নির্ভর করে, "এখানে জেনকিনসফিলের একটি ডিক্লারেটিভ পাইপলাইন সিনট্যাক্স ব্যবহার করে উদাহরণ দেওয়া হয়েছে - এর স্ক্রিপ্টযুক্ত সিনট্যাক্স সমতুল্য নীচে টগল স্ক্রিপ্টেড পাইপলাইন লিঙ্কটি ক্লিক করে অ্যাক্সেস করা যেতে পারে:" এটি অফিশিয়াল ডকুমেন্টেশনে রয়েছে! পড়ুন, তাহলে আপনি এই জাতীয় বিবৃতি দিতে পারেন .. যদি তারা সত্য করে থাকে ..
Ilhicas

59

ঘোষণামূলক পাইপলাইনগুলির একটি স্ক্রিপ্ট () পদক্ষেপ রয়েছে তা বিবেচনা করার জন্য অন্য একটি বিষয় । এটি যে কোনও স্ক্রিপ্টড পাইপলাইন চালাতে পারে। সুতরাং আমার প্রস্তাবটি হ'ল ঘোষিত পাইপলাইনগুলি ব্যবহার করা এবং যদি প্রয়োজন হয় script()স্ক্রিপ্টড পাইপলাইনগুলির জন্য। সুতরাং আপনি উভয় বিশ্বের সেরা পেতে।


4
ঘোষিত পাইপলাইনে কোনও স্ক্রিপ্ট () ব্লক ব্যবহারের কোনও উদাহরণ রয়েছে কি? সেই লিঙ্কটির কোনওটিই নেই।
ব্যবহারকারী 2023861

যদি আপনি নিজেকে scriptঘোষিত পাইপলাইনে কয়েকবার ব্লক ব্যবহার করে দেখতে পান তবে আপনাকে স্ক্রিপ্টযুক্ত পাইপলাইনটি সমস্ত উপায়ে ব্যবহার করা উচিত।
ক্রু

আমার পছন্দটি হ'ল @ কোডিকে উল্লিখিত হিসাবে স্ক্রিপ্টযুক্ত পাইপলাইনের ওপরে ডিক্লেয়ারটিভ পাইপলাইন। হ্যাঁ আমি সম্মত হলাম কিছু জটিল পরিস্থিতি যা আমরা স্ক্রিপ্টযুক্ত পাইপলাইন ব্যবহার করতে পারি। তবে, প্রোপ সরলীকৃত পরিকল্পনা সর্বদা জটিলতা হ্রাস করে এবং বেশিরভাগ সময় আরও সাধারণ ঘোষণামূলক পাইপলাইনের দিকে এগিয়ে যায়।
NIK

18

আমি কুবেরনেটস এজেন্টের সাথে স্ক্রিপ্ট করা থেকে সম্প্রতি ডিক্লেয়ারেশনটিতে স্যুইচ করেছি। জুলাই '18 অবধি ঘোষণামূলক পাইপলাইনগুলিতে কুবারনেট পোড নির্দিষ্ট করার সম্পূর্ণ ক্ষমতা ছিল না। তবে yamlFileপদক্ষেপটি যুক্ত করার সাথে সাথে আপনি এখন আপনার রেপোর একটি ইয়ামল ফাইল থেকে আপনার পড টেম্পলেটটি পড়তে পারেন।

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

pipeline {
  agent {
    kubernetes {
      label 'jenkins-pod'
      yamlFile 'jenkinsPodTemplate.yml'
    }
  }
  stages {
    stage('Checkout code and parse Jenkinsfile.json') {
      steps {
        container('jnlp'){
          script{
            inputFile = readFile('Jenkinsfile.json')
            config = new groovy.json.JsonSlurperClassic().parseText(inputFile)
            containerTag = env.BRANCH_NAME + '-' + env.GIT_COMMIT.substring(0, 7)
            println "pipeline config ==> ${config}"
          } // script
        } // container('jnlp')
      } // steps
    } // stage

উপরে উল্লিখিত হিসাবে আপনি স্ক্রিপ্ট ব্লক যোগ করতে পারেন। কাস্টম jnlp এবং ডকার সহ পড টেম্পলেট উদাহরণ।

apiVersion: v1
kind: Pod
metadata:
  name: jenkins-pod
spec:
  containers:
  - name: jnlp
    image: jenkins/jnlp-slave:3.23-1
    imagePullPolicy: IfNotPresent
    tty: true
  - name: rsync
    image: mrsixw/concourse-rsync-resource
    imagePullPolicy: IfNotPresent
    tty: true
    volumeMounts:
      - name: nfs
        mountPath: /dags
  - name: docker
    image: docker:17.03
    imagePullPolicy: IfNotPresent
    command:
    - cat
    tty: true
    volumeMounts:
      - name: docker
        mountPath: /var/run/docker.sock
  volumes:
  - name: docker
    hostPath:
      path: /var/run/docker.sock
  - name: nfs
    nfs:
      server: 10.154.0.3
      path: /airflow/dags

4
এটি আমি সবচেয়ে কার্যকর উত্তরটি সারা বছর দেখেছি: ডি ধন্যবাদ
ট্রেভর রুডলফ

14

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

আরও প্রসঙ্গ: https://jenkins.io/blog/2017/02/03/declarative-pipline-ga/


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

4
আমি আপনার সাথে একমত. আমি এটি লেখার সময় এই উত্তরটি ছিল সেরা but :)
বার্নেটটেক

7

জেনকিনস ডকুমেন্টেশন উভয় প্রকারের সঠিকভাবে ব্যাখ্যা করে এবং তুলনা করে।

উদ্ধৃত করার জন্য: "স্ক্রিপ্টেড পাইপলাইন জেনকিন্স ব্যবহারকারীদের জন্য প্রচুর পরিমাণে নমনীয়তা এবং এক্সটেনসিবিলিটি উপলব্ধ করে। জেনকিনস পাইপলাইন লেখার।

দুটিই মূলত নীচে একই পাইপলাইন উপ-সিস্টেম system "

এখানে আরও পড়ুন: https://jenkins.io/doc/book/pipline/syntax/#compare


2
  1. ঘোষিত পাইপলাইনটি 'পাইপলাইন' লেবেলযুক্ত একটি ব্লকের মধ্যে সংজ্ঞায়িত করা হয়েছে, তবে স্ক্রিপ্টযুক্ত পাইপলাইনটি একটি 'নোড' এর মধ্যে সংজ্ঞায়িত করা হয়েছে।
  2. সিনট্যাক্স - ঘোষিত পাইপলাইনে রয়েছে 'পর্যায়', 'পদক্ষেপ'
  3. যদি বিল্ডটি ব্যর্থ হয়, ঘোষিত একটি আপনাকে সেই স্তরটি থেকে পুনরায় আরম্ভ করার একটি বিকল্প দেয় যা স্ক্রিপ্ট বিকল্পটিতে সত্য নয় decla
  4. স্ক্রিপ্টিংয়ে যদি কোনও সমস্যা থাকে তবে ঘোষণাপত্রটি আপনাকে কাজটি তৈরি করার সাথে সাথেই জানিয়ে দেবে তবে স্ক্রিপ্টের ক্ষেত্রে এটি 'ঠিক আছে' পর্যায়ে চলে যাবে এবং মঞ্চে ত্রুটি ছুঁড়ে দেবে যা 'ঠিক নেই' is

আপনি এটি উল্লেখ করতে পারেন। খুব ভাল পঠিত -> https://e.printstacktrace.blog/jenkins-scriptted-pipline-vs-declarative-pipline-the-4-practical-differences/ @ Szymon.Stepniak https://stackoverflow.com/users/ 2194470 / সাইমন-স্টেপনিয়াক? ট্যাব = প্রোফাইল


1

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

আমার অভিজ্ঞতার কারণে, আমি আমার কাজটিকে আবার স্ক্রিপ্ট হিসাবে পুনর্বিবেচনার দিকে ঝুঁকেছি যেহেতু ডিক্লারেটিভের পক্ষে এখনও আমাদের প্রয়োজনের সমর্থন নেই, তবে এটি দুর্ভাগ্যজনক যেহেতু আমি সম্মত হলাম এটিই ভবিষ্যতের সবচেয়ে প্রমাণ বিকল্প বলে মনে হচ্ছে এবং এটি আনুষ্ঠানিকভাবে সমর্থিত। পছন্দ করার আগে আপনি কতগুলি প্লাগইন ব্যবহার করতে চান তা বিবেচনা করুন।


0

ঘোষণামূলক পাইপলাইন পর্যন্ত শ্রেয় স্ক্রিপ্টের পাইপলাইন । ডিক্লারেটিভ পাইপলাইন স্ক্রিপ্টযুক্ত পাইপলাইন স্ক্রিপ্ট-স্টেপ ব্যবহার করে যা কিছু করতে পারে তা কার্যকর করতে সক্ষম এবং এতে অতিরিক্ত অতিরিক্ত বৈশিষ্ট্য রয়েছে।

ফিউটারমোর ডিক্লারেটিভ পাইপলাইনের বিভিন্ন প্রযুক্তি যেমন ডকার বা কুবারনেটসের জন্য সমর্থন রয়েছে ( এখানে দেখুন )।

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

tl; dr - ডিক্লারেটিভ পাইপলাইন স্ক্রিপ্টযুক্ত পাইপলাইন এবং আরও কিছু করতে পারে।

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