在 jenkins 管道脚本中获取 gradle 个变量
Get gradle variables in jenkins pipeline script
我正在尝试使用 groovy 构建脚本将我的构建管道迁移到 "Pipeline plugin"。
我的管道通常是:
- 测试 (gradle)
- 综合测试(gradle)
- 建立(gradle)
- 发布(人工)
我想在我的 jenkins 构建脚本中使用 gradle 变量,如 version/group 等,以发布到 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
}
}
我认为您实际上有两种不同的方法来解决这个问题:
1。从 sh 脚本
获取 version/group
找到一种方法从 gradle 构建工具(例如 gradle getVersion()
,但我不熟悉 Gradle)获取 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
这是相反的方法,我个人更喜欢这种方法:与其将所有 Gradle 项目信息提供给 Artifactory,不如提供 Gradle 您的 Artifactory 设置并使用 Gradle 目标轻松实现发布到 Artifactory。
JFrog 在其 Working with Gradle 部分中提供了有关此解决方案的良好文档。基本上,您将遵循以下步骤:
- 使用
Gradle Build Script Generator
从 Artifactory 生成兼容的 Gradle 构建脚本,并将其包含到您的项目构建脚本中
- 使用 Gradle 目标
gradle artifactoryPublish
只需将您当前的工件发布到 Artifactory
这里有一个更现代的声明性管道的例子供以后参考:
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 plugin project version number
对于其他 Google 来这里的人来说,如果您有 Pipeline Utility Steps plugin 并将您需要的内容存储在 gradle.properties
文件中,您可以在环境块:
MY_PROPS = readProperties file:"${WORKSPACE}/gradle.properties"
MY_VERSION = MY_PROPS['version']
我正在尝试使用 groovy 构建脚本将我的构建管道迁移到 "Pipeline plugin"。
我的管道通常是:
- 测试 (gradle)
- 综合测试(gradle)
- 建立(gradle)
- 发布(人工)
我想在我的 jenkins 构建脚本中使用 gradle 变量,如 version/group 等,以发布到 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
}
}
我认为您实际上有两种不同的方法来解决这个问题:
1。从 sh 脚本
获取 version/group找到一种方法从 gradle 构建工具(例如 gradle getVersion()
,但我不熟悉 Gradle)获取 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
这是相反的方法,我个人更喜欢这种方法:与其将所有 Gradle 项目信息提供给 Artifactory,不如提供 Gradle 您的 Artifactory 设置并使用 Gradle 目标轻松实现发布到 Artifactory。
JFrog 在其 Working with Gradle 部分中提供了有关此解决方案的良好文档。基本上,您将遵循以下步骤:
- 使用
Gradle Build Script Generator
从 Artifactory 生成兼容的 Gradle 构建脚本,并将其包含到您的项目构建脚本中 - 使用 Gradle 目标
gradle artifactoryPublish
只需将您当前的工件发布到 Artifactory
这里有一个更现代的声明性管道的例子供以后参考:
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 plugin project version number
对于其他 Google 来这里的人来说,如果您有 Pipeline Utility Steps plugin 并将您需要的内容存储在 gradle.properties
文件中,您可以在环境块:
MY_PROPS = readProperties file:"${WORKSPACE}/gradle.properties"
MY_VERSION = MY_PROPS['version']