Загрузить RPM в Artifactory из Gradle


Как я могу загрузить RPM-файл в Artifactory с помощью Gradle? Gradle всегда загружает файлы, используя непосредственно макет maven-style, который не подходит для репозитория YUM.

2 4

2 ответа:

Проблема здесь в том, что Gradle настаивает на загрузке всего в формате каталога maven в стиле group-id/version/artifact, в то время как хранилище yum нуждается в плоской компоновке. Здесь есть два подхода-использование плагина Artifactory или более нового механизма публикации Gradles. Я мог заставить это работать только с последним.

Я предполагаю, что вы используете плагинGradle ospackage и уже создали сборку RPM. В моем случае имя задачи RPM - distRpm. Для пример:

task distRpm(type: Rpm) {
    packageName = 'my_package'
    version = version
    release = gitHash
    arch = 'X86_64'
    os = 'LINUX'
    // Etc
}

Добавьте плагин ivy publish в свой проект:

apply plugin: 'ivy-publish'

А затем добавьте блок публикации:

publishing {
    publications {
        rpm(IvyPublication) {
            artifact distRpm.outputs.getFiles().getSingleFile()
            /* Ivy plugin forces an organisation to be set. Set it to anything
               as the pattern layout later supresses it from appearing in the filename */
            organisation 'dummy'
        }
    }
    repositories {
        ivy {
            credentials {
                username 'yourArtifactoryUsername'
                password 'yourArtifactoryPassword'
            }
            url 'https://your-artifactory-server/artifactory/default.yum.local/'
            layout "pattern", {
                artifact "${distRpm.outputs.getFiles().getSingleFile().getName()}"
            }
        }
    }
}

Публикация Ivy позволяет указать каталог и шаблон имени файла для загрузки. Это перезаписывается, чтобы быть просто точным именем файла RPM.

Это мои фрагменты кода с плагином Gradle Artifactory

Применить Плагины:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.4.0"
    }
}

apply plugin: 'ivy-publish'
apply plugin: 'com.jfrog.artifactory'

Настройка artifactory

artifactoryPublish {}.dependsOn(buildRpm)

publishing.publications.create('yum-publication', IvyPublication) {
        artifact buildRpm.outputs.getFiles().getSingleFile()
}



artifactory {
    contextUrl = 'https://artifactory.acme.com/artifactory'   //The base Artifactory URL if not overridden by the publisher/resolver
    publish {
        //A closure defining publishing information
        repository {
            repoKey = 'demo-yum'   //The Artifactory repository key to publish to
            username ="${artifactory_user}"
            password = "${artifactory_password}"
            ivy {
                 artifactLayout = "${buildRpm.outputs.getFiles().getSingleFile().getName()}"
            }
        }
        defaults {
            //List of Gradle Publications (names or objects) from which to collect the list of artifacts to be deployed to Artifactory.
            publications ('yum-publication')

            publishBuildInfo = false   //Publish build-info to Artifactory (true by default)
            publishArtifacts = true   //Publish artifacts to Artifactory (true by default)
            publishPom = false   //Publish generated POM files to Artifactory (true by default).
            publishIvy = false   //Publish generated Ivy descriptor files to Artifactory (true by default).
        }
    }
}