Yanıtlar:
Sen kullanabilirsiniz deleteDir()
boru hattının son adımı Jenkinsfile (eğer çalışma dizinini değişmedi varsayarak) olarak.
checkout scm
.
@Gotgenes gibi Jenkins Sürümü ile dikkat çekti . 2.74 , aşağıda çalışır, ne zamandan beri emin değilim, belki bazıları yukarıdaki sürümü düzenleyip ekleyebilirse
cleanWs()
İle Jenkins Sürüm 2.16 ve Çalışma Alanı Temizleme Eklentisi , ben sahip olduklarım, kullanım
step([$class: 'WsCleanup'])
çalışma alanını silmek için.
Adresine giderek
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax
Ardından, Örnek adımdan "adım: Genel Derleme Adımı" nı seçin ve Derleme adımından "Derleme tamamlandığında çalışma alanını sil" i seçin
Bahsedilen çözümler deleteDir()
ve cleanWs()
( çalışma alanı temizleme eklentisi kullanılıyorsa ) her ikisi de çalışır, ancak ekstra bir oluşturma adımında kullanılması önerisi genellikle istenen çözüm değildir . Derleme başarısız olursa ve boru hattı iptal edilirse, bu temizleme aşamasına hiçbir zaman ulaşılmaz ve bu nedenle çalışma alanı başarısız derlemelerde temizlenmez.
=> Çoğu durumda, muhtemelen aşağıdaki gibi yerleşik bir adım durumuna getirmelisiniz always
:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
cleanWs()
}
}
}
cleanWs()
bir adım olarak çalışan post build arşiv komutu çalıştırmadan önce onları siler. cleanWs()
büyük olasılıkla her zaman bir post-build komutu olarak çalıştırılmalıdır
post
bölümünüz varsa, cleanWs()
güvenli bir şekilde duruma sokulabilir always
, ancak en güvenli nokta cleanup
koşulun içindedir :post { cleanup { cleanWs() } }
Aslında deleteDir işlevi geçerli dizini ve içeriğini özyinelemeli olarak siler. Sembolik bağlantılar ve kavşaklar izlenmeyecek, ancak kaldırılacaktır.
Çalışma alanının belirli bir dizinini silmek için dir adımında deleteDir adımını sarın.
dir('directoryToDelete') {
deleteDir()
}
Aşağıdaki gibi deleteDir () kullandım:
post {
always {
deleteDir() /* clean up our workspace */
}
}
Ancak, daha sonra da her zaman SONRA bir Başarı veya Başarısızlık yürütmek zorunda kaldım, ancak posta koşullarını sipariş edemezsiniz. Geçerli sipariş her zaman değiştirilir, iptal edilir, başarısızlık, başarı ve daha sonra kararsızdır.
Ancak, çok yararlı bir sonrası durum vardır temizleme her zaman son çalışır bkz https://jenkins.io/doc/book/pipeline/syntax/
Sonunda görevim şöyle oldu:
post {
always {
}
success{
}
failure {
}
cleanup{
deleteDir()
}
}
Umarım bu bazı köşe vakaları için yararlı olabilir
Aşağıdaki ardışık düzen komut dosyasını kullanarak:
pipeline {
agent { label "master" }
options { skipDefaultCheckout() }
stages {
stage('CleanWorkspace') {
steps {
cleanWs()
}
}
}
}
Bu adımları takip et:
options { skipDefaultCheckout() }
Biraz daha hızlı yürütme için ekleyin .
Jenkins'te özel çalışma alanı kullandıysanız deleteDir (), @tmp klasörünü silmez.
Çalışma alanı ile birlikte @tmp silmek için aşağıdaki kullanın
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()
}
}
}
}
Bu snippet, varsayılan çalışma alanı için de çalışır.
'WipeWorkspace' uzantısının kullanılması da işe yarıyor gibi görünüyor. Daha uzun bir form gerektirir:
checkout([
$class: 'GitSCM',
branches: scm.branches,
extensions: scm.extensions + [[$class: 'WipeWorkspace']],
userRemoteConfigs: scm.userRemoteConfigs
])
Daha fazla ayrıntı burada: https://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-
Kullanılabilir GitSCM uzantılarını burada bulabilirsiniz: https://github.com/jenkinsci/git-plugin/tree/master/src/main/java/hudson/plugins/git/extensions/impl
Temizleme : Bir Boru Hattı'nın yayın bölümünün bir Boru Hattı yürütme işleminin sonunda çalışması garanti edildiğinden, kesinleştirme, bildirim veya Boru Hattı sonu diğer görevleri gerçekleştirmek için bazı bildirimler veya başka adımlar ekleyebiliriz.
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 */
}
}
}
Benim durumumda, yapının başlangıcında eski dosyaları temizlemek istiyorum , ancak kaynak kodu teslim alındığı için bu sorunlu.
Benim çözümüm git hakkında bilmediği dosyaları (son derleme) temizlemek için sormaktır:
sh "git clean -x -f"
Bu şekilde temizlemeye başlayabilirim ve başarısız olursa, çalışma alanı temizlenmez ve bu nedenle kolayca hata ayıklanabilir.
Jenkins kubernetes eklentisi kullanılırken şu anda hem deletedir () hem de cleanWs () düzgün çalışmıyor, bölme çalışma alanı siliniyor ancak ana çalışma alanı devam ediyor
ödeme aldatmaca önce çalışma alanını temizlemek için bir adım varsa, kalıcı dalları için bir sorun olmamalıdır. Temel olarak aynı çalışma alanını tekrar tekrar kullanacaktır: ancak çok şubeli boru hatlarını kullanırken master tüm çalışma alanını ve git dizinini tutar
Bunun Jenkins'le ilgili bir sorun olması gerektiğine inanıyorum, burada aydınlanma var mı?