Jenkins มาจัดการกับ Build Log เพื่อป้องกันไม่ให้ Disk เต็มครับ

หลังจากพบว่า ฺBuild Server พื้นที่ Disk เต็มครับ โดยหลังจากลองใช้โปรแกรม TreeSize Free เข้ามาช่วงค้นหาว่า Folder ไหนที่มีขนาดใหญ่เกินไปจากปกติ จนพบสาเหตุว่า หนึ่งในสาเหตุที่พื้นที่ Disk เต็มนั้น เกิดจาก Build Log ที่ไม่มีการทำกระบวนการ House Keeping (เอาง่ายๆ คือ การลบข้อมูลที่ไม่จำเป็น เพื่อให้มีพื้นที่สำหรับใช้งานระบบเพียงพอครับ)

มาดูกันใน Jenkins ดีกว่า ถ้าจะ Clear Log ของการ Build ทำอย่างไรครับ

- กรณีที่สร้าง Task Build แบบ GUI

สำหรับในกรณีนี้สามารถใช้ Plugin Discard Old Build เข้ามาช่วยได้ครับ โดยสามารถกำหนดได้ในส่วนของ Post Build Actions ครับ โดยค่าที่ควรกำหนดไว้ ได้แก่

  • Max # of builds to keep : จำนวน Log ที่ต้องการเก็บ
  • Days to keep builds : จำนวนวันที่ต้องการเก็บ

ส่วน Option อื่นๆ ถ้าถามผม ผมมองว่ามันยุ่งยากสำหรับการใช้งานจริงครับ จะมีประโยชน์จริงๆ ในส่วนของ Status to discard ครับ

- กรณีที่เขียน Code เพื่อจัดการเรื่อง Build หรือง่ายๆว่า Pipeline

สำหรับในกรณีนี้ ในตัว Pipeline สามารถใส่ options ของ buildDiscarder ส่วน logRotator ของ Pipeline ได้ครับ โดยต้องมีการกำหนดค่าเพิ่ม ดังนี้ครับ

  • daysToKeepStr: จำนวนวันที่เก็บ Log ไว้
  • numToKeepStr: จำนวนของ Log ที่จัดเก็บไว้ ถ้าบิ้วบ่อยๆเมื่อเกินจากกำหนดระบบจะเคลียร์ของเก่าออกครับ
  • artifactDaysToKeepStr: จำนวนวันที่เก็บ artifacts ไว้
  • artifactNumToKeepStr: จำนวนของ artifacts ที่จัดเก็บไว้ ถ้าบิ้วบ่อยๆเมื่อเกินจากกำหนดระบบจะเคลียร์ของเก่าออกครับ

มาดูตัวอย่างการใช้กันเลยครับ

pipeline {
    agent {
        label {
            label ""
            customWorkspace "D:\\01DOTNETCODE\\01TRUNK\\WmslDesktopApp"
        }
    }
	//กำหนดว่าควรจะเป็น Build Log ไว้กี่เวอร์ชัน
	options {
        buildDiscarder(logRotator(numToKeepStr: '3', daysToKeepStr: '15'))
    }
    environment {
        singleQuotes = "'"+'"'+"'"
        svnrevision = ''
    }
    stages {
        stage('Some State'){
            steps {
               //Some Steps
            }
        }
	}
}

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.