[英]convert a jenkins artifactory post build step into a pipeline stage
我正在将已在 UI 中配置的 Jenkins 作业转换为使用声明性管道脚本配置的作业。
这是一个 maven 构建的 Java 项目,具有部署到 Artifactory 的构建后操作
构建和测试步骤很简单。 我们可以使用这个 UI
并将其转换为 mvn 命令sh "mvn clean install"
。
后期构建步骤的配置在 UI 中很简单
这选中了三个文本框
这会生成并上传丰富的 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 读取信息并使用它来正确放置工件,而无需我编写代码,但是如何?
可能对某人有帮助的示例:
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'
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.