我正在将UI中已配置的Jenkins作业转换为使用声明性管道脚本配置的作业。
这是一个由Maven构建的Java项目,具有部署到Artifactory的构建后动作
构建和测试步骤很简单。我们可以使用这个用户界面
并将其转换为mvn命令sh "mvn clean install"
。
后构建步骤的配置在用户界面中很简单
这已选中三个文本框
这将生成并上传一个丰富的buildInfo.json并将正确的工件上传到我们的工件服务器。
我想用流水线步骤代替它。...阅读本文档https://www.jfrog.com/confluence/display/RTF/Declarative+Pipeline+Syntax建议,应通过让人工插件运行maven命令来完成构建maven作业。我想避免这种情况,因为我们目前不这样做,并且 我最终希望不再需要在服务器上存储该项目的工件。
在pom中我们会看到
<groupId>some.value</groupId>
<artifactId>my-app</artifactId>
<version>1.1.184</version>
我需要一个部分起作用的脚本:
stage('publish common code to artifactory') {
steps {
rtUpload (
serverId: 'Artifactory',
spec: '''{
"files": [
{
"pattern": "applications/my-app/pom.xml",
"target": "libs-release-local"
}
]
}''',
buildName: 'my-app',
buildNumber: env.GIT_HASH_VERSION
)
rtPublishBuildInfo (
serverId: "Artifactory",
buildName: 'my-app',
buildNumber: env.GIT_HASH_VERSION
)
}
}
这会将pom发布到工件,但最初将其发布到some/value/my-app/my-app-1.1.184.pom
的地方,我的管道版本将发布到/pom.xml
的根目录
Artifactory看起来能够从pom读取信息并使用它来正确放置工件,而无需我编写代码,但是怎么办?
答案 0 :(得分:1)
可能对某人有所帮助的示例:
stage("deploy_mvn") {
environment {
// Must define environmental variable for maven
MAVEN_HOME = '/usr/share/maven'
}
steps {
script {
def artserver = Artifactory.newServer url: 'http://example.com/artifactory', credentialsId: 'blahblah'
def rtMaven = Artifactory.newMavenBuild()
rtMaven.resolver server: artserver, releaseRepo: 'my-repo', snapshotRepo: 'my-ss-repo'
rtMaven.deployer server: artserver, releaseRepo: 'my-local', snapshotRepo: 'my-snapshot-local'
rtMaven.deployer.artifactDeploymentPatterns.addInclude("*.pom").addInclude("*.war").addInclude("*.jar")
rtMaven.deployer.deployArtifacts = true
def buildInfo = rtMaven.run pom: 'pom.xml', goals: 'clean install'
}
}
}