Jenkins實踐指南-11-Jenkins 其他功能

7. Jenkins 其他功能

    [作者:Surpassme]本篇主要介紹日常使用Jenkins過程中一些比較實用的功能。

7.1 Jenkins內部調用另一個job

    [作者:Surpassme]假設在一個Jenkins中有兩個彼此獨立的任務,但隨着迭代不斷更新,兩個彼此獨立的任務需要相互調用。這時候我們可以在一個任務中,添加另一個任務的步驟。除這種方法,還有沒有其他的辦法呢?

    [作者:Surpassme]既然在Jenkins存在參數化的pipeline,則應該是可以支持在一個pipeline中調用另一個pipeline。而要實現這個功能,在pipeline中可以使用build步驟來實現。看起來是不是與upsteam非常相似,主要區別如下所示:

  • build 步驟是上游使用,而upstream是下游使用
  • build 可以帶參數,而upsteam屬於被動觸發且不能帶參數

    [作者:Surpassme]build 使用用法示例如下所示:

steps{
   build(
     job:"jobName",
     parameters:[
        paramsType(name:"name",value:"value")
     ],
     propagate:true,
     quietPeriod:3,
     wait:true
   )
}

    [作者:Surpassme]build 步驟的兩個基本參數如下所示:

  • job: 必填參數,目標任務的名稱
  • parameters: 可選參數,目標任務的傳入參數列表,使用方法與參數化命令parameters類似。
  • propagate:可選參數,布爾類型。若值爲true,則只有當下遊pipeline的運行結果狀態爲SUCCESS時,上游pipeline纔算成功,若值爲false,則忽略下游pipeline的運行結果狀態,上游pipeline都忽略。默認爲true
  • quietPeriod:可選參數,整型。觸發下游pipeline後,下游pipeline等待多久執行。如果不設置,則等待時長由下游pipeline確定,單位爲
  • wait:可選參數,布爾類型,是否等待下游pipeline運行完成。默認爲true

choice類型的參數沒有對應的傳參方法,使用string傳參方法代替

    [作者:Surpassme]假設現在有兩個job,分別爲SurpassASurpassB,上游爲SurpassA,下游爲SurpassB

  • SurpassB的任務pipeline腳本如下所示:
pipeline{
    agent any
    options{
        timestamps()
    }
    parameters{
        string(
          name:"stringDemo",
          defaultValue:"job string SurpassB",
          description:"job SurpassB string demo"
        )
        text(
          name:"textDemo",
          defaultValue:"job text SurpassA\njob text SurpassB\njob text SurpassC",
          description:"job SurpassB text demo"
        )
        booleanParam(
          name:"booleanDemo",
          defaultValue:true,
          description:"job SurpassB boolean demo"
        )
        choice(
          name:"choiceDemo",
          choices:["SurpassA","SurpassB","SurpassC"],
          description:"job SurpassB choice demo"
        )
        password(
          name:"passwdDemo",
          defaultValue:"job passwd SurpassB",
          description:"job SurpassB password demo"
        )
    }

    stages{
        stage("job SurpassB demo"){
            steps{
                echo "job SurpassB demo"
            }
        }
    }
}
  • SurpassA的任務pipeline腳本如下所示:
pipeline{
    agent any
    options{
        timestamps()
    }

    stages{
        stage("call inner jobs demo"){
            steps{
                echo "call inner job SurpassB"
                build(
                    job:"39-SurpassB",
                    parameters:[
                        string(name:"stringDemo",value:"input text by SurpassA"),
                        text(name:"textDemo",value:"input text by SurpassB"),
                        booleanParam(name:"booleanDemo",value:false),
                        string(name:"choiceDemo",value:"SurpassB"),
                        password(name:"passwdDemo",value:"Surpass")
                    ]
                )
            }
        }
    }
}

    最終運行結果如下所示:

7.2 Jenkins調用外部Jenkins

    [作者:Surpassme]前面演示的在同一個Jenkins,內部相互調用不同任務的pipeline,那如果是兩個不同服務節點的Jenkins有沒有相互調用呢?答案是可以的。

    通過遠程Jekins調用本地Jenkins,演示的環境如下所示:

Jenkins Server 描述信息
192.168.188.133 本地Jenkins
192.168.188.132 遠程Jenkins

    操作步驟如下所示:

  • [作者:Surpassme]1.在本地Jenkins開啓觸發遠程構建,並設置相應的Token,如下所示:

  • [作者:Surpassme]2.在本地Jenkins新建一個用戶,並以該用戶進行登錄,查看並複製對應的API Token信息,如下所示:

  • [作者:Surpassme]3.通過接口工具(如Postman)發送HTTP請求,檢驗是否能成功調用

    運行結果如下所示:

pipeline{
    agent any
    options{
        timestamps()
    }

    stages{
        stage("remote call pipeline demo"){
            steps{
                script{
                    def url="Surpass:[email protected]:9090/job/39-SurpassB/buildWithParameters?token=surpass-local&stringDemo=SurpassRemote&textDemo=SurpassRemote&booleanDemo=true&choiceDemo=SurpassB&passwdDemo=SurpassRemote"
                    sh(
                        script:"curl -X POST \'${url}\'",
                        returnStatus:true
                    )
                }
            }
        }
    }
}

    [作者:Surpassme]運行結果如下所示:

7.3 Jenkins 備份

    [作者:Surpassme]Jenkins 的所有數據都是存放在文件中。因此Jenkins備份也就是備份JENKINS_HOME目錄。其目錄結構大致如下所示:

  • config.xml: Jenkins系統配置文件
  • *.xml: 部分插件配置文件
  • plugins:插件安裝路徑
  • jobs: job存放路徑

    其中jobs的文件目錄結構如下所示:

jobName: 以Jenkins 項目名稱做爲文件夾名稱
   - config.xml: 該項目對應的配置文件,裏面存儲有相應的pipeline
   - nextBuildNumber:存放下一次構建的構建號,爲文本文件
   - builds:每次構建內容
  • workspace: 工作空間目錄

    [作者:Surpassme]並不是所有內容都需要備份,一般來講,只需要備份jobsplugins目錄即可。

原文地址:https://www.jianshu.com/p/56aeeaa39fa4

本文同步在微信訂閱號上發佈,如各位小夥伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注:

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