我有一个Jenkins管道来构建.deb包。它将包成功上传到Artifactory存储库。程序包本身位于“池”中,并且为“主要”组件和“测试”分发创建了元数据。我的preprod环境通过APT安装该软件包。
我现在想做的是将构建升级到同一存储库中的“稳定”发行版(我们只有一个带有大量存储库的公司Artifactory实例,所以我不能有多个存储库。)
我的管道如下所示:
#!/usr/bin/env groovy
node('XXX') {
def artifactoryServer
def artifactoryBuildInfo
stage('Artifactory configuration') {
artifactoryServer = Artifactory.newServer url: "http://mycorporateartifactoryrepo.com", credentialsId: 'XXXXX'
}
stage('checkout') {
checkout scm
}
stage('packaging & deploying') {
artifactoryBuildInfo = Artifactory.newBuildInfo()
// Packaging & deploying mvn
archiveArtifacts artifacts: "target/cowsay.deb", fingeprint: true
// packaging & deploying deb package
def uploadSpec = """{
"files": [
{
"pattern": "target/cowsay.deb",
"target": "debian-repo/pool/",
"props": "deb.distribution=testing;deb.component=main;deb.architecture=all"
}
]
}"""
artifactoryBuildInfo = artifactoryServer.upload spec: uploadSpec
artifactoryServer.publishBuildInfo artifactoryBuildInfo
}
stage('promotion') {
def promotionConfig = [
'buildName' : artifactoryBuildInfo.name,
'buildNumber' : artifactoryBuildInfo.number,
'sourceRepo' : 'debian-repo/pool/',
'targetRepo' : 'debian-repo/pool/',
'comment' : 'Promoting build',
'status' : 'Released',
'includeDependencies': true,
'copy' : true,
'failFast' : true
]
// Promote build interactively if tests are OK
Artifactory.addInteractivePromotion server: artifactoryServer, promotionConfig: promotionConfig, displayName: 'Promote me!'
}
}
我该如何管理? Artifactory没有记录这种可能性。我是否需要创建一个自定义管道来实现这一目标?
谢谢
答案 0 :(得分:0)
Artifactory Build Promotion使您能够将构建标记为“已升级”(即已发布),并且可以将工件转移或复制到其他存储库(这表示可发布的位置)。
但是,在您的情况下,可以通过修改工件上的deb.distribution
属性集来更改Debian工件的分布-这也将导致它在stable
分布中被索引(因此可用)以适应新的发行版本。
我建议您为此添加一个步骤,或者创建一个完全不同的工作来促进构建,然后使用所需的属性对工件进行注释。
另一种替代方法是使用可以从工作中触发的user plugin,但是通过标准的REST API IMHO,使用属性标记更加方便。