Publikuj migawkę vs Publikuj Release w Gradle z ciągłą integracją
Właśnie uczę się Gradle, wywodzącego się zarówno z ant + Ivy, jak i Mavena i staram się zawinąć w głowę właściwy sposób, aby opublikować wersję release mojego oprogramowania za pomocą gradle. Muszę również stale integrować swoje projekty bez konieczności ciągłego wydawania niezależnych artefaktów.
Ant + Ivy
W świecie Ant + Ivy mogę tworzyć cele publishSnapshot i publishRelease. Każdy z nich może użyć różnych resolverów Ivy, aby rozwiązać i opublikować do moja osobna migawka lub repozytoria wydania w Nexusie.
Maven
W Mavenie mogę zdefiniować snapshotRepository
LUB repository
w mojej sekcji distributionManagement
, aby Maven publikował w moim oddzielnym migawce lub repozytoriach wydania w Nexusie.
Gradle
Teraz wejdź do gradle. Jak mogę osiągnąć tę samą funkcjonalność? Używam repozytoriów w stylu ivy.
Dziękuję za wszelkie spostrzeżenia, które możesz dostarczyć.
Odpowiedź
Dzięki odpowiedzi René poniżej w końcu udało mi się stworzyć wykonalne rozwiązanie. Sednem sprawy było to, że musiałem stale integrować wszystkie moje projekty. W tym celu pomyślałem, że zadeklarowanie zależności przy użyciu numeru wersji latest.integration
było jedynym sposobem na ściągnięcie najnowszej wersji moich bibliotek, dlatego musiałem użyć repozytoriów w stylu ivy.
W rzeczywistości, istnieją inne sposoby, aby pobrać najnowszą wersję bibliotek w celu ciągłej integracji mojego oprogramowania we wszystkich projektach. Na rozwiązaniem jest użycie uploadArchives
Dokładnie tak, jak podałem poniżej (należy również pamiętać, że aby to zadziałało, musisz użyć apply plugin: 'maven'
. Upewnij się, że Twoje repozytoria są również w stylu maven, a deklarując zależność, możesz użyć dynamicznych numerów wersji, jak pokazano tutaj . W moim przypadku wymieniłem globalny numer wersji w moim wspólnym.gradle i w kolejnych projektach użyłem version: version
do odniesienia się do zmiennej global version. W ten sposób każdy Artefakt w moim systemie ma tę samą wersję. Kiedy nadszedł czas, aby release, mogę zmienić to z 1.0-migawka do 1.0 i zbudować każdy w kolejności.
2 answers
Możesz skonfigurować migawkę i repozytorium release w zadaniu "Upload" (np. uploadArchives
) zadanie:
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');
}
}
}
}
Dla wersji *-SNAPSHOT
używany jest snapshotRepository
. W przeciwnym razie używane jest repo releases.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 10:02:56
Jeśli chcesz użyć nowej wtyczki maven-publish
, możesz przesłać ją do różnych repozytoriów za pomocą 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"
}
}
}
}
Reference: maven-publish and setting snapshotRepository and releaseRepository
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-24 10:04:11