জেনকিনস ঘোষিত পাইপলাইনে আর্টিফ্যাক্টরি প্লাগইন ব্যবহার করা


13

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

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

stages{

    stage('Pre-Build'){
        steps{

             script{
                def server = Artifactory.server 'LocalJfrog'
                def rtGradle = Artifactory.newGradleBuild()
                rtGradle.resolver server: server, repo: 'gradle-dev-local'
                rtGradle.deployer server: server, repo: 'gradle-release-local'
                rtGradle.useWrapper = true
            }

        }   
    }
}

উপরোক্ত কোডের সাথে শর্তসাপেক্ষ প্রকাশ সম্ভব নয় কারণ আমি স্বয়ংক্রিয় প্রকাশনা অক্ষম করলেও আমি সার্ভারের পরিবর্তনশীলটিকে পুনরায় ব্যবহার করতে পারি না ।

উত্তর:


3

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

 when {
    environment name: 'pushArtifact', value: 'true'
  }
  steps{
     //push artifact  
  }

ইঙ্গিতটির জন্য ধন্যবাদ। যদি আমি বুঝতে পারি যে শর্তগুলি পূরণ করার পরে একটি পরিবর্তনশীল সেট করতে হবে এবং তারপরে প্রাক-বিল্ড পদক্ষেপে সেই পরিবর্তনশীলটি পরীক্ষা করে দেখুন
ধরনিধর

2

আমি মনে করি আপনার ইস্যুটি সার্ভার ভেরিয়েবলের মূল -প্রাক-বিল্ড স্টেজ ব্লকের বাইরে পুনর্ব্যবহারযোগ্য নয়।

জেনকিনস ঘোষণাপত্রে, আপনি script { ... }ব্লকটি ব্যবহার করে এর মতো চলকগুলি সংজ্ঞায়িত করতে পারেন , তবে একবার আপনি মঞ্চটি ছেড়ে দিলে সেই পরিবর্তনশীলগুলি অন্য পর্যায়ে অ্যাক্সেসযোগ্য।

পূর্ববর্তী পরামর্শ সহ, আমি এটি সুপারিশ করব:

একটি ভাগ করা লাইব্রেরিতে শৈল্পিক ডিফলি কোড রাখুন।

gradle_artifactory.groovy

    ডিফ কল (মানচিত্রের পরামিতি = [:]) {// paraচ্ছিক পরামিতি ম্যাপিং

        Def সার্ভার = আর্টিফ্যাক্টরি.সভার 'লোকালজফ্রোগ'
        ডিফ আরটিগ্রাডাল = আর্টিফ্যাক্টরি.নিউগ্র্যাডবিল্ড ()
        rtGradle.resolver সার্ভার: সার্ভার, রেপো: 'গ্রেডেল-ডেভ লোকাল'
        rtGradle.deployer সার্ভার: সার্ভার, রেপো: 'গ্রেড-রিলিজ-লোকাল'
        rtGradle.useWrapper = সত্য
        Def buildInfo = rtGradle.run রুটডির: "প্রজেক্টডির /", বিল্ডফায়াল: 
            'build.gradle', কাজগুলি: 'ক্লিন আর্টফ্যাক্টরি প্রকাশিত'

    }

তারপরে আপনার ঘোষিত পাইপলাইনগুলি রাখতে D.R.Y

@Library('my-shared-lib') 
...
stage('Artifactory Upload') {
    when { <some expression with sonarqube/checkmarx> }
    steps {
        script {
            gradle_artifactory()
        }
    }
}

refs:

https://jenkins.io/doc/book/pipeline/syntax/#when

https://jenkins.io/doc/book/pipeline/shared-libraries/


1

আপনি যদি জেনকিনসফাইলে যুক্তিযুক্ত এম্বেড করতে চান, তবে ঘোষণামূলক বাক্য গঠনটি সর্বোত্তম পদ্ধতি নাও হতে পারে কারণ কোডে এটি প্রতিবিম্বিত করা সর্বদা সহজ নয়।

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


1
জবাবের জন্য ধন্যবাদ. আমি স্ক্রিপ্টড পাইপলাইন সম্পর্কে সচেতন তবে যেহেতু, এটি কোনও প্রকল্পের জন্য এটি একটি প্রাথমিক প্রয়োজনীয়তা যা ভেবেছিল এটি ঘোষিত পাইপলাইনে অন্তর্ভুক্ত হবে। স্ক্রিপ্টযুক্ত বা বাহ্যিক গ্রোভি স্ক্রিপ্টে আবার স্যুইচ করবে
ধরণিধর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.