创建可重复使用的jenkins管道脚本

Tim*_*Tim 27 jenkins jenkins-workflow jenkins-pipeline

我正在考虑使用最近詹金斯管道脚本,一个问题是,我没有想出一个聪明的方法来创建可重用的内部代码utils的,想象一下,我有一个共同的功能helloworld将通过大量的管道作业的使用,所以我希望创建一个utils.jar可以将其注入作业类路径.

我注意到Jenkins与全局库有类似的概念,但我对这个插件的关注:

既然是一个插件,所以我们需要安装/通过詹金斯插件管理器升级,那么它可能需要重新启动以应用更改,这不是我希望看到的,因为utils的可能更改,添加往常一样,我们希望它可能是立即可用.

其次,它是官方jenkins共享lib,我不想(或者他们不会申请我们)将私人代码放入jenkins repo.

有什么好主意吗?

Ste*_*ing 30

共享库(文档),可以使你的代码可以访问到所有管道的脚本.您不必为此构建插件,也不必重新启动Jenkins.

例如,这是我的库,这是一个调用这个常用函数的Jenkins文件.


编辑(2月2017): 库可以通过詹金斯的内部的Git服务器进行访问,或通过其他方式部署(例如,通过厨师)在workflow-lib/该目录内詹金斯用户的主目录.(仍然可能,但非常不方便).

可以通过以下方式配置全局库:

  • 指向共享库存储库的URL 的@Library('github.com/...')注释Jenkinsfile.
  • 在Jenkins作业的文件夹级别配置.
  • 在Jenkins配置中配置为全局库,其优点是代码是可信的,即不受脚本安全性的影响.

第一个和最后一个方法的组合将是一个没有明确加载的共享库,那么只有在使用其名称要求Jenkinsfile:@Library('mysharedlib').


Pom*_*m12 10

根据您计划重用代码的频率,您还可以加载一个函数(或一组函数)作为另一个管道的一部分.

{
  // ...your pipeline code...

  git 'http://urlToYourGit/projectContainingYourScript'
  pipeline = load 'global-functions.groovy'
  pipeline.helloworld()    // Call one of your defined function

  // ...some other pipeline code...
}
Run Code Online (Sandbox Code Playgroud)

与StephenKing相比,这个解决方案可能看起来有点麻烦,但我喜欢这个解决方案的是我的全局函数都被提交给Git,任何人都可以轻松地修改它们,而不需要(几乎)任何Jenkins的知识,只是Groovy的基础知识.

在Groovy脚本中load,请确保return this在最后添加.这将允许您稍后拨打电话.否则,在设置时pipeline = load global-functions.groovy,变量将设置为null.