当前位置: 首页 > 面试题库 >

如何重构常见的Jenkins JobDSL代码?

赵智
2023-03-14
问题内容

我有以下JobDSL规格:

job {
  steps {
    gradle('generateLock saveLock', '-PdependencyLock.includeTransitives=true', true) { node ->
      node / wrapperScript('${NEBULA_HOME}/gradlew')
    }
    gradle('check', '', true) { node ->
      node / wrapperScript('${NEBULA_HOME}/gradlew')
    }
  }
}

我想将常见代码重构为一个函数:

def gradlew(String tasks, String options) {
  gradle(tasks, options, true) { node ->
    node / wrapperScript('${NEBULA_HOME}/gradlew')
  }
}

但是从gradle函数内部看不到该gradlew函数。什么是正确的方法?


问题答案:

大括号形成Groovy闭合。每个闭包都有一个委托对象,方法调用定向到该委托对象。可以通过委托属性访问委托。您可以将该委托传递给helper函数以访问其方法。

def gradlew(def context, String tasks, String options = '') {
  context.gradle(tasks, options, true) { node ->
    node / wrapperScript('${NEBULA_HOME}/gradlew')
  }
}
job {
  steps {
    gradlew(delegate, 'generateLock saveLock', '-PdependencyLock.includeTransitives=true')
    gradlew(delegate, 'check')
  }
}


 类似资料:
  • 本机模块如何回调JavaScript内部桥接方法,然后在内部方法中进行处理,例如将数据解析为JSON,然后引发react本机应用程序接收的事件? 对于跨平台桥接模块,我想避免在ObjectiveC和Java中重复代码。如果可能,我想用JavaScript编写跨平台桥接模块代码,并在Android和iOS中重用。 我当前的解决方案: 这工作。 这将导致两次调用sendEventWithName: 使

  • 我有以下代码,我需要重构它,以降低复杂性,增加模块化和封装性。我还需要减少ck度量值。 你如何重构这个代码?切换案例是否降低了复杂性?

  • 本文向大家介绍oracle代码的常见错误汇总,包括了oracle代码的常见错误汇总的使用技巧和注意事项,需要的朋友参考一下 很多使用其他数据库的朋友在转到Oracle数据库的时候经常会犯一些习惯性的错误,本文汇总了一些常见的Oracle代码错误,供大家查询比对。 1. 插入语句写成: 应为: 2. 应改为: 3. 永远不会触发no_data_found错误,应该判断v_count=0 4.返回值问

  • 8.2.3 常见 GUI 构件的用法 本节介绍一些最常见的 GUI 构件的用法。为了便于讨论,我们使用 Python 的命令行界 面①来交互式地执行语句,这样可以执行一条语句就立即看到其执行效果。读者也可以一边 阅读本书,一边在计算机上动手练习。 GUI 编程首先要做的是导入 Tkinter 模块并创建根窗口: from Tkinter import * root = Tk() 可以看到,屏幕

  • 问题内容: 这个问题已经在这里有了答案 : 在列表中找到出现次数最多的项目 (13个答案) 4个月前关闭。 给出以下列表 我正在尝试计算每个单词出现多少次并显示前3位。 但是,我只想查找首字母大写的前三位,而忽略不首字母大写的所有单词。 我敢肯定有比这更好的方法,但是我的想法是做以下事情: 将列表中的第一个单词放入另一个称为uniquewords的列表中 从原始列表中删除第一个单词及其所有重复单词

  • 问题内容: 我试图重构代码,并且遇到了这段代码。您能提出建议中的任何重构方法,请说出您使用的折射方法。 问题答案: 您实际上违反了SRP(单一职责原则),因此,每当添加新语言时,都需要触摸此代码库。 为了避免列出大量,您需要一个松散耦合的设计,其中()行为应在单独的类(如英语等)中实现,如下面的代码所示,该代码使用状态模式: 步骤(1):定义界面 步骤(2):定义实现 步骤(3):修改带对象的方法