我正在尝试使用groovy构建脚本将构建管道迁移到“Pipeline插件”。
我的管道通常是:
我想在我的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
}
}
答案 0 :(得分:2)
我认为你实际上有两种不同的方法可以解决这个问题:
找到一种从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
个变量。
这是相反的方法,我个人更喜欢:不是向Artifactory提供所有Gradle项目信息,而是向Gradle提供您的Artifactory设置并使用Gradle目标轻松发布到Artifactory。
JFrog在Working with Gradle部分提供了有关此解决方案的详细文档。基本上,您将按照以下步骤操作:
Gradle Build Script Generator
从Artifactory生成符合要求的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"
}
}
}
}
}
另见: