【问题标题】:Where to start to create Jenkins gradle build with Pipeline Plugin从哪里开始使用 Pipeline Plugin 创建 Jenkins gradle build
【发布时间】:2018-02-12 18:18:03
【问题描述】:

我需要设置一个 Jenkins 作业,从表面上看,它对一些 Java 源代码进行简单的 gradle 构建。

但是,通常情况下,源依赖于来自第三方的一组 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 存储库,但作为编译的一部分包含的第三方代码也是如此——并由“third_party_home”环境变量控制。所以这里需要两个 git repos,但是一个简单的 Jenkins 作业不支持这样的多个相互关联的 repos。

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

谁能给我一些简单的指导,解释我如何配置插件来实现这种 gradle 构建?

非常感谢

【问题讨论】:

    标签: git jenkins gradle jenkins-pipeline


    【解决方案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() 每个结帐。

    【讨论】: