概述
由於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子目錄