Mam potok Jenkins, aby zbudować pakiet .deb. Pomyślnie przesyła pakiet do repozytorium Artifactory. Sam pakiet znajduje się w „puli”, a metadane są tworzone dla komponentu „głównego” i dystrybucji „testowej”. Moje środowisko preprod instaluje pakiet przez APT.

To, co chciałbym teraz zrobić, to promować kompilację do 'stabilnej' dystrybucji w tym samym repozytorium (mamy tylko jedną korporacyjną instancję Artifactory z wieloma repozytoriami, więc nie mogę mieć kilku).

Mój rurociąg wygląda tak:

#!/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!'
    }
}

Jak sobie z tym poradzić? Artifactory nie dokumentuje takiej możliwości. Czy muszę utworzyć niestandardowy potok, aby to osiągnąć?

Dzięki

2
Yann Poirier 19 listopad 2018, 12:57

1 odpowiedź

Najlepsza odpowiedź

Artifactory Promocja budowania umożliwia oznacz kompilację jako „promowaną” (tj. wydaną) i być może przenieś lub skopiuj artefakty do różnych repozytoriów (co oznacza lokalizację gotową do wydania).

Jednak w twoim przypadku zmianę dystrybucji artefaktu Debiana można wykonać poprzez modyfikację właściwości deb.distribution ustawionej na artefakcie - spowoduje to, że zostanie on również zindeksowany w dystrybucji stable (i dzięki temu będzie dostępny do zastosowania nowej dystrybucji).

Sugerowałbym albo dodanie kroku do potoku w tym celu, albo utworzenie zupełnie innego zadania, które promuje kompilację, a następnie adnotuje artefakty z wymaganymi właściwościami.

Inną alternatywą jest użycie wtyczki użytkownika może uruchomić się z zadania, ale tagowanie za pomocą właściwości jest wygodniejsze za pośrednictwem standardowego REST API IMHO.

1
danf 22 listopad 2018, 01:17