jenkinsfile 使用特征和其他常规语法

标签 jenkins groovy jenkins-pipeline

我想通过 jenkinsfiles 使用稍微复杂一点的管道构建,并且有一些可重用的步骤,因为我有很多或类似的项目。我将 jenkins 2.0 与管道插件一起使用。我知道你可以加载包含一些通用代码片段的 groovy 脚本,但我想知道这些脚本是否可以使用 groovy 的一些面向对象的特性,如特征。例如,假设我有一个名为 Step 的特征:

package com.foo.something.ci 
trait Step {                                         
    void execute(){ echo 'Null execution'}                                 
}

然后在另一个文件中实现特征的类:
class Lint implements Step {
    def execute() {
        stage('lint')
        node {
            echo 'Do Stuff'
        }
    }
}

然后是另一个包含“main”函数的类:
class foo {
   def f = new Lint()
   f.execute()
}

我将如何在 Jenkinsfile 中加载和使用所有这些类,特别是因为我可能有多个类,每个类都定义了一个步骤?这甚至可能吗?

最佳答案

看看Shared Libaries .这些支持在 Jenkins 中使用原生 groovy 代码。

您的 Jenkinsfile 将包含您的共享库,并使用您定义的类。请注意,如果您想使用 stage,您必须传递 Jenkins 的 steps 变量。或 Jenkins Pipeline 插件中定义的其他变量。

Excerpt从文档:
这是类(class),它将定义您的阶段

package org.foo
class Utilities implements Serializable {
  def steps
  Utilities(steps) {this.steps = steps}
  def mvn(args) {
    steps.sh "${steps.tool 'Maven'}/bin/mvn -o ${args}"
  }
}

你会像这样使用它:
@Library('utils') import org.foo.Utilities
def utils = new Utilities(steps)
node {
  utils.mvn 'clean package'
}

关于jenkinsfile 使用特征和其他常规语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37908507/

相关文章:

java - eclipse 错误?私有(private)字段的 Java/Groovy 可见性

xml - grails test-app -xml -coverage 尝试解析 XML URI 并超时

jenkins - 如何在 Jenkins 管道语法中对文件的最后修改时间使用 `when` 条件

jenkins - 如何从 Jenkins 管道脚本中的标签获取节点名称

jenkins - 错误 Slack 从全局配置发送管道步骤配置值

python - 如何在 Jenkins UI 中执行本地 python 脚本

groovy - Gradle 任务定义继承

jenkins - Jenkins Pipeline 中的文件操作

git - Jenkins Git 插件存储库 Url 变量

jenkins - 如何使用动态数据在 Jenkins 管道中构建并行和顺序阶段的组合