jenkins workpase最佳化清理

肖祥發表於2024-08-18

概述

由於jenkins pipline指令碼是通用的,可以釋出上百個java專案,但是這些微服務執行job時,共用了一個Workspaces路徑。

就會產生一個問題,當執行微服務a時,正好在執行mvn命令,編譯jar包。這個時候,同時執行微服務b時,就會覆蓋當前Workspaces的檔案。

那麼微服務a編譯jar包,就會失敗。

為了避免這個問題,解決方法就是,每執行一個job時,就建立一個當前build number的子目錄,當前這個job就在子目錄中執行。

由於build number每次執行時,會自動增加,且是唯一的。

就不會出併發執行job時,產生目錄衝突問題。

workspaces子目錄

修改pipline指令碼,在執行每一個steps時,增加dir即可,例如:

stage("Code Preparation") {
  steps {
	dir("$BUILD_NUMBER"){
	  git branch: 'master', credentialsId: credentialsId, url: "http://xxx.git"
	}
  }
}

BUILD_NUMBER,是Jenkins的內建全域性變數,表示構建id

workpase空間清理

當job執行次數時,比如BUILD_NUMBER,增加到上百上時,此時workpase空間會越來越大,因此需要設定策略,保留最近一段時間的。

點選job,進行設定,保留最近30天的,最大保留60個構建記錄

勾選Discard old builds

Days to keep builds設定為30

Max # of builds to keep設定為60

上面的pipline建立的workpase子目錄,這個策略對此不生效。

因此子目錄需要用的手段來清理。

在pipline的末尾,增加一個步驟,清理workpase子目錄

stage("clean workspace") {
	steps {
		dir("$BUILD_NUMBER"){
			cleanWs() // 清理工作空間
		}
		sh "rm -rf ${BUILD_NUMBER}@tmp"
	}
}

這樣就可以徹底清理workpase子目錄

相關文章