将二进制文件添加到Job /例如keystore.jks

时间:2017-11-23 17:11:07

标签: jenkins jenkins-pipeline

我的一些测试是针对二进制文件运行的。例如。 keystore.jks。 这是一个测试密钥库,但我不想在GH-Repo中使用这个文件。将这些文件添加到Jenkins-Job的最佳方法是什么?

我认为必须有一个插件来解决这个问题,但我找不到。

更新
"复制到奴隶" -plugin适用于"正常"如果我将Job定义为管道,如何将文件从userContent复制到slave?

1 个答案:

答案 0 :(得分:0)

我找不到Jenkins的解决方案 - 所以我把它交给了Gradle

apply plugin: 'de.undercouch.download'

// Username + Token gibt es unter
//      http://localhost:10080/me/configure
//
// Diese Vars sind definiert:
//     JENKINS_HOST
//     JENKINS_PORT
//     JENKINS_USER
//     JENKINS_TOKEN
//
// Weitere Infos: https://www.michel-kraemer.com/recipes-for-gradle-download/
task downloadCertIfItDoesNotExist(
        type: Download ) {

    def resourceFolder = new File("${project.projectDir}/src/test/resources")
    def etcFolder = new File( "${resourceFolder}/etc" )
    def zip = new File("${resourceFolder}/etc.zip")

    def jenkinsHost = System.getenv('JENKINS_HOST')
    def jenkinsPort = System.getenv('JENKINS_PORT')
    def ciHost = System.getenv('CI_HOSTNAME')

    // Sample:
    //  http://mobiad.int.mikemitterer.at:10080/userContent/certs/kdeneon.int.mikemitterer.at/etc/*zip*/etc.zip
    def url = "http://${jenkinsHost}:${jenkinsPort}/userContent/certs/${ciHost}/etc/*zip*/etc.zip"

    // https://docs.gradle.org/current/userguide/more_about_tasks.html
     onlyIf {
        !etcFolder.exists() || project.hasProperty('forceETCUpdate')
    }

    src url
    dest zip

    username System.getenv('JENKINS_USER')
    password System.getenv('JENKINS_TOKEN')

    quiet false
}

task unzipETCZip(
        type: Copy,
        dependsOn: downloadCertIfItDoesNotExist) {

    def resourceFolder = new File("${project.projectDir}/src/test/resources")
    def etcFolder = new File( "${resourceFolder}/etc" )
    def zip = new File("${resourceFolder}/etc.zip")

    onlyIf {
        zip.exists()
    }

    from zipTree(downloadCertIfItDoesNotExist.dest)
    into resourceFolder
}

task prepareCertsFolder (
        group: "Jenkins",
        type : Delete,
        dependsOn: [ unzipETCZip ] ) {

    def resourceFolder = new File("${project.projectDir}/src/test/resources")
    def zip = new File("${resourceFolder}/etc.zip" )

    onlyIf {
        zip.exists()
    }
    delete zip
}

这个解决方案对我来说非常好。

这是我的Jenkins文件:

    ...
    stage('Test') {
        steps {
            sh './gradlew test -PforceETCUpdate'
        }
    }
    ...

在我的build.gradle中,我将测试连接到prepareCertsFolder

test.dependsOn "prepareCertsFolder" 

希望这有助于某人...