web-dev-qa-db-ja.com

継続的インテグレーションを使用したGradleでのスナップショットの公開とリリースの公開

Ant + IvyとMavenの両方のバックグラウンドから来たGradleを学んでおり、Gradleを使用してソフトウェアのリリースバージョンを公開するための適切な方法を頭に入れようとしています。また、独立したアーティファクトを絶えずリリースすることなく、プロジェクトを絶えず統合する必要があります。

アント+アイビー

Ant + Ivyの世界では、publishSnapshotおよびpublishReleaseターゲットを作成できます。これらはそれぞれ異なるIvyリゾルバーを使用して、Nexusの個別のスナップショットまたはリリースリポジトリを解決および公開できます。

Maven

Mavenを使用すると、snapshotRepositoryセクションでrepositoryまたはdistributionManagementを定義して、MavenをNexusの個別のスナップショットまたはリリースリポジトリに公開できます。

Gradle

Gradleを入力します。これと同じ機能をどのように実現できますか?私はアイビースタイルのリポジトリを使用しています。

ご意見をお寄せいただきありがとうございます。

[〜#〜] answer [〜#〜]

以下のルネの回答のおかげで、私はついに実行可能なソリューションを作成することができました。問題の核心は、すべてのプロジェクトで絶えず統合する必要があるということでした。これを行うには、バージョン番号を使用して依存関係を宣言すると考えましたlatest.integrationは私のライブラリの最新バージョンを取り込む唯一の方法であったため、ivyスタイルのリポジトリを使用する必要がありました。

実際、すべてのプロジェクトにわたってソフトウェアを継続的に統合するために、ライブラリの最新バージョンを取り込む他の方法があります。解決策は、Reneが以下にリストしたとおりにuploadArchivesを使用することです(また、apply plugin: 'maven'これが機能するため。リポジトリもMavenスタイルであることを確認してください。依存関係を宣言するときは、 here のように動的バージョン番号を使用できます。私の場合、common.gradleにグローバルバージョン番号をリストし、ダウンストリームプロジェクトではversion: versionは、グローバルバージョン変数を参照します。このようにして、システム内の各アーティファクトは同じバージョンになります。リリースするときは、これを1.0-SNAPSHOTから1.0に変更して、それぞれを順番にビルドできます。

33
dev

「アップロード」タスク(例:uploadArchives)タスクでsnapshotおよびreleaseリポジトリを設定できます:

uploadArchives {  
    repositories {  
        mavenDeployer {  
            repository(url: 'http://myCompanyRepo.com:8081/releases') {  
                authentication(userName: 'admin', password: 'password');  
            }  
            snapshotRepository(url: 'http://myCompanyRepo.com:8081/snapshots') {
                authentication(userName: 'admin', password: 'password');  
            }  
        }  
    }  
}

にとって *-SNAPSHOTバージョンsnapshotRepositoryが使用されます。それ以外の場合は、releasesリポジトリが使用されます。

50
Rene Groeschke

新しいmaven-publishプラグインを使用する場合は、ifステートメントを使用して別のリポジトリにアップロードできます。

apply plugin: 'maven-publish'

...

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.Java
        }
    }
    repositories {
        maven {
            credentials {
                username "anonymous"
            }

            if(project.version.endsWith('-SNAPSHOT')) {
                url "http://example/artifactory/libs-snapshot-local"
            } else {
                url "http://example/artifactory/libs-release-local"
            }
        }
    }
}

参照: maven-publishおよび設定snapshotRepositoryおよびreleaseRepository

46
Paolo Fulgoni