从Pipeline Plugin

时间:2018-02-12 18:18:03

标签: git jenkins gradle jenkins-pipeline

我需要设置一个Jenkins作业,从表面上看,它可以简单地构建一些Java源代码。

然而,通常情况下,源依赖于来自第三方的一组JAR文件,并且这些JAR的不同版本可以作为持续集成过程使用 - 因此Jenkins。

我的源代码有一个build.gradle文件,其内容的格式部分由第三方决定,并将其更改为我自己的风格会有问题。这是一个匿名样本:

/* Module Build File */
apply from: "${System.getenv("third_party_home")}/etc/gradle/thirdParty.gradle"

ext {
name            = "myModule"
project.group   = "ProjectD"
project.version = "1.2.1"
}

dependencies {
compile "ThirdParty:jarNameA:4.2"
compile "ThirdParty:jarNameB:4.2"
compile "ThirdParty:jarNameC:4.0"
}

问题是,虽然源代码在逻辑上属于它自己的git repo,但是作为编译的一部分包含的第三方代码也是如此 - 并且由'third_party_home'环境变量控制。所以这里需要两个git repos,但是一个简单的Jenkins工作不支持这样的多个互连回购。

显然,最好的解决方案是使用Jenkins Pipeline插件,但我知道它很复杂。

有人能为我提供一些简单的指示,解释我如何配置插件来实现这种gradle构建吗?

非常感谢

1 个答案:

答案 0 :(得分:1)

如果您可以在Gradle内部实现您的整个目标,那么您真的会简化一些事情。我不太了解Gradle,不知道它会如何起作用。

或者,使用工件存储库服务器将第三方代码部署到。然后Jenkins和Gradle都不需要单独的repos来检查和编译。

由于您要求提供Jenkins解决方案,这是我的建议:

管道中的多个存储库实际上是微不足道的。在dir()闭包中,您可以查看另一个存储库。

pipeline {
    environment {
        third_party_home = "${WORKSPACE}/third_party_home"
    }
    stages {
        stage('Checkout') {
            steps {
                dir('third_party_home') {
                    git credentialsId: 'git-jenkins', url: 'git@git-server:third-party-repo'
                }
            }
        }
        stage('Build') {
            // run gradle here
        }
        // more stages
    }
}

你可以使用带有多个结账的单个dir()或多个dir(),每个结账都有一个结账。