当前位置: 首页 > 知识库问答 >
问题:

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

盖博简
2023-03-14

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

我的管道通常是:

  1. 测试(梯度)

我想在我的jenkins构建脚本中使用像version/group等的gradle变量来发布到artiFactory中的正确文件夹中。这是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
    }
}

共有3个答案

司徒瀚
2023-03-14

如果你有管道实用程序步骤插件,并将你需要的东西存储在你的gradle中,那么对于其他在这里搜索的人来说。属性,您可以在环境块中执行以下操作:

MY_PROPS = readProperties file:"${WORKSPACE}/gradle.properties"
MY_VERSION = MY_PROPS['version']

丁成弘
2023-03-14

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

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

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

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

这是相反的方法,这是我个人更喜欢的:而不是给阿图工厂所有的Gradle项目信息,只需给Gradle你的阿图工厂设置,并使用Gradle目标轻松发布到阿图工厂。

JFrog在使用Gradle部分中有关于此解决方案的良好文档。基本上,您将遵循以下步骤:

  1. 使用Gradle build script Generator从Artifactory生成兼容的Gradle build脚本,并将其包含到项目构建脚本
云飞翮
2023-03-14

以下是一个更现代的声明性管道示例,以供将来参考:

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"

                }
            }
        }
    }
}

另请参见:

  • Gradle插件项目版本号
  • 如何从Jenkinsfile(groovy)将使用执行的shell命令的输出转换为变量
 类似资料:
  • 问题内容: 我正在尝试使用groovy构建脚本将构建管道迁移到“ Pipeline插件”。 我的管道通常是: 测试(等级) IntegrationTest(等级) 构建(渐变) 发布(人工工厂) 我想在我的jenkins构建脚本中使用gradle变量,例如version / group等,以发布到工件中的正确文件夹。过去,人工插件会为我解决。如何做到这一点? 对于单个gradle项目,我使用如下代

  • 我正在使用位于git存储库中的Jenkins文件。我已经使用来自scm的管道脚本配置了新作业,该脚本指向我的JenkinsFile。我试图在我的Jenkins file pipeline脚本中使用git模块,以便从我的git repo中提取我的数据,而不需要配置prestatic变量,并且仅仅使用在我的作业中已经配置的scm pipeline脚本下的存储库URL变量。在我的Jenkins管道脚本中

  • 问题内容: 在Jenkins中,我希望获得用户输入并将其传递给Shell脚本以供进一步使用。 我尝试将其设置为环境变量,但是shell脚本无法获取最新值,而旧值是echo。 问题答案: 您需要在阶段之间传递变量作为环境变量,例如:

  • 我正在构建一个jenkins管道,作业可以由远程触发。我需要知道哪个IP触发了作业。所以我有一个小Groovy脚本,它返回远程IP。使用EnvInject-plugin,我可以轻松地在正常的自由式作业中使用这个变量,但是我如何在管道中使用它?我不能将EnvInject-plugin与管道插件一起使用:( 这是获取IP的小脚本:

  • 我试图使用jobDSL插件中的pipelineJob函数生成Jenkins管道,但是无法将参数从DSL传递到管道脚本。我有几个项目使用本质上相同的Jenkinsfile,只是在几个步骤上有所不同。我正在尝试使用JobDSL插件动态生成这些管道,并解释其中我想要更改的值,以匹配DSL的参数。 我已经在管道脚本和DSL中尝试了几乎所有可能的字符串解释组合,但无法获得Jenkins /groovy来解释

  • 问题内容: 我正在研究如何在项目的scm中使用新的Jenkins Pipeline插件(我们使用GIT)。 作业脚本是从SCM加载的(“来自SCM的管道脚本”选项),并且在脚本中执行。 问题是提交是重复的。在build目录中,有2个具有相同的提交,因此change视图可能非常混乱: 在多分支管道中也会发生此问题。 这里是内容: 难道我做错了什么 ? Jenkins版本:1.642.2(docker