在jenkins管道脚本中获取gradle变量

时间:2016-08-25 08:52:45

标签: jenkins gradle groovy jenkins-pipeline

我正在尝试使用groovy构建脚本将构建管道迁移到“Pipeline插件”。

我的管道通常是:

  1. 测试(gradle)
  2. IntegrationTest(gradle)
  3. 构建(gradle)
  4. 发布(artifactory)
  5. 我想在我的jenkins构建脚本中使用gradle变量(如版本/组等)来发布到artifactory中的正确文件夹。这件神器插件会在过去为我照顾。如何实现这一目标?

    对于单个gradle项目,我使用这样的东西:

    node('master')
    {
        def version = 1.0
        def gitUrl = 'some.git'
        def projectRoot = ""
        def group = "dashboard/frontend/"
        def artifactName = "dashboard_ui"
        def artifactRepo = "ext-release-local"
    
        stage "git"
    
        git branch: 'develop', poll: true, url: "${gitUrl}"
    
        dir(projectRoot)
        {
    
            sh 'chmod +x gradlew'
            stage "test"
            sh './gradlew clean test'
    
            stage "build"
            sh './gradlew build createPom'
    
            stage "artifact"
            def server = Artifactory.server('artifactory_dev01')
            def uploadSpec = """{
              "files": [
                {
                  "pattern": "build/**.jar",
                  "target": "${artifactRepo}/$group/${artifactName}/${version}/${artifactName}-${version}.jar"
                },
                {
                  "pattern": "pom.xml",
                  "target": "${artifactRepo}/$group/${artifactName}/${version}/${artifactName}.pom"
                }
             ]
            }"""
            def buildInfo1 = server.upload spec: uploadSpec
            server.publishBuildInfo buildInfo1
        }
    }
    

2 个答案:

答案 0 :(得分:2)

我认为你实际上有两种不同的方法可以解决这个问题:

1。从sh脚本

获取版本/组

找到一种从Gradle构建工具获取Gradle版本的方法(例如gradle getVersion(),但我不熟悉Gradle),然后使用shell脚本获取此版本。如果Gradle命令获取版本为gradle getVersion(),那么您将在管道中执行:

def projectVersion = sh script: "gradle getVersion()", returnStdout: true
def projectGroup= sh script: "gradle getGroup()", returnStdout: true

然后只需在当前管道中注入$projectVersion$projectGroup个变量。

2。配置Gradle构建脚本以发布到Artifactory

这是相反的方法,我个人更喜欢:不是向Artifactory提供所有Gradle项目信息,而是向Gradle提供您的Artifactory设置并使用Gradle目标轻松发布到Artifactory。

JFrog在Working with Gradle部分提供了有关此解决方案的详细文档。基本上,您将按照以下步骤操作:

  1. 使用Gradle Build Script Generator从Artifactory生成符合要求的Gradle构建脚本,并将其包含在项目构建脚本中
  2. 使用Gradle目标gradle artifactoryPublish将您当前的工件发布到Artifactory

答案 1 :(得分:2)

这里有一个更现代的声明性管道示例:

pipeline {
    agent any
    stages {
        stage('somestage') {
            steps {
                script {
                    def version = sh (
                        script: "./gradlew properties -q | grep \"version:\" | awk '{print \$2}'",
                        returnStdout: true
                    ).trim()
                    sh "echo Building project in version: $version"

                }
            }
        }
    }
}

另见: