国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

jenkins擴展你的流水線(共享庫)

這篇具有很好參考價值的文章主要介紹了jenkins擴展你的流水線(共享庫)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


一、概述

與任何編程環(huán)境一樣,在 Jenkins 流水線中,集中化功能、共享公共代碼和代碼重用都是快速、有效地進行開發(fā)的基本技術(shù)。這些實踐鼓勵使用標(biāo)準(zhǔn)方法來調(diào)用功能,為更復(fù)雜的操作創(chuàng)建構(gòu)建塊并隱藏復(fù)雜性。它們還可以用于提供一致性以及鼓勵約定優(yōu)于配置以簡化任務(wù)。

Jenkins 允許用戶完成所有這些操作的 一個關(guān)鍵方法就是,使用共享流水線庫。共享流水線庫是由存儲在代碼倉庫中的代碼組成的,該代碼倉庫由 Jenkins 自動下載并可供流水線使用。

二、可信庫和不可信庫

可信庫

可信庫可以調(diào)用/使用 Java 中的任何方法、 Jenkins API 、Jenkins 插件、 Groovy 語言等。對可信庫進行更新應(yīng)該需要適當(dāng)級別的源碼版本控制訪問和驗證

不可信庫

  • 不可信代碼是被調(diào)用和使用限制的代碼 調(diào)用先前列出的方法類型不允許使用相同的自由度,而且它不能像可信代碼那樣訪問更大的內(nèi)部對象集合。
  • 不可信代碼運行在 Groovy 沙箱中,它具有一個可“安全”調(diào)用的方法列表。在沙箱中運行時, Jenkins 會監(jiān)控庫代碼是否在嘗試調(diào)用不存在于安全列表中的任何方法。如果是,則停止執(zhí)行代碼并且必須由管理員授予批準(zhǔn)。
    jenkins擴展你的流水線(共享庫)

三、內(nèi)部庫與外部庫

內(nèi)部庫

這是一種管理庫的舊方法,但仍然是一種選擇。 Jenkins 包含一個內(nèi)部 Git 倉庫,可用于存儲內(nèi)部庫或測試目的。放置在此庫中的任何內(nèi)容對于所有腳本都是可信的,但推送代碼到該庫的任何人都必須具有相應(yīng)的管理權(quán)限。

內(nèi)部 Git 倉庫有 一個特定的名稱: workflowLibs.git 。它可以通過 SSH 訪問或 HTTP 訪問與 Git 一起工作。

SSH訪問

系統(tǒng)管理→全局安全配置
jenkins擴展你的流水線(共享庫)
指定一個端口并保存
jenkins擴展你的流水線(共享庫)
用戶列表
jenkins擴展你的流水線(共享庫)
選admin用戶
jenkins擴展你的流水線(共享庫)
設(shè)置
jenkins擴展你的流水線(共享庫)
講linux服務(wù)器的公鑰粘貼到下方
jenkins擴展你的流水線(共享庫)

jenkins擴展你的流水線(共享庫)

到linux機器上執(zhí)行如下命令

git clone ssh://admin@192.168.1.2:22222/workflowlibs.git

HTTP 訪問

git clone http://192.168.1.2:8080/workflowLibs.git

一旦復(fù)制了 內(nèi)部倉庫 ,它的初始狀態(tài)為空。要開始使用它,你需要切換到工作目錄并創(chuàng)一個新的主分支:

cd workflowLibs/
git checkout -b master

外部庫

配置一個外部庫

系統(tǒng)管理→系統(tǒng)配置→Global Pipeline Libraries
jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)
參數(shù)解釋:

Name:庫的名稱(將在腳本中使用它來進行訪問)
Default Version:可以是分支或標(biāo)簽
Load implicitly:隱式加載。如果選中,腳本將自動訪問這個庫,而不需要通過@Library請求它;
Allow default version to be overridden:可以通過在@Library 注解中指定@version 來覆蓋默認(rèn)版本,如@Library('libname@version')_ 
Includ@Library changes in recent job changes:在最近的任務(wù)變更集中包含@Library 更改。
		可以通過在注解中添加 changelog = <boolean> 參數(shù)來覆蓋此設(shè)置,如:@Library(value="libname[@version]",changelog=truejfalse)

四、在流水線腳本中使用庫

從源碼版本控制中自動下載庫

jenkins擴展你的流水線(共享庫)

加載庫到腳本中

如果有內(nèi)容,那么 workflowlibs 全局內(nèi)部庫將會被自動加載。你可以使用隱式加載復(fù)選項指定用于流水線的外部庫應(yīng)該被自動加載。

如果你選擇了隱式加載庫,你仍然可以使用以下格式的import 語句指定一組方法

//導(dǎo)人 一些方法的合集
import static org.demo.Utilities.*

如果不使用自動加載庫的選項,則必須在流水線腳本中使用語句來顯式地加載庫并使其可用 。有幾種不同的方法可以做到這 點

@Library 注解

在基于Java 的語 句中,注解是可以放在代碼中以增加(或“注解”)其他代碼的元數(shù)據(jù)。

在使用 Jenkins 流水線語法的情況下,注解結(jié)構(gòu)不僅用作注解, 且能更多地用作另一種語法構(gòu)造。

具體來說,你可以在流水線腳本中使用 Library 注解來 加載庫。要 加載庫的名稱以及可選的版本都被指定為參數(shù)。此處是其基本語法:

@Library ('<libname>[@<version>]')_ [<import statement>]

關(guān)于語法有以下要點。
jenkins擴展你的流水線(共享庫)
以下是一些簡單的示例:

//加載 一個庫的默認(rèn)版本
@Library ('mylib')_ 
//加載一個庫的指定版本并覆蓋默認(rèn)版本
@Library('yourlib@2.0')_ 
//用一條語句訪 問多個庫
@Library(['myLib','yourlib@master')
//帶導(dǎo)人語句的注解
@Library('mylib@l.0') import static org.demo.Utilities.*

注解會被放置在腳本的開頭,腳本式流水線的 node 行上方,或者聲明式流水線中pipeline 上方。

庫步驟

從Jenkins 2.7 開始,可以在流水線中使用實際的 library 步驟。語法類似于注解:

library "<libname>[@<version>]"

由于這是 一個實際的流水線步驟,因此可以將其放置在流水線中的任何位置。它還允許使用變 量代替參數(shù)。例如,你可以將其定義為從內(nèi)置 BRANCH_NAME 變量代表的當(dāng)前任何版本中獲取共享庫。

library "<libname>@$<BRANCH_NAME>"

庫指令

在聲明式流水線中,我們還有另 一個用于提取庫的選項。我們可以使用 libraries 指令指定要加載的庫。在指令中,我們可以使用 lib 語句指定庫。

jenkins擴展你的流水線(共享庫)

五、Jenkins 項目中的庫范圍

如果在 Jenkins 全局/根級別指定隱式加載 ,則所 有任務(wù)都將自動下載庫并且?guī)炜捎谩?br> 但是,如果你配置文件夾并隱式地加載一 個指定的共享庫,則只有該文件夾中的任務(wù)才能自動下載和訪問庫
jenkins擴展你的流水線(共享庫)

六、共享庫代碼的結(jié)構(gòu)

一個共享庫樹有 3個子樹:src 、vars和 resources 。
jenkins擴展你的流水線(共享庫)

src

此區(qū)域旨在使用標(biāo)準(zhǔn) Java 目錄結(jié)構(gòu)的 Groovy 文件進行設(shè)置(即src/org/foo/bar.groovy),當(dāng)執(zhí)行流水線時,它將被添加到類路徑中。

示例一:

創(chuàng)建 一個不包 在類中的簡單方怯

在外部庫創(chuàng)建groovy文件:src/org/demo/build.groovy
jenkins擴展你的流水線(共享庫)
build.groovy的內(nèi)容:

//org.demo.build.groovy
package org.demo
def mvnBuild(args) {
    sh """
        echo "mvn -q ${args} -Dmaven.test.skip=true"
    """
}

在腳本式流水線中引用:

node() {
    def myBuild = new org.demo.build()
    myBuild.mvnBuild("clean install")
}

jenkins擴展你的流水線(共享庫)

示例二:

創(chuàng)建 一個封閉類(以便定義超類) ,然后,你可以在類的構(gòu)造函數(shù)或方法中通過將 steps 對象傳遞給 一個方法來獲取訪問所有 DSL 步驟的權(quán)限。

src/org/demo/Utilities.groovy

//org.demo.Utilities.groovy

class Utilities implements Serializable {
    def steps
    Utilities(steps) {this.steps = steps}
    def mvnBuild(args) {
        steps.sh """
            echo "mvn -q ${args} -Dmaven.test.skip=true"
        """
    }
}

由于我們將其封裝在 一個類中,因此該類必須實現(xiàn) Serializable 以支持在流水線停 止或重新啟動 時能保存狀態(tài)。
腳本式流水線

@Library('share_library') import org.demo.Utilities
def utils = new Utilities(steps)

node() {
    step([$class: 'WsCleanup'])     //清理工作空間
    utils.mvnBuild "clean install"
}

示例三:

其它項(如環(huán)境變量)可以用與步驟相同的方式進行傳遞。在下面的代碼中,我們傳入 env 對象并在我 的代碼中使用它

src/org/demo/Utilities.groovy

//org.demo.Utilities.groovy

class Utilities implements Serializable {
    def env
    def steps
    Utilities(env,steps) {
        this.env = env
        this.steps = steps
    }
    def mvnBuild(args) {
        steps.sh """
            echo "構(gòu)建號:${env.BUILD_NUMBER}"
            echo "mvn -q ${args} -Dmaven.test.skip=true"
        """
    }
}

腳本式流水線代碼:

@Library('share_library') import org.demo.Utilities
def utils = new Utilities(env,steps)

node() {
    step([$class: 'WsCleanup'])     //清理工作空間
    utils.mvnBuild "clean install"
}

jenkins擴展你的流水線(共享庫)

示例四(推薦使用

對于更簡單的情況,你只需傳人Script 對象,該對象已經(jīng)可以訪問所有內(nèi)容。在這種情況下,我們將它傳遞給靜態(tài)方法:

src/org/demo/Utilities.groovy腳本

//org.demo.Utilities.groovy
package org.demo

class Utilities {
    static def mvnBuild(script,args) {
        script.sh """
            echo "構(gòu)建號:${script.env.BUILD_NUMBER}"
            echo "mvn -q ${args} -Dmaven.test.skip=true"
        """
    }
}

腳本式流水線代碼

@Library('share_library') import static org.demo.Utilities.*

node() {
    step([$class: 'WsCleanup'])     //清理工作空間
    mvnBuild this, "clean install"
}

vars

jenkins擴展你的流水線(共享庫)
你可以在一 個Groovy文件的vars區(qū)域 定義可能想要用于流水線 中變量 的任何方法。

示例

jenkins擴展你的流水線(共享庫)

vars/timedCommand.groovy

// vars/timedCommand.groovy
def setCommand(commandToRun) {
    cmd = commandToRun
}
def getCommand() {
    cmd
}
def runCommand() {
    timestamps {
        cmdOut = sh(script:"${cmd}",returnStdout:true).trim()
    }
}
def getOutput() {
    cmdOut
}

cmd 和cmdOut 在此處不是字段,而是按需創(chuàng)建的對象。

腳本式流水線代碼:

@Library('share_library')_

node() {
    step([$class: 'WsCleanup'])     //清理工作空間
    timedCommand.cmd = 'echo 123'
    echo timedCommand.cmd 
    timedCommand.runCommand() 
    echo timedCommand.getOutput()
}

全局變量的自動文檔引用

在vars目錄下創(chuàng)建文件timedCommand.txt
jenkins擴展你的流水線(共享庫)
內(nèi)容為:

# 變量文檔說明
xxxx

當(dāng)執(zhí)行過使用timedCommand變量的流水線后,在流水線語法→全局變量
jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)
可以看到有關(guān)timedCommand變量的文檔說明
jenkins擴展你的流水線(共享庫)

像使用步驟一樣使用全局變量

你可以創(chuàng)建全局變量定義,其行為類似于流水線腳本中的步驟。也就是說,它們可以像常規(guī)流水線步驟 一樣被調(diào)用 。
解決這個問題的方法是在全局變量的定義中定義 call 方法。

示例一:

vars/timedCommand2.groovy

//vars/timedCommand2.groovy
def call(cmd,logFilePath) {
    timestamps {
        cmdOutput = sh(script:"${cmd}",returnStdout:true).trim()
    }
    echo cmdOutput
    writeFile file:"${logFilePath}", text:"${cmdOutput}"
}

腳本式流水線:

@Library('share_library')_

node() {
    step([$class: 'WsCleanup'])     //清理工作空間
    timedCommand2 'ls -la','test.log'
}
示例二

jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)
腳本式流水線

@Library('share_library')_

node() {
    step([$class: 'WsCleanup'])     //清理工作空間
    timedCommandWindow {
    	echo "在Windows上執(zhí)行"
    }
    timedCommandLinux {
    	echo "在Linux上執(zhí)行"
    }
}
示例三(推薦使用)

我們可以擴展調(diào)用機制來創(chuàng)建 一個簡單的框架,使得我們在腳本中使用“步驟”更簡單并且更像是具有多個值的標(biāo)準(zhǔn) DSL 調(diào)用

這是通過將參數(shù)傳遞給 一個映射, 并在步驟中的其他處理環(huán)節(jié)引用映射來實現(xiàn)的。

vars/timedCommand3.groovy

//vars/timedCommand3.groovy

def call(body) {
    //收集賦值并傳送到我們的映射中
    def settings= [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = settings
    body()

    timestamps {
        cmdOutput = sh(script:"${settings.cmd}",returnStdout:true).trim()
    }
    echo cmdOutput
    writeFile file:"${settings.logFilePath}", text:"${cmdOutput}"
}

通過 def settings = [] 語法聲明了 一個Groovy 映射。然后將傳參保存在映射中,然后我們可以執(zhí)行任何步驟。這里用于 delegate 的引用與 Groovy能有關(guān)。

腳本式流水線:

@Library('share_library')_

node() {
    step([$class: 'WsCleanup'])     //清理工作空間
    timedCommand3 {
        cmd = 'ls -la'
        logfilePath = 'log.out'
    }
}

這種方式最有價值的地方在于,允許我們使用命名參數(shù)調(diào)用函數(shù),并且無關(guān)參數(shù)的順序,這可以使我們的流水線腳本中的代碼更簡單且更容易理解和維護。

resources

非Groovy 文件可以存儲在此目錄中。它們可以通過外部庫中的 libraryResource 步驟加載。
jenkins擴展你的流水線(共享庫)
語法:

def datafile = libraryResource 'org/conf/data/lib/datafile.ext'

jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)

六、使用第三方庫

jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)

七、直接加載代碼

groovy調(diào)用其它groovy腳本定義的方法

八、從外部 SCM 加載代碼

依賴遠(yuǎn)程 加載器插件 (Pipeline Remote Loader plugin )
jenkins擴展你的流水線(共享庫)
jenkins擴展你的流水線(共享庫)

九、回放外部代碼和庫

jenkins擴展你的流水線(共享庫)

可以直接修改代碼,并點擊運行,旨在驗證修改的代碼,并不會改變原來的代碼,主要用于臨時驗證代碼
jenkins擴展你的流水線(共享庫)

十、深入研究可信與不可信代碼

十一、參考文章

《Jenkins2權(quán)威指南》
Jenkins 設(shè)置共享庫
Jenkins共享庫使用文章來源地址http://www.zghlxwxcb.cn/news/detail-403415.html

到了這里,關(guān)于jenkins擴展你的流水線(共享庫)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Jenkins的流水線詳解

    Jenkins的流水線詳解

    來源:u.kubeinfo.cn/ozoxBB 什么是流水線 聲明式流水線 Jenkinsfile 的使用 jenkins 有 2 種流水線分為 聲明式流水線 與 腳本化流水線 ,腳本化流水線是 jenkins 舊版本使用的流水線腳本,新版本 Jenkins 推薦使用聲明式流水線。文檔只介紹聲明流水線。 聲明式流水線 在聲明式流水線語

    2024年02月11日
    瀏覽(54)
  • Jenkins 流水線多階段構(gòu)建

    Jenkins 流水線多階段構(gòu)建

    Jenkins流水線配置遇到 無法識別的。需要使用 自定義環(huán)境 項。 比如官網(wǎng)的在流水線中使用Docker Started by remote host 172.17.0.1 Obtained Jenkinsfile from git http://10.99.20.51:8082/root/java-devops-demo.git org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 28: Invalid agent type “

    2024年04月22日
    瀏覽(29)
  • Jenkins-流水線-保姆級教程

    目錄 一、Jenkins 是什么? 二、安裝方式 2.1 下載并運行 Jenkins ?三、什么是流水線 3.1概述 3.2聲明式流水線 3.3腳本化流水線 四、聲明式流水線 4.1?Sections代碼區(qū)域塊 4.1.1Agent指令 4.1.2agent 的配置示例 4.1.3Post代碼塊 4.1.4.sepes代碼塊 五、Jenkinsfile的使用 5.1環(huán)境變量 5.1.1靜態(tài)變量

    2024年02月01日
    瀏覽(25)
  • Jenkins部署Docker與Jenkins流水線

    Jenkins部署Docker與Jenkins流水線

    接上篇 1. 外掛文件的方式在docker容器中啟動 2. 將構(gòu)建運行放入docker容器中(不構(gòu)建鏡像) 修改Jenkins構(gòu)建前設(shè)置 修改部署后操作 重新構(gòu)建,已經(jīng)成功構(gòu)建在容器中 3. 將構(gòu)建運行放入docker鏡像中(采用dockerfile) 1.編寫dockerfile,放入項目中, 注意不能和依賴的包同級 寫好可

    2024年01月22日
    瀏覽(47)
  • 【Jenkins】Jenkins構(gòu)建后端流水線

    【Jenkins】Jenkins構(gòu)建后端流水線

    xxxx后端-后端cim服務(wù)測試環(huán)境-項目構(gòu)建 創(chuàng)建人:創(chuàng)建者姓名 時間:創(chuàng)建時間 保持構(gòu)建天數(shù):2 保持最大構(gòu)建個數(shù):3 ①clean:清楚之前;package:打包 -Dmaven.test.skip=true:跳過測試;-U:強制讓Maven檢查所有SNAPSHOT依賴更新 這里的pom.xml文件注意: Branches to build:分支某個環(huán)境的

    2024年02月12日
    瀏覽(18)
  • jenkins流水線實現(xiàn)xjar加固

    jenkins流水線實現(xiàn)xjar加固

    xjar的定義 功能特性 xjar使用 修改項目中的pom.xml,一般都是開發(fā)改 jenkins流水線配置 查看jenkins工作目錄 遠(yuǎn)端服務(wù)器配置–?需要授權(quán)的服務(wù)器 獲取授權(quán)服務(wù)器信息 執(zhí)行腳本 腳本內(nèi)容, 1.判斷鏡像是否存在 2.把xjar.go解壓,需要有g(shù)o環(huán)境 3.制作鏡像,然后把鏡像制作成tar包

    2024年02月07日
    瀏覽(26)
  • docker中的jenkins之流水線構(gòu)建

    docker中的jenkins之流水線構(gòu)建

    創(chuàng)建兩個參數(shù),一個是宿主端口號,一個是docker中的端口號 其中 Dsonar.host.url=http://docker.for.mac.host.internal:9000’ 主要是docker中的jenkins訪問docker中的sonarQube,詳情可以看我另外推文:https://blog.csdn.net/weixin_48319193/article/details/132124664?spm=1001.2014.3001.5501 填寫端口號 啟動 sonarQube成功

    2024年02月13日
    瀏覽(27)
  • jenkins通過流水線進行構(gòu)建jar包

    最近項目上需要進行CICD,本篇博客主要分享各種騷操作 1.下載Jenkins.war包上傳到服務(wù)器上面,然后在同級目錄下面創(chuàng)建如下腳本:

    2024年02月14日
    瀏覽(27)
  • 使用Gitlab管理Jenkins Pipeline流水線

    使用Gitlab管理Jenkins Pipeline流水線

    1、首先需要將已經(jīng)調(diào)試好的Jenkins pipeline文件上傳到git庫中,推薦以 Jenkinsfile 命名 放至git庫根目錄 上傳完成后 在git庫中可以查看到 如下圖所示: 2、配置Jenkins任務(wù) 完成后pipeline腳本會存放在git庫上面進行管理編輯了,當(dāng)我們構(gòu)建此任務(wù)時會從git庫中獲取pipeline流水線進行執(zhí)

    2024年02月12日
    瀏覽(25)
  • 【DevOps-09-1】Jenkins流水線任務(wù)初體驗

    Jenkins流水線任務(wù)介紹 Jenkins流水線任務(wù)初體驗 Jenkins流水線任務(wù)腳本語法初體驗 Jenkinsfile維護腳本 之前采用Jenkins的自由風(fēng)格構(gòu)建的項目,每個步驟流程都要通過不同的方式設(shè)置,并且構(gòu)建過程中整體流程是不可見的,無法確認(rèn)每個流程花費的時間,并且問題不方便定位問題。

    2024年01月21日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包