当前位置: 首页 > 知识库问答 >
问题:

测试前如何更新 Jenkins 实例?

嵇丰
2023-03-14

我正在使用Jenkins作业DSL创建我的作业,并使用Spockjenkins-test-harness测试我的脚本。

基于Gradle示例,我能够成功安装新的插件,但如何更新已经安装的插件?

我尝试使用UpdateCenter,但即使使用LinkedBlockingQueue,我也无法强制测试等待更新过程。

import groovy.io.FileType
import hudson.PluginWrapper
import hudson.model.UpdateCenter
import javaposse.jobdsl.dsl.DslScriptLoader
import javaposse.jobdsl.dsl.JobManagement
import javaposse.jobdsl.plugin.JenkinsJobManagement
import org.junit.ClassRule
import org.jvnet.hudson.test.JenkinsRule
import spock.lang.Shared
import spock.lang.Specification
import spock.lang.Unroll

import java.util.concurrent.Future
import java.util.concurrent.LinkedBlockingQueue

/**
 * Tests that all dsl scripts in the jobs directory will compile.
 */
class JobScriptsSpec extends Specification {
    @Shared
    @ClassRule
    JenkinsRule jenkinsRule = new JenkinsRule()

    def setupSpec() {
        printPlugins()
        jenkinsRule.getInstance().getUpdateCenter().updateAllSites()
        def plugin = jenkinsRule.getInstance().getUpdateCenter().getPlugin('subversion')
        println "Wait for subversion update..."
        def queue = new LinkedBlockingQueue<Future<UpdateCenter>>()
        queue.add(plugin.deploy())
        queue.take()
        println "Wait Done..."
    }

    @Unroll
    void 'test script #file.name'(File file) {
        given:

        JobManagement jm = new JenkinsJobManagement(System.out, [:], new File('.'))

        when:
        new DslScriptLoader(jm).runScript(file.text)

        then:
        noExceptionThrown()

        where:
        file << jobFiles
    }

    private void printPlugins() {
        println "****** Plugins *****"
        List<PluginWrapper> plugins = jenkinsRule.getPluginManager().getPlugins()
        plugins.each { PluginWrapper plugin ->
            println "Plugin: ${plugin.getLongName()}"
        }
    }

    static List<File> getJobFiles() {
        List<File> files = []
        new File('jobs').eachFileRecurse(FileType.FILES) {
            if (it.name.endsWith('.groovy')) {
                files << it
            }
        }
        files
    }
}
INFO: Obtained the latest update center data file for UpdateSource default
Wait for subversion update...
Jul 01, 2016 3:58:42 PM hudson.model.UpdateSite$Plugin deploy
INFO: Adding dependent install of workflow-scm-step for plugin subversion
Jul 01, 2016 3:58:42 PM hudson.model.UpdateSite$Plugin deploy
INFO: Adding dependent install of git-client for plugin workflow-scm-step
Jul 01, 2016 3:58:42 PM hudson.model.UpdateSite$Plugin deploy
INFO: Adding dependent install of workflow-step-api for plugin workflow-scm-step
Jul 01, 2016 3:58:42 PM hudson.model.UpdateSite$Plugin deploy
INFO: Adding dependent install of structs for plugin workflow-step-api
Jul 01, 2016 3:58:42 PM hudson.model.UpdateSite$Plugin deploy
INFO: Adding dependent install of mapdb-api for plugin subversion
Wait Done...
Jul 01, 2016 3:58:42 PM hudson.model.UpdateCenter$DownloadJob run
INFO: Starting the installation of Git client plugin on behalf of SYSTEM
Processing provided DSL script

共有1个答案

富钧
2023-03-14

您可以将任何要安装或更新的插件添加到 build.gradle 文件中的 testPlugins 配置中:

dependencies {
  // ...
  testPlugins 'org.jenkins-ci.plugins:subversion:2.6'
  // ...
}

有关详细信息,请参阅工作DSL wiki:https://github.com/jenkinsci/job-dsl-plugin/wiki/Testing-DSL-Scripts

 类似资料:
  • 我在服务器的/var/lib/hudson目录中安装了一个hudson。当我通过浏览器中的URL访问jenkins时,我会在页面底部看到版本1.411。 有人知道如何通过命令行(CLI)更新詹金斯吗?如果可能的话。 当我进入管理詹金斯页面时,它说:“詹金斯的新版本(1.521)可供下载(变更日志)。” 我觉得下载新的jar并在服务器中提取不安全。

  • 问题内容: 我是Jenkins Plugin开发的新手,所以请问这个问题很愚蠢。我目前正在开发Jenkins插件,该插件提供了非常小的配置选项列表,如所附的屏幕快照所示。 该表单是使用Jelly脚本设计的。我必须从Java代码更新作业的config.xml文件中由表单提交的这些参数。谁能在我的Java代码中建议更新作业的当前config.xml的方法吗? 谢谢 问题答案: 经过一些研究,我已经知道

  • 我必须使用jenkins的api创建/更新一个jenkins作业,因为我的所有作业都使用了其他脚本也使用的参数,并且我试图将脚本集中起来,这样当我在一个地方更改它时,所做的更改就会反映在所有的脚本中。 当前,如果有人更改了脚本,他们也必须手动编辑jenkins作业的参数。 我看到了用于创建作业的远程API的示例,并且能够成功地创建测试作业,但是除了删除并重新创建一个现有作业之外,我如何编辑它(这不

  • 我有Jira,包括他们的插件Zephyr和ZAPI。我正在运行Jenkins的代码,如视频所示。我的代码是Java TestNG,我还没有为Jenkins添加Junit插件。我的测试运行正常,但控制台输出显示: 构建结果为SUCCESS null解析JUnit测试结果的问题。解析可靠报告时出错。请确保“添加发布JUnit测试结果报告”作为构建后操作构建步骤“将测试结果发布到Zephar for J

  • 问题内容: 什么是对React组件prop更新进行单元测试的正确方法。 这是我的测试装置; 这可以正常工作,并且测试通过了,但是显示了反应警告消息 我要测试的只是属性的更新,而不是使用其他属性创建元素的新实例。有没有更好的方法来执行此属性更新? 问题答案: AirBnB的酶库为这个问题提供了一个优雅的解决方案。 它提供了一个setProps方法,可以在浅包装或jsdom包装上调用该方法。

  • 问题内容: 我正在尝试从Jenkins运行TestNG测试(在一个包含的Java项目中),但是没有运气。 似乎Jenkins的TestNG插件(https://wiki.jenkins-ci.org/display/JENKINS/testng- plugin )仅发布TestNG测试的结果,但实际上不运行测试类…或我错了吗? 无论如何,我如何在Jenkins的TestNG项目中实际运行TestN