জেনকিনস পাইপলাইন ওয়াইপ আউট ওয়ার্কস্পেস


142

আমরা জেনকিন্স ২.x চালাচ্ছি এবং নতুন পাইপলাইন প্লাগইনটি পছন্দ করি। তবে, একটি সংগ্রহস্থলে এতগুলি শাখা থাকা অবস্থায়, ডিস্কের স্থানটি দ্রুত পূর্ণ হয়।

পাইপলাইনের সাথে সামঞ্জস্যপূর্ণ এমন কোনও প্লাগইন রয়েছে যা আমি একটি সফল বিল্ডের ওয়ার্কস্পেসটি মুছতে পারি?

উত্তর:


110

আপনি deleteDir()পাইপলাইন জেনকিনসফিলের শেষ পদক্ষেপ হিসাবে ব্যবহার করতে পারেন (ধরে নিচ্ছেন যে আপনি কার্য ডিরেক্টরিটি পরিবর্তন করেন নি)।


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

1
তবে আমি মনে করি কেবলমাত্র বর্তমান নোডের ওয়ার্কস্পেসটি মুছবে। সাধারণ ক্ষেত্রে আপনার পাইপলাইনটি বিভিন্ন বিভিন্ন দাসের উপর চলবে।
মার্কাস ফিলিপ

21
আমি ঠিক এই আগে ভিক্ষা এ রেখেছি checkout scm
jpbochi

2
আমি প্রারম্ভিক সময়ে এটিও রেখেছিলাম, যদি প্রকল্পটি শেষের আগে পৌঁছানোর আগে ব্যর্থ হয়, বা পরবর্তী বিল্ডটি অন্য দাসের দিকে থাকে।
ডেভেলগ্যালান্ট

2
জেনকিনস ডকুমেন্টেশনের "ক্লিনিং আপ এবং বিজ্ঞপ্তি" বিভাগে কর্মক্ষেত্রটি পরিষ্কার করার জন্য ডকুমেন্ট করা এই কমান্ড ।
vossad01

131

@ জোটজিনেস জেনকিন্স সংস্করণটির সাথে উল্লেখ করেছেন Like ২.74৪ , নীচে কাজ করে, কখন থেকে নিশ্চিত নয়, সম্ভবত কেউ যদি উপরের সংস্করণটি সম্পাদনা করতে এবং যোগ করতে পারে

cleanWs()

সঙ্গে, জেনকিন্স সংস্করণ 2.16 এবং কর্মস্থান পরিষ্কারের প্লাগইন , আমি আছে, আমি ব্যবহারের

step([$class: 'WsCleanup'])

কর্মক্ষেত্র মুছতে।

আপনি গিয়ে এটি দেখতে পারেন

JENKINS_URL/job/<any Pipeline project>/pipeline-syntax

তারপরে নমুনা পদক্ষেপ থেকে "পদক্ষেপ: জেনারেল বিল্ড স্টেপ" নির্বাচন করুন এবং তারপরে বিল্ড স্টেপ থেকে "বিল্ড শেষ হয়ে গেলে ওয়ার্কস্পেস মুছুন" নির্বাচন করুন


এটি আমার জন্য কাজ করে: জেনকিনস ২.7.২, ওয়ার্কস্পেস ক্লিনআপ প্লাগইন 0.30
ডিসি

4
এই পিআর অনুসারে , ০.৩৩ এ অন্তর্ভুক্ত , এটি পাইপলাইনে বলা হয় cleanWs

93

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

=> অধিকাংশ ক্ষেত্রেই আপনি সম্ভবত একটি এটা করা উচিত পোস্ট বিল্ট-পদক্ষেপ শর্ত মত always:

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { 
        always { 
            cleanWs()
        }
    }
}

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

23
আপনি যদি শুধুমাত্র একটি থাকে তাহলে postঅধ্যায়, cleanWs()নিরাপদে মধ্যে রেখে দেওয়া যেতে পারে alwaysএই শর্তে কিন্তু সবচেয়ে নিরাপদ স্পট ভিতরে cleanupশর্ত:post { cleanup { cleanWs() } }
ᴠɪɴᴄᴇɴᴛ

68

আসলে ডিলিটডির ফাংশন পুনরাবৃত্তভাবে বর্তমান ডিরেক্টরি এবং এর সামগ্রীগুলি মুছে দেয়। প্রতীকী লিঙ্ক এবং জংশনগুলি অনুসরণ করা হবে না তবে সরানো হবে।

একটি ওয়ার্কস্পেসের একটি নির্দিষ্ট ডিরেক্টরি মুছতে মুছতে মুছতে মুছতে মুছতে মুছতে মুছতে মুছতে মুছতে মুছুন D

dir('directoryToDelete') {
    deleteDir()
}

10
যদিও ওপি কর্মক্ষেত্রটি কীভাবে মুছতে পারে তা কেবল জিজ্ঞাসা করেছিল, তবে এই উত্তরটি সবচেয়ে তথ্যবহুল।
জন ম্যাকগিহি

21

আমি মুছে ফেলা ডিয়ার () নিম্নলিখিত হিসাবে ব্যবহার করেছি:

  post {
        always {
            deleteDir() /* clean up our workspace */
        }
    }

তবে, এরপরে আমাকে সর্বদা সফলতা বা ব্যর্থতা চালাতে হয়েছিল তবে আপনি পোস্টের শর্তটি অর্ডার করতে পারবেন না। বর্তমান অর্ডার সর্বদা, পরিবর্তিত, বাতিল, ব্যর্থতা, সাফল্য এবং তারপরে অস্থির।

যাইহোক, একটি খুব দরকারী পোস্ট শর্ত রয়েছে, ক্লিনআপ যা সর্বদা শেষ হয়, https://jenkins.io/doc/book/pipline/syntax/ দেখুন

সুতরাং শেষ পর্যন্ত আমার পোস্টটি নীচে ছিল:

post {
    always {

    }
    success{

    }
    failure {

    }
    cleanup{
        deleteDir()
    }
}

আশা করি কিছু কোণার ক্ষেত্রে এটি সহায়ক হতে পারে


আমরা একটি ত্রুটি পেয়েছি "অবৈধ শর্ত পরিষ্কার", আমরা জেনকিন্স সংস্করণ ২.৯৯ ব্যবহার করছি
অরবিন্দ মুর্তি

19

নিম্নলিখিত পাইপলাইন স্ক্রিপ্ট ব্যবহার:

pipeline {
    agent { label "master" }
    options { skipDefaultCheckout() }
    stages {
        stage('CleanWorkspace') {
            steps {
                cleanWs()
            }
        }
    }
}

এই পদক্ষেপগুলি অনুসরণ করুন:

  1. আপনি যে ওয়ার্কস্পেসটি পরিষ্কার করতে চান সেই পাইপলাইন কাজের সর্বশেষতম বিল্ডে নেভিগেট করুন।
  2. এলএইচএস মেনুতে রিপ্লে লিঙ্কটি ক্লিক করুন।
  3. পাঠ্য বাক্সে উপরের স্ক্রিপ্টটি পেস্ট করুন এবং রান ক্লিক করুন

যোগ options { skipDefaultCheckout() }একটু দ্রুত সঞ্চালনের জন্য।
আকিস্ক

আপনার পরামর্শ অনুসারে @ আকিস্ক
অ্যান্ড্রু গ্রে

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

11

আপনি যদি জেনকিনসে কাস্টম ওয়ার্কস্পেস ব্যবহার করেছেন তবে মুছে ফেলা ডায়ার @ টিএমপি ফোল্ডারটি মুছে ফেলবে না।

সুতরাং ওয়ার্কস্পেস ব্যবহারের সাথে @tmp মুছে ফেলার জন্য

pipeline {
    agent {
        node {
            customWorkspace "/home/jenkins/jenkins_workspace/${JOB_NAME}_${BUILD_NUMBER}"
        }
    }
    post {
        cleanup {
            /* clean up our workspace */
            deleteDir()
            /* clean up tmp directory */
            dir("${workspace}@tmp") {
                deleteDir()
            }
            /* clean up script directory */
            dir("${workspace}@script") {
                deleteDir()
            }
        }
    }
}

এই স্নিপেটটি ডিফল্ট ওয়ার্কস্পেসের জন্যও কাজ করবে।


1
ডকারাইজড পাইপলাইনের সাথেও কাজ করে। খুব সহায়ক, ধন্যবাদ!
এমসিডাব্লু

1
এটিই কেবলমাত্র আমি দেখেছি যা দেখেছি যে বিরক্তিকর @ লিবস ফোল্ডারটিও মেরে ফেলতে পারে
ডেভিড ল্যাভেন্ডার

4

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


4

'ওয়াইপ ওয়ার্কস্পেস' এক্সটেনশনটি ব্যবহার করাও কাজ করবে বলে মনে হচ্ছে। এটির জন্য লম্বা ফর্মটি দরকার:

checkout([
   $class: 'GitSCM',
   branches: scm.branches,
   extensions: scm.extensions + [[$class: 'WipeWorkspace']],
   userRemoteConfigs: scm.userRemoteConfigs
])

এখানে আরো বিস্তারিত: https://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-

এখানে গিটএসসিএম এক্সটেনশানগুলি পাওয়া যায়: https://github.com/jenkinsci/git-plugin/tree/master/src/main/java/hudson/plugins/git/extensions/impl


2

জেনকিন্স 2.190.1 এর জন্য এটি নিশ্চিতভাবে কাজ করে:

    post {
        always {
            cleanWs deleteDirs: true, notFailBuild: true
        }
    }

1

পরিষ্কার করা : যেহেতু পাইপলাইনের পোস্ট বিভাগটি পাইপলাইনের কার্য সম্পাদনের শেষে চালানোর গ্যারান্টিযুক্ত তাই আমরা চূড়ান্তকরণ, বিজ্ঞপ্তি বা পাইপলাইনের অন্যান্য শেষ কার্য সম্পাদনের জন্য কিছু বিজ্ঞপ্তি বা অন্যান্য পদক্ষেপ যুক্ত করতে পারি।

pipeline {
    agent any
    stages {
        stage('No-op') {
            steps {
                sh 'ls'
            }
        }
    }
    post {
        cleanup {
            echo 'One way or another, I have finished'
            deleteDir() /* clean up our workspace */
        }
    }
}

বিভিন্ন দাসের উপর দৌড়ানোর সময় এটি কাজ করে না!
কোডগিজ

1

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

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

    sh "git clean -x -f"

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


0

জেনকিনস কুবারনেটস প্লাগইন ব্যবহার করার সময় বর্তমানে মুছে ফেলা () এবং ক্লিনডাব্লু () উভয়ই সঠিকভাবে কাজ করে না, পোড ওয়ার্কস্পেস মুছে ফেলা হয়েছে তবে মাস্টার ওয়ার্কস্পেস অবিরত রয়েছে

চেকআউট কেলেঙ্কারীর পূর্বে ওয়ার্কস্পেস পরিষ্কার করার জন্য আপনার যখন পদক্ষেপ রয়েছে তখন এটি স্ট্রেনস্ট শাখাগুলির জন্য সমস্যা হওয়া উচিত নয়। এটি মূলত একই কর্মক্ষেত্রটি বারবার পুনরায় ব্যবহার করবে: তবে মাল্টব্র্যাঞ্চ পাইপলাইনগুলি ব্যবহার করার সময় মাস্টার পুরো কর্মক্ষেত্র এবং গিট ডিরেক্টরিটি রাখে

আমি বিশ্বাস করি এটি জেনকিন্সের সাথে একটি সমস্যা হওয়া উচিত, এখানে কোনও আলোকপাত?

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