Можно ли протестировать сценарий Job DSL

В идеале я хотел бы иметь возможность вызывать скрипт с помощью какого-то модульного теста, прежде чем он будет выполнен на Jenkins.

Есть ли способ протестировать сценарий Job DSL, кроме запуска jenkins?


person harmingcola    schedule 02.12.2015    source источник


Ответы (3)


Помимо примеров в job-dsl-gradle-example, вы также можете сделайте шаг вперед и напишите тесты для отдельных файлов или заданий. Например, предположим, что у вас есть файл конфигурации задания, расположенный в файле jobs/deployJob.groovy.

import javaposse.jobdsl.dsl.DslScriptLoader
import javaposse.jobdsl.dsl.MemoryJobManagement
import javaposse.jobdsl.dsl.ScriptRequest
import spock.lang.Specification

class TestDeployJobs extends Specification {

    def 'test basic job configuration'() {
        given:
        URL scriptURL = new File('jobs').toURI().toURL()
        ScriptRequest scriptRequest = new ScriptRequest('deployJob.groovy', null, scriptURL)
        MemoryJobManagement jobManagement = new MemoryJobManagement()

        when:
        DslScriptLoader.runDslEngine(scriptRequest, jobManagement)

        then:
        jobManagement.savedConfigs.each { String name, String xml ->
            with(new XmlParser().parse(new StringReader(xml))) {
                // Make sure jobs only run manually
                triggers.'hudson.triggers.TimerTrigger'.spec.text().isEmpty()
                // only deploy every environment once at a time
                concurrentBuild.text().equals('false')
                // do a workspace cleanup
                buildWrappers.'hudson.plugins.ws__cleanup.PreBuildCleanup'
                // make sure masked passwords are active
                !buildWrappers.'com.michelin.cio.hudson.plugins.maskpasswords.MaskPasswordsBuildWrapper'.isEmpty()
            }
        }
    }
}

Таким образом, вы можете пройтись по каждому узлу XML, чтобы убедиться, что установлены все правильные значения.

person crasp    schedule 14.12.2015

Взгляните на job-dsl-gradle-example. Репозиторий содержит тест для скриптов DSL.

person daspilker    schedule 02.12.2015

Делая это так же, как crasp, но используя тестовую обвязку Jenkins, как описано в страница Jenkins Unit Test, которая работает медленнее, но будет работать с автоматически сгенерированным DSL, выдающим синтаксические ошибки, как объяснено здесь .

После установки кода, как описано здесь, вы можете просто сделайте такой тест:

@Unroll
void 'check descriptions #file.name'(File file) {
    given:
    JobManagement jobManagement = new JenkinsJobManagement(System.out, [:], new File('.'))
    Jenkins jenkins = jenkinsRule.jenkins

    when:
    GeneratedItems items = new DslScriptLoader(jobManagement).runScript(file.text)

    then:
    if (!items.jobs.isEmpty()) {
        items.jobs.each { GeneratedJob generatedJob ->
            String text = getItemXml(generatedJob, jenkins)
            with(new XmlParser().parse(new StringReader(text))) {
                // Has some description
                !description.text().isEmpty()
            }
        }
    }

    where:
    file << TestUtil.getJobFiles()
}
person froblesmartin    schedule 30.12.2019