Jenkins: มีวิธีใดในการล้างพื้นที่ทำงานของ Jenkins หรือไม่?


107

ฉันจะล้างพื้นที่ทำงานในเจนกินส์ได้อย่างไร ฉันใช้AccuRevเป็นเครื่องมือควบคุมเวอร์ชัน

ฉันสร้างfreestyleโครงการในเจนกินส์

คำตอบ:


97

มีวิธีล้างพื้นที่ทำงานใน Jenkins คุณสามารถล้างพื้นที่ทำงานก่อนสร้างหรือหลังสร้าง

ก่อนติดตั้งพื้นที่ทำงาน Cleanup ปลั๊กอิน

ในการล้างพื้นที่ทำงานก่อนสร้าง: ภายใต้สภาพแวดล้อมการสร้างให้เลือกช่องที่ระบุว่าลบพื้นที่ทำงานก่อนสร้างเริ่ม

ในการล้างพื้นที่ทำงานหลังจากการสร้าง: ภายใต้หัวข้อการดำเนินการหลังการสร้างให้เลือกลบพื้นที่ทำงานเมื่อสร้างเสร็จจากเมนูแบบเลื่อนลงเพิ่มการดำเนินการหลังการสร้าง


ขอบคุณมาก Nagendra ฉันสามารถแก้ไขปัญหานี้ได้โดยใช้ปลั๊กอินการล้างพื้นที่ทำงาน
Karthik

จะเกิดอะไรขึ้นถ้าฉันไม่ทำความสะอาดพื้นที่ทำงาน มันดึงการเปลี่ยนแปลงจาก url ระยะไกลหรือแค่สร้างสิ่งเดียวกันซ้ำแล้วซ้ำเล่า
alphaguy

@alphaguy Jenkins สร้างพื้นที่ทำงานใหม่สำหรับแต่ละบิลด์ที่คุณเรียกใช้ดังนั้นหากคุณไม่ลบพื้นที่ทำงานในที่สุดโหนดของคุณก็จะหมดพื้นที่
Miles Winther

เราสามารถนำพื้นที่ทำงานกลับมาใช้ใหม่ได้หรือไม่ .. ขณะนี้เมื่อฉันพุชโค้ดมันโคลนจากเซิร์ฟเวอร์ git แล้วเริ่มการสร้าง ขั้นตอนนี้ใช้เวลานานในการเพิ่มขั้นตอนพิเศษในการสร้าง! เราสามารถเลือกคอมมิตล่าสุดได้ไหม @MilesWinther
alphaguy

@alphaguy คุณสามารถใช้ repo อ้างอิงดูคำตอบได้ที่นี่: stackoverflow.com/a/9932036/6221831
Miles Winther

55

หากคุณต้องการทำความสะอาดด้วยตนเองสำหรับฉันด้วยเจนกินส์เวอร์ชันของฉัน (ดูเหมือนว่าไม่จำเป็นต้องติดตั้งปลั๊กอินเพิ่มเติม แต่ใครจะรู้) มีลิงก์ "พื้นที่ทำงาน" ที่คอลัมน์ด้านซ้ายคลิกที่โครงการของคุณ จากนั้นบน "พื้นที่ทำงาน" จากนั้นลิงก์ "ล้างพื้นที่ทำงานปัจจุบัน" จะปรากฏด้านล่างในคอลัมน์ด้านซ้ายมือ ภาพหน้าจอ


5
ฉันไม่เห็นว่าน่าเสียดาย แน่ใจว่าไม่ใช่ปลั๊กอิน?
Joachim Breitner

2
ดูเหมือนว่า "Workspace Cleanup Plugin" จะเป็นหนึ่งในปลั๊กอินที่ติดตั้ง "โดยค่าเริ่มต้น" อย่างไรก็ตามหลังจากลบออกฉันยังคงมีลิงก์นั้นอยู่และดูเหมือนว่าจะยังใช้งานได้ ไม่แน่ใจว่ามาจากไหน V2.121.3
rogerdpack

2
วิธีนี้ได้ผล แต่ฉันต้องคลิกลิงก์พื้นที่ทำงานสองครั้งครั้งแรกเพื่อไปที่หน้า "พื้นที่ทำงาน" ครั้งที่สองเพื่อแสดงลิงก์ "ล้างพื้นที่ทำงานปัจจุบัน" ฉันเดาว่าเป็นข้อมูลที่คุณสามารถรวมไว้ในคำตอบได้
Gnafu

เจนกินส์เวอร์ชั่นนี้คืออะไร? เนื่องจากของฉันไม่แสดงตัวเลือกนี้ (อาจเป็นของฉันเก่าเกินไป)
Pedro Trujillo

V2.121.3 ไม่แน่ใจในเวอร์ชันอื่น
rogerdpack

34

นอกจากโซลูชันข้างต้นแล้วยังมีวิธี "ทั่วไป" อีกวิธีหนึ่งคือลบผู้ใช้พื้นที่ที่ใหญ่ที่สุดออกจากเครื่อง Linux โดยตรง คุณสามารถทำตามขั้นตอนด้านล่าง:

  1. เข้าสู่ระบบ Jenkins machine (Putty) ป้อนคำอธิบายภาพที่นี่
  2. cd ไปยังพา ธ การติดตั้ง Jenkins

การใช้ ls -lart เพื่อแสดงรายการโฟลเดอร์ที่ซ่อนอยู่โดยปกติการติดตั้ง jenkin จะอยู่ใน. jenkins / โฟลเดอร์

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. แสดงรายการช่องว่างของโฟลเดอร์

Use df -h เพื่อแสดงพื้นที่ดิสก์ในระดับสูง

du -sh ./*/ เพื่อแสดงรายการหน่วยความจำทั้งหมดสำหรับแต่ละโฟลเดอร์ย่อยในเส้นทางปัจจุบัน

du -a /etc/ | sort -n -r | head -n 10 จะแสดงรายการไดเรกทอรี 10 อันดับแรกที่กินเนื้อที่ดิสก์ใน / etc /

  1. ลบบิลด์เก่าหรือโฟลเดอร์ขนาดใหญ่อื่น ๆ

โดยปกติโฟลเดอร์. /job/ หรือ. /workspace/ จะเป็นโฟลเดอร์ที่ใหญ่ที่สุด โปรดเข้าไปข้างในและลบฐานที่คุณต้องการ (อย่าลบทั้งโฟลเดอร์)

rm -rf theFolderToDelete

ป้อนคำอธิบายภาพที่นี่


4
ไม่แน่ใจว่าทำไมโหวตลง นี่เป็นตัวเลือกที่ดีสำหรับผู้ดูแลระบบ Jenkins ไม่ยอมรับสำหรับผู้ใช้ "อ่านอย่างเดียว"
Saikat

1. นี่ไม่ได้ตอบคำถามที่ถามจริงๆและ 2. เซิร์ฟเวอร์ Jenkins ของฉันกำลังทำงานบน Windows
mjaggard

10
@mjaggard คำถามถูกถามโดยคนอื่นและเขาไม่ได้พูดถึงว่าเป็นสำหรับ Windows เท่านั้น นอกจากนี้เขายังถามวิธีล้างพื้นที่ทำงาน (ไม่ จำกัด เฉพาะส่วนหน้า / ไคลเอนต์) ฉันพลาดอะไรที่ชัดเจนที่นี่?
Saikat

5
ฉันเห็นด้วยกับ @takias โดยสิ้นเชิงดูเหมือนว่าเป็นคำตอบที่ถูกต้องสำหรับคำถามนี้ และเป็นสิ่งที่ดีถ้าคุณมีสิทธิ์เพียงพอที่จะทำ
PhoneixS

1
นี่คือคำตอบสำหรับ "ฉันจะกู้คืนพื้นที่บนเครื่อง GNU / Linux ได้อย่างไร" ไม่ใช่เฉพาะเจนกินส์
Felipe Alvarez

23

สิ่งสำคัญ:สามารถลบพื้นที่ทำงานสำหรับงานของเจนกินส์ที่กำหนดได้อย่างปลอดภัยตราบใดที่งานไม่ทำงาน

หมายเหตุ:ฉันสมมติว่าคุณ$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/{}

ทำความสะอาดพื้นที่ทำงานที่ใหญ่ที่สุด 10 แห่ง

อันนี้ใช้ du และ sort เพื่อแสดงรายการพื้นที่ทำงานตามลำดับจากใหญ่ไปหาน้อยที่สุด จากนั้นใช้หัวเพื่อคว้า 10 คนแรก:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

3
สิ่งนี้เป็นอันตรายเนื่องจากงานอาจใช้พื้นที่ทำงานเหล่านั้น
aleb

22

ปลั๊กอิน Workspace Cleanup

ในไฟล์ Jenkins เพิ่ม

cleanWs()

การดำเนินการนี้จะลบพื้นที่ทำงานหลังจากการสร้างเสร็จสมบูรณ์


4
ฉันซาบซึ้งกับคำตอบนี้มากเพราะฉันติดตั้งปลั๊กอินจากคำตอบอื่น ๆ แล้ว แต่นี่คือสิ่งที่ทำให้การตั้งค่าของฉันทำงานได้ จากนั้นฉันได้ติดตามลิงก์ไปยังปลั๊กอินเดียวกันในคำตอบอื่น ๆ แต่cleanWs()ไม่มีอยู่ในหน้า Landing Page ของปลั๊กอินเป็นไวยากรณ์ที่จะเพิ่มลงในJenkinsfileไฟล์.
Arthur Weborg

14

คุณสามารถเรียกใช้สคริปต์ด้านล่างในManage JenkinsScripts 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")
  }
}

สิ่งนี้ใช้ไม่ได้สำหรับฉันมันแสดง java.lang.NullPointerException: ไม่สามารถรับคุณสมบัติ 'รายการ' บนวัตถุว่าง
Vincent Gerris

สคริปต์นี้ไม่ได้ทำอะไรให้ฉัน มันแสดงรายการโครงการของฉันด้วย "กำลังล้าง ... " แต่ไม่ได้ทำความสะอาดอะไรเลย ไดเร็กทอรีพื้นที่ทำงานยังคงเต็ม
Sergey Beloglazov

3

สมมติว่าคำถามเกี่ยวกับการทำความสะอาดพื้นที่ทำงานของงานปัจจุบันคุณสามารถเรียกใช้:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*

2

ไม่อนุญาตให้แสดงความคิดเห็นดังนั้น:

คำตอบจาก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")


1

คุณจะต้องติดตั้งปลั๊กอินนี้ก่อนตัวเลือกที่กล่าวถึงข้างต้นจึงจะปรากฏขึ้น

ปลั๊กอิน Workspace Cleanup

ปลั๊กอินนี้เพิ่มกล่องกาเครื่องหมายในการกำหนดค่างานทั้งหมดเพื่อให้คุณสามารถลบพื้นที่ทำงานทั้งหมดก่อนที่จะมีการรันขั้นตอนใด ๆ (การควบคุมแหล่งที่มา)

สิ่งนี้มีประโยชน์เพื่อให้แน่ใจว่าคุณเริ่มต้นจากจุดที่ทราบเสมอเพื่อรับประกันว่าการสร้างจะทำงานอย่างไร


3
โปรดเพิ่มข้อมูลที่ลิงค์ของคุณมีอยู่ คำตอบแบบลิงก์เท่านั้นไม่ใช่สิ่งที่เรากำลังมองหาจาก SO! :)
Chilion

2
ส่วนเสริมนี้ไม่มีข้อมูลเพิ่มเติมที่คำตอบนี้ยังไม่ได้กล่าวถึง ในความเป็นจริงมันเพิ่มน้อยกว่ามาก
Liam

1

มีทางเลือกให้ทำได้ กำหนดค่า -> การดำเนิน
การหลังการสร้างตัวเลือกมาโดยค่าเริ่มต้นอย่างน้อยใน Jenkins เวอร์ชัน 2.236


0

หากคุณต้องการลบ 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 ของคุณอาจแตกต่างออกไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.