云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

服务器_如何部署服务器_稳定性好

小七 141 0

Jenkins World演讲者亮点:用共享库、全局函数和外部代码扩展管道

Jenkins Pipeline从根本上改变了用户如何编排他们的管道和工作流。基本上,现在可以在脚本或程序中执行的任何操作都可以在jenkins文件或应用程序中创建的管道脚本中完成。但是,仅仅因为你可以直接在这些机制中做任何事情,并不意味着你就必须这么做。在某些情况下,最好将功能从主管道中分离出来。以前,在Jenkins中实现这一点的主要方法是创建插件。有了Jenkins 2和Pipeline的紧密结合,我们现在有了另一种方法——共享库。共享库为许多情况提供了解决方案,这些情况可能很有挑战性,也可能很耗时。其中:提供可跨多个管道或在指定范围内访问的通用例程(稍后将详细介绍作用域)抽象出复杂或受限的代码提供从声明性管道中的调用执行脚本化代码的方法(通常不允许使用脚本化代码)将脚本中的调用简化为只通过调用参数而不同的自定义代码为了理解如何在管道中使用共享库,我们首先需要了解它们是如何构造的。Jenkins共享库由一个源代码库组成,其结构如下:每个顶级目录都有自己的用途。resources目录可以包含通过libraryResource步骤加载的非groovy资源。可以将其视为存储json文件等支持数据文件的地方。src目录使用类似于标准javasrc布局的结构。当执行包含此共享库的管道时,此区域将添加到类路径中。vars目录包含可以从管道脚本访问的全局变量。可以包含相应的.txt文件,该文件定义此处对象的文档。如果找到,这将作为Jenkins应用程序中文档的一部分。尽管您可能认为最好在src结构中定义库函数,但实际上在许多情况下,在vars区域中定义它们会更好。全局变量的概念可能与全局函数不太对应,但可以将其视为全局值,可以将其拉入并在管道中使用。实际上,要在声明式风格的管道中工作,将函数放在vars区域是唯一的选择。让我们看一个简单的函数,我们可以为共享库创建这个函数。在本例中,我们将从Jenkins获取Gradle安装的位置,并使用作为参数传入的任何任务调用相应的可执行文件。代码如下:/变量/gbuild.groovy定义调用(args){sh"${tool'gradle3'}/bin/gradle${args}"}请注意,我们这里使用的是def call语法的结构化表单。这允许我们根据vars区域中的文件名简单地调用管道中的例程(假设我们已经加载了共享库)。例如,因为我们命名了这个文件gbuild.groovy,然后我们可以通过如下步骤在管道中调用它:gbuild"clean compileJava"那么,如何加载共享库以在我们的管道中使用呢?共享库本身就是上述结构中的代码,提交/推送到Jenkins可以访问的源代码库中。在我们的示例中,我们假设已经将这些代码分段、提交并推送到系统上的本地Git存储库中,位置为/opt/Git/shared-图书馆.git.像Jenkins中的大多数其他东西一样,我们需要首先告诉Jenkins在哪里可以找到这个共享库,以及如何"全局"引用它,以便管道可以具体地引用它。但是,首先,我们需要决定您希望这个共享库在什么范围内可用。最常见的情况是使其成为"全局共享库",以便所有管道都可以访问它。但是,我们还可以选择只为特定Jenkins文件夹结构中的项目、多分支管道中的项目或GitHub组织管道项目中的项目提供共享库。为了简单起见,我们将定义我们的所有管道都可以在全球范围内使用。这需要两个步骤。我们首先告诉Jenkins我们想把这个库称为什么,并为Jenkins定义一些与库相关的默认行为,比如我们是否希望为所有管道隐式加载它。这在"配置系统"页面的"全局管道库"部分中完成。对于第二部分,我们需要告诉Jenkins共享库的实际源存储库在哪里。经过修改以了解如何使用共享库的SCM插件称为"现代SCM"。其中一个更新插件中的git插件,所以我们只在同一个配置系统页面中提供信息。在配置Jenkins以便它能够找到共享库存储库之后,我们可以使用@library('

)注释将共享库加载到我们的管道中。因为注释是用来注释后面的内容的,所以我们需要包含一个特定的import语句,或者,如果我们想包含所有内容,我们可以使用下划线字符作为占位符。因此,我们在管道中加载库的基本步骤是:@库('utilities 2')_基于这一步,当Jenkins运行我们的管道时,它将首先到达保存共享库的存储库,并克隆出一个副本以供使用。管道执行的这一部分期间的日志输出如下所示:正在加载库公用设施2@master>git rev parse--在工作树中#timeout=10将origin设置为/opt/git/shared libraries>git配置远程.origin.url/opt/git/shared libraries\timeout=10正在获取原点。。。从源获取上游更改>git—版本超时=10使用GIT_SSH设置凭据jenkins2ssh>git fetch--tags--progress origin+refs/heads/*:refs/remotes/origin/*>git rev parse master^{commit}\timeout=10>git rev parse origin/master^{commit}\timeout=10克隆远程Git存储库克隆存储库/opt/git/共享库然后管道可以调用我们的共享库gbuild函数并将其转换为所需的Gradle构建命令。第一次建造。正在跳过更改日志。[管道]}[管道]//阶段[管道]阶段[管道]{(编译)[管道]工具[管道]sh[gsummit17\U lab2-4T357 CUTJORMC2TIF7WW5LMRR37F7PM2QRUHXUNNSRTWTRHB3XGA]运行shell脚本+/usr/share/gradle/bin/gradle clean compileJava-x测试启动Gradle守护进程(后续构建将更快)这是使用共享库如何工作的一个非常基本的说明。关于共享库和扩展管道的细节和功能要比我们在这里介绍的要多得多。请务必收听我在2017年Jenkins World大会上发表的关于通过共享库、全局函数和外部代码扩展管道的演讲。另外,请留意我的新书《詹金斯2的启动与运行》,这本书将有一个专门的章节,预计今年晚些时候O'Reilly将推出。布伦特·拉斯特研发部高级经理SAS公司在上查看原始帖子詹金斯.io.了解更多Jenkins是一个强大的、开源的自动化工具,它有一个令人印象深刻的插件架构,可以帮助开发团队自动化他们的软件生命周期。詹金斯被用来为许多行业领先公司的软件开发管道提供动力。詹金斯管道提供:管理复杂、多步骤管道的一流功能一组开源插件和集成Jenkins的scriptable插件带来了DSL语言的强大功能最棒的是,像Jenkins core一样,Pipeline可以由第三方开发人员进行扩展,支持对Pipeline DSL的自定义扩展和各种插件集成选项。在这里下载白皮书。