Загрузить RPM в Artifactory из Gradle
Как я могу загрузить RPM-файл в Artifactory с помощью Gradle? Gradle всегда загружает файлы, используя непосредственно макет maven-style, который не подходит для репозитория YUM.
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). } } }