ฉันจะล้างพื้นที่ทำงานในเจนกินส์ได้อย่างไร ฉันใช้AccuRev
เป็นเครื่องมือควบคุมเวอร์ชัน
ฉันสร้างfreestyle
โครงการในเจนกินส์
ฉันจะล้างพื้นที่ทำงานในเจนกินส์ได้อย่างไร ฉันใช้AccuRev
เป็นเครื่องมือควบคุมเวอร์ชัน
ฉันสร้างfreestyle
โครงการในเจนกินส์
คำตอบ:
มีวิธีล้างพื้นที่ทำงานใน Jenkins คุณสามารถล้างพื้นที่ทำงานก่อนสร้างหรือหลังสร้าง
ก่อนติดตั้งพื้นที่ทำงาน Cleanup ปลั๊กอิน
ในการล้างพื้นที่ทำงานก่อนสร้าง: ภายใต้สภาพแวดล้อมการสร้างให้เลือกช่องที่ระบุว่าลบพื้นที่ทำงานก่อนสร้างเริ่ม
ในการล้างพื้นที่ทำงานหลังจากการสร้าง: ภายใต้หัวข้อการดำเนินการหลังการสร้างให้เลือกลบพื้นที่ทำงานเมื่อสร้างเสร็จจากเมนูแบบเลื่อนลงเพิ่มการดำเนินการหลังการสร้าง
นอกจากโซลูชันข้างต้นแล้วยังมีวิธี "ทั่วไป" อีกวิธีหนึ่งคือลบผู้ใช้พื้นที่ที่ใหญ่ที่สุดออกจากเครื่อง Linux โดยตรง คุณสามารถทำตามขั้นตอนด้านล่าง:
การใช้ ls -lart เพื่อแสดงรายการโฟลเดอร์ที่ซ่อนอยู่โดยปกติการติดตั้ง jenkin จะอยู่ใน. jenkins / โฟลเดอร์
[xxxxx ~]$ ls -lart drwxrwxr-x 12 xxxx 4096 Feb 8 02:08 .jenkins/
Use df -h
เพื่อแสดงพื้นที่ดิสก์ในระดับสูง
du -sh ./*/
เพื่อแสดงรายการหน่วยความจำทั้งหมดสำหรับแต่ละโฟลเดอร์ย่อยในเส้นทางปัจจุบัน
du -a /etc/ | sort -n -r | head -n 10
จะแสดงรายการไดเรกทอรี 10 อันดับแรกที่กินเนื้อที่ดิสก์ใน / etc /
โดยปกติโฟลเดอร์. /job/ หรือ. /workspace/ จะเป็นโฟลเดอร์ที่ใหญ่ที่สุด โปรดเข้าไปข้างในและลบฐานที่คุณต้องการ (อย่าลบทั้งโฟลเดอร์)
rm -rf theFolderToDelete
สิ่งสำคัญ:สามารถลบพื้นที่ทำงานสำหรับงานของเจนกินส์ที่กำหนดได้อย่างปลอดภัยตราบใดที่งานไม่ทำงาน
หมายเหตุ:ฉันสมมติว่าคุณ$JENKINS_HOME
ถูกตั้งค่าเป็นค่าเริ่มต้น: /var/jenkins_home
.
rm -rf /var/jenkins_home/workspaces/<workspace>
rm -rf /var/jenkins_home/workspaces/*
อันนี้ใช้ grep เพื่อสร้างรายการที่อนุญาต:
ls /var/jenkins_home/workspace \
| grep -v -E '(job-to-skip|another-job-to-skip)$' \
| xargs -I {} rm -rf /var/jenkins_home/workspace/{}
อันนี้ใช้ du และ sort เพื่อแสดงรายการพื้นที่ทำงานตามลำดับจากใหญ่ไปหาน้อยที่สุด จากนั้นใช้หัวเพื่อคว้า 10 คนแรก:
du -d 1 /var/jenkins_home/workspace \
| sort -n -r \
| head -n 10 \
| xargs -I {} rm -rf /var/jenkins_home/workspace/{}
ในไฟล์ Jenkins เพิ่ม
cleanWs()
การดำเนินการนี้จะลบพื้นที่ทำงานหลังจากการสร้างเสร็จสมบูรณ์
cleanWs()
ไม่มีอยู่ในหน้า Landing Page ของปลั๊กอินเป็นไวยากรณ์ที่จะเพิ่มลงในJenkinsfile
ไฟล์.
คุณสามารถเรียกใช้สคริปต์ด้านล่างในManage Jenkins → Scripts Consoleเพื่อลบพื้นที่ทำงานของงานทั้งหมดในนัดเดียว เราทำสิ่งนี้เพื่อล้างพื้นที่บนระบบไฟล์
import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
// check that job is not building
if(!item.isBuilding()) {
println("Wiping out workspace of job "+item.name)
item.doDoWipeOutWorkspace()
}
else {
println("Skipping job "+item.name+", currently building")
}
}
สมมติว่าคำถามเกี่ยวกับการทำความสะอาดพื้นที่ทำงานของงานปัจจุบันคุณสามารถเรียกใช้:
test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*
ไม่อนุญาตให้แสดงความคิดเห็นดังนั้น:
คำตอบจากUpen ใช้งานได้ดี แต่ไม่ใช่ถ้าคุณมี Jenkins Pipeline Jobs ผสมกับ Freestyle Jobs ไม่มีวิธีการเช่น DoWipeWorkspace บน Pipeline Jobs ดังนั้นฉันจึงแก้ไขสคริปต์เพื่อข้ามสิ่งเหล่านี้:
import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob
// For each project
for(item in Hudson.instance.items) {
// check that job is not building
if(!item.isBuilding() && !(item instanceof WorkflowJob))
{
println("Wiping out workspace of job "+item.name)
item.doDoWipeOutWorkspace()
}
else {
println("Skipping job "+item.name+", currently building")
}
}
คุณยังสามารถกรองตามชื่องานได้หากต้องการ:
item.getDisplayName().toLowerCase().contains("release")
คุณจะต้องติดตั้งปลั๊กอินนี้ก่อนตัวเลือกที่กล่าวถึงข้างต้นจึงจะปรากฏขึ้น
ปลั๊กอินนี้เพิ่มกล่องกาเครื่องหมายในการกำหนดค่างานทั้งหมดเพื่อให้คุณสามารถลบพื้นที่ทำงานทั้งหมดก่อนที่จะมีการรันขั้นตอนใด ๆ (การควบคุมแหล่งที่มา)
สิ่งนี้มีประโยชน์เพื่อให้แน่ใจว่าคุณเริ่มต้นจากจุดที่ทราบเสมอเพื่อรับประกันว่าการสร้างจะทำงานอย่างไร
มีทางเลือกให้ทำได้ กำหนดค่า -> การดำเนิน
การหลังการสร้างตัวเลือกมาโดยค่าเริ่มต้นอย่างน้อยใน Jenkins เวอร์ชัน 2.236
หากคุณต้องการลบ dir (หรือไฟล์) เพียงไฟล์เดียวคุณสามารถใช้ Groovy และ Manage Jenkins → Scripts Console เรียกใช้สคริปต์ที่ลบออก
ตัวอย่างเช่นคุณสามารถดูไฟล์ด้วย:
dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
println(it)
}
จากนั้นเมื่อคุณมีโฟลเดอร์ที่ต้องการลบdh
คุณสามารถต่อท้ายรหัสถัดไป:
dh.deleteDir()
และมันจะถูกลบ
หมายเหตุ: เส้นทางที่แสดงในตัวอย่างใช้สำหรับการติดตั้ง Bitnami Jenkins ของคุณอาจแตกต่างออกไป