Jenkins Artifatory管道:如何将Debian软件包从测试发行版升级到同一存储库中的稳定版

时间:2018-11-19 09:57:03

标签: debian jenkins-pipeline artifactory

我有一个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没有记录这种可能性。我是否需要创建一个自定义管道来实现这一目标?

谢谢

1 个答案:

答案 0 :(得分:0)

Artifactory Build Promotion使您能够将构建标记为“已升级”(即已发布),并且可以将工件转移或复制到其他存储库(这表示可发布的位置)。

但是,在您的情况下,可以通过修改工件上的deb.distribution属性集来更改Debian工件的分布-这也将导致它在stable分布中被索引(因此可用)以适应新的发行版本。

我建议您为此添加一个步骤,或者创建一个完全不同的工作来促进构建,然后使用所需的属性对工件进行注释。

另一种替代方法是使用可以从工作中触发的user plugin,但是通过标准的REST API IMHO,使用属性标记更加方便。