【運維心得】Jenkins多分支pipeline磁盤滿了怎麼辦?

磁盤滿了

最近由於研發經常發佈版本,jenkins的job構建完成的歷史記錄沒有及時刪除,造成jenkins服務器的磁盤暴增,臨時採用人工刪除和腳本刪除的辦法,網上有很多此類文章,這裏就不詳述了。
但是上述兩種方式,都需要人工參與,有沒有自動刪除的方式呢?帶着這個問題,進行了研究,總結出下面的方法,分享給大家。

普通job設置

一般來說,如果僅僅是單個job,其實很簡單的,只要在設置裏配置一下就可以了,如下圖的job配置:
單個job
單個job配置參數

多分支job設置

但是,由於我們大多數job是多分支的pipeline,即job是由jenkins自動生成的,當你點開job的時候,會發現設置菜單有所變化,配置變成了只讀的了,如下圖:
多分支job
多分支job配置
結果發現,雖然可以去配置,但是並沒有保存按鈕,可見,上面的方法並不適合多分支的job。
有沒有辦法呢?

jenkinsfile

在回答上述問題之前,首先要jenkinsfile有所瞭解,網上有很多這樣的文章介紹,這裏就不多說了。只要知道剛纔多分支的job是由jenkinsfile 自動生成的,那麼有沒有辦法用jenkinsfile來設置這些job的配置呢?這個問題花了很多時間,終於找到了解決辦法。

圓滿解決

其實解決問題的辦法也很簡單,只要在你的jenkinsfile中增加一行代碼就可以了,不過,根據jenkinsfile的寫法,一共有兩種方式,筆者只驗證了第一種方式,第二種方式是基本方式,網上有很多例子,留給大家去驗證吧。

第一種方式

由於我們的jenkinsfile是利用外部參數的方式,類似如下這種形式:

// Jenkinsfile
def call(config) {
  def projectName = config.PROJECT_NAME   
  def serviceName = config.SERVICE_NAME   
  def deploymentName = config.DEPLOYMENT_NAME
  def containerName = config.CONTAINER_NAME
  def deployNamespace = config.PROJECT_NAME

這種方式,需要增加如下代碼在開頭:

def projectProperties = 
[
    //只保留5個構建記錄
    [$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', numToKeepStr: '5']]
]
properties(projectProperties)

效果驗證

加入上述代碼以後,多分支新建的job裏,會出現此配置,如下圖,完美的解決了問題,而且由於jenkinsfile是全局配置的,所以一次修改,所有的多分枝job的配置都可以統一配置了:
多分支代碼效果

第二種方式

這種方式比較簡單,網上都有現成的代碼,如下所示:

pipeline {
  options {
    buildDiscarder(logRotator(numToKeepStr: '10', artifactNumToKeepStr: '1'))
  }

留給大家自己去驗證吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章