03.05 流水線實踐:使用ShareLibrary擴展Jenkinsfile


流水線實踐:使用ShareLibrary擴展Jenkinsfile


流水線實踐:使用ShareLibrary擴展Jenkinsfile

引導

您好,本模塊主要學習Jenkins共享庫的配置,目的是能夠讓大家編寫更加靈活強大的流水線。主要包含以下內容:

1. 共享庫內容

2. 創建共享庫

3. 使用共享庫

適合人群: 所有對DevOps感興趣的同學。


簡介

共享庫這並不是一個全新的概念,其實具有編程能力的同學應該清楚一些。例如在編程語言Python中,我們可以將Python代碼寫到一個文件中,當代碼數量增加,我們可以將代碼打包成模塊然後再以import的方式使用此模塊中的方法。

在Jenkins中使用Groovy語法,共享庫中存儲的每個文件都是一個groovy的類,每個文件(類)中包含一個或多個方法。每個方法包含groovy語句塊。


共享庫內容

這是一個demo演示的共享庫,大家可以看到倉庫的結構與內容。這個倉庫中包含了很多類,例如:我將kubernetes中的API方法封裝在了kubernetes.groovy文件中,便於後面引用。在此你只需要知道共享庫的結構 ,具體該如何創建共享庫後面會講述

<code>── docs
│ └── README.mdREADME.md
├── src
│ └── org
│ └── devops
│ └── tools.groovy
└── vars/<code>

src目錄主要存放我們要編寫的groovy類,執行流水線時,此目錄將添加到class_path中。vars目錄主要存放腳本文件,這些腳本文件在流水線中作為變量公開。resources目錄允許從外部庫中使用步驟來加載相關聯的非Groovy文件。


創建共享庫

新建文件src/org/devops/tools.groovy, 在此我將這個文件定義為擴展工具類,主要放一些擴展方法。

例如:在構建日誌中查看流水線詳細日誌會很亂,我們可以在日誌中將重點步驟通過不同的顏色高亮顯示,便於排錯。我們開始寫這樣的一個方法PrintMes(),包含兩個參數,輸出內容value和內容的顏色color。

注意:我們需要安裝 插件AnsiColor,這樣才能使用ansiColor()方法,可以在片段生成器查看更多的用法。

<code>package org.devops

//格式化輸出
def PrintMes(value,color){
colors = ['red' : "\\033[40;31m >>>>>>>>>>>${value}<<<<<<<<<<< \\033[0m",
'blue' : "\\033[47;34m ${value} \\033[0m",
'green' : "[1;32m>>>>>>>>>>${value}>>>>>>>>>>[m",
'green1' : "\\033[40;32m >>>>>>>>>>>${value}<<<<<<<<<<< \\033[0m" ]
ansiColor('xterm') {
println(colors[color])
}
}/<code>


使用共享庫

我們導航到 系統配置 -> Global Pipeline Libraries

首先,我們為共享庫設置一個名稱jenkinslib,注意這個名稱後續在Jenkinsfile中引用。再設置一個默認的版本,這裡的版本是分支的名稱。我默認配置的是master版本。


流水線實踐:使用ShareLibrary擴展Jenkinsfile

接下來我們配置共享庫的倉庫地址,我的倉庫在github中,所以這裡我填寫的是github的方式。(如果你用的是gitlab可以使用gitlab方式或者git方式)。如果倉庫是私有的方式,需要在jenkins的憑據中添加一個賬號用於下載共享庫。


流水線實踐:使用ShareLibrary擴展Jenkinsfile

好,到此共享庫在Jenkins的配置就完成了,接下來測試在Jenkinsfile中引用。

在Jenkinsfile中使用@Library('jenkinslib') _來加載共享庫,注意後面符號_用於加載。類的實例化def tools = new org.devops.tools(),使用類中的方法tools.PrintMes("獲取代碼",'green')。

<code>#!groovy

@Library('jenkinslib') _

def tools = new org.devops.tools()

pipeline {
agent { node { label "master" }}

stages {
//下載代碼
stage("GetCode"){
steps{
timeout(time:5, unit:"MINUTES"){
/> tools.PrintMes("獲取代碼",'green')
}
}
}
}
}
}/<code>

接下來在你的Jenkins上面運行一下吧,測試一下是否能夠看到帶有綠色的文字呢?




流水線實踐:使用ShareLibrary擴展Jenkinsfile


流水線實踐:使用ShareLibrary擴展Jenkinsfile


分享到:


相關文章: