ProHoster > Blog > fitantanan-draharaha > Mampiasa hetsika Gradle sy Github hamoahana tetikasa Java amin'ny Sonatype Maven Central Repository
Mampiasa hetsika Gradle sy Github hamoahana tetikasa Java amin'ny Sonatype Maven Central Repository
Amin'ity lahatsoratra ity dia te-hijery akaiky kokoa ny fizotran'ny famoahana artifact Java aho amin'ny alΓ lan'ny Github Actions ao amin'ny Sonatype Maven Central Repository amin'ny fampiasana ny mpanangona Gradle.
Nanapa-kevitra ny hanoratra ity lahatsoratra ity aho noho ny tsy fisian'ny fampianarana mahazatra amin'ny toerana iray. Ny vaovao rehetra dia tsy maintsy nangonina tsikelikely avy amin'ny loharano samihafa, fa tsy vao haingana. Izay liana dia tongasoa eto amin'ny saka.
Mamorona tahiry ao amin'ny Sonatype
Ny dingana voalohany dia ny mamorona tahiry ao amin'ny Sonatype Maven Central. Ho an'ity dia mandeha izahay eto, misoratra anarana ary mamorona asa vaovao miaraka amin'ny fangatahana hamorona tahiry ho antsika. Mitondra fiara amin'ny anay izahay GroupId tetikasa, URL tetikasa rohy mankany amin'ny tetikasa ary SCM url rohy mankany amin'ny rafitra fanaraha-maso ny dikan-teny misy ny tetikasa. GroupId eto dia tokony ho toy ny com.example, com.example.domain, com.example.testsupport, ary mety amin'ny endrika rohy mankany amin'ny github-nao ihany koa: github.com/yourusername -> io.github.yourusername. Na izany na tsy izany dia mila manamarina ny tompon'ilay sehatra na piraofilina ianao. Raha nanondro ny mombamomba ny Github ianao, dia angatahina ianao hamorona tahiry ho an'ny daholobe miaraka amin'ny anarana tianao.
Fotoana vitsivitsy aorian'ny fanamafisana dia ho noforonina ny GroupId-nao ary afaka mandroso amin'ny dingana manaraka isika, ny fanamafisana Gradle.
Configuring Gradle
Tamin'ny fotoana nanoratana dia tsy nahita plugins ho an'ny Gradle aho izay afaka manampy amin'ny famoahana artifact. izany ny hany plugin hitako, fa ny mpanoratra dia nandΓ ny hanohana azy bebe kokoa. Noho izany, nanapa-kevitra ny hanao ny zava-drehetra ny tenako, soa ihany fa tsy sarotra loatra.
Ny zavatra voalohany ho fantatra dia ny fepetra takian'ny famoahana an'i Sonatype. Toy izao izy ireo:
Ny fisian'ny kaody loharano sy JavaDoc, i.e. tsy maintsy manatrika -sources.jar ΠΈ-javadoc.jar rakitra. Araka ny voalaza ao amin'ny antontan-taratasy, raha tsy azo atao ny manome kaody loharano na antontan-taratasy, dia afaka manao dummy ianao -sources.jar na -javadoc.jar miaraka amin'ny README tsotra ao anatiny handalo ny fanamarinana.
Ny rakitra rehetra dia tsy maintsy misy sonia GPG/PGPary .asc ny rakitra misy ny sonia dia tsy maintsy ampidirina isaky ny rakitra.
fisian'ny pom rakitra
Soatoavina marina groupId, artifactId ΠΈ version. Ny dikan-teny dia mety ho tady tsy misy dikany ary tsy afaka mifarana amin'ny -SNAPSHOT
Ilaina ny fanatrehana name, description ΠΈ url
Ny fisian'ny fampahalalana momba ny fahazoan-dΓ lana, ny mpamorona ary ny rafitra fanaraha-maso ny dikan-teny
Hampihatra ireo fepetra ireo isika amin'ny build.gradle rakitra. Voalohany, andao ampiana ny fampahalalana ilaina rehetra momba ny mpamorona, ny fahazoan-dΓ lana, ny rafitra fanaraha-maso ny dikan-teny, ary ny url, ny anarana ary ny famaritana ny tetikasa. Mba hanaovana izany, andeha hanoratra fomba tsotra:
def customizePom(pom) {
pom.withXml {
def root = asNode()
root.dependencies.removeAll { dep ->
dep.scope == "test"
}
root.children().last() + {
resolveStrategy = DELEGATE_FIRST
description 'Some description of artifact'
name 'Artifct name'
url 'https://github.com/login/projectname'
organization {
name 'com.github.login'
url 'https://github.com/login'
}
issueManagement {
system 'GitHub'
url 'https://github.com/login/projectname/issues'
}
licenses {
license {
name 'The Apache License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
scm {
url 'https://github.com/login/projectname'
connection 'scm:https://github.com/login/projectname.git'
developerConnection 'scm:git://github.com/login/projectname.git'
}
developers {
developer {
id 'dev'
name 'DevName'
email '[email protected]'
}
}
}
}
}
Avy eo dia mila mamaritra ianao fa mandritra ny fivoriambe dia hiteraka izy ireo -sources.jar ΠΈ-javadoc.jar rakitra. Mba hanaovana izany, mandehana any amin'ny fizarana java mila manampy ireto manaraka ireto ianao:
java {
withJavadocJar()
withSourcesJar()
}
Andao hiroso amin'ny fepetra farany, mametraka sonia GPG/PGP. Mba hanaovana izany, andao hampifandray ny plugin signing:
plugins {
id 'signing'
}
Ary ampio fizarana:
signing {
sign publishing.publications
}
Farany, andao hanampy fizarana iray publishing:
publishing {
publications {
mavenJava(MavenPublication) {
customizePom(pom)
groupId group
artifactId archivesBaseName
version version
from components.java
}
}
repositories {
maven {
url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
credentials {
username sonatypeUsername
password sonatypePassword
}
}
}
}
izany sonatypeUsername ΠΈ sonatypePassword variables misy ny fidirana sy tenimiafina noforonina nandritra ny fisoratana anarana amin'ny sonatype.org.
Ka ny farany build.gradle dia ho toy izao:
Kaody build.gradle feno
plugins {
id 'java'
id 'maven-publish'
id 'signing'
}
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
withJavadocJar()
withSourcesJar()
}
group 'io.github.githublogin'
archivesBaseName = 'projectname'
version = System.getenv('RELEASE_VERSION') ?: "0.0.1"
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
}
test {
useJUnitPlatform()
}
jar {
from sourceSets.main.output
from sourceSets.main.allJava
}
signing {
sign publishing.publications
}
publishing {
publications {
mavenJava(MavenPublication) {
customizePom(pom)
groupId group
artifactId archivesBaseName
version version
from components.java
}
}
repositories {
maven {
url "https://oss.sonatype.org/service/local/staging/deploy/maven2"
credentials {
username sonatypeUsername
password sonatypePassword
}
}
}
}
def customizePom(pom) {
pom.withXml {
def root = asNode()
root.dependencies.removeAll { dep ->
dep.scope == "test"
}
root.children().last() + {
resolveStrategy = DELEGATE_FIRST
description 'Some description of artifact'
name 'Artifct name'
url 'https://github.com/login/projectname'
organization {
name 'com.github.login'
url 'https://github.com/githublogin'
}
issueManagement {
system 'GitHub'
url 'https://github.com/githublogin/projectname/issues'
}
licenses {
license {
name 'The Apache License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
scm {
url 'https://github.com/githublogin/projectname'
connection 'scm:https://github.com/githublogin/projectname.git'
developerConnection 'scm:git://github.com/githublogin/projectname.git'
}
developers {
developer {
id 'dev'
name 'DevName'
email '[email protected]'
}
}
}
}
}
Tiako ny manamarika fa mahazo ny dikan-teny avy amin'ny fari-piainan'ny tontolo iainana izahay: System.getenv('RELEASE_VERSION'). Hametraka izany mandritra ny fivoriambe isika ary alaina amin'ny anaran'ny tag.
PGP key generation
Iray amin'ireo fepetra takian'ny Sonatype ny sonia ny rakitra rehetra amin'ny alΓ lan'ny famaha GPG/PGP. Ho an'ity dia mandeha izahay eto ary alaivo ny fitaovana GnuPG ho an'ny rafitra fiasanao.
Andeha hojerentsika id ny fanalahidinay miaraka amin'ny baiko: gpg --list-secret-keys --keyid-format short. Id dia haseho aorian'ny slash, ohatra: rsa2048/9B695056
Manondrana ny fanalahidy miafina any amin'ny toerana tsy misy dikany isika; mila izany isika any aoriana: gpg --export-secret-key 9B695056 > D:\gpg\9B695056.gpg
Mametraka Github Actions
Andao hiroso amin'ny dingana farany, mametraka ny fananganana sy ny famoahana fiara amin'ny alΓ lan'ny Github Actions.
Github Actions dia fampiasa iray ahafahanao manao automatique ny workflow amin'ny fampiharana ny tsingerin'ny CI/CD feno. Ny fananganana, ny fitsapana ary ny fametrahana dia azo ateraky ny hetsika isan-karazany: fanosehana kaody, famoronana famoahana na olana. Maimaim-poana tanteraka ity fampiasa ity ho an'ny tahiry ho an'ny daholobe.
Amin'ity fizarana ity dia hasehoko anao ny fomba fametrahana ny fananganana sy fanosehana ny kaody ary ny fametrahana ny tahiry Sonatype rehefa mamoaka famoahana, ary koa ny fametrahana tsiambaratelo.
Mametraka tsiambaratelo
Ho an'ny fivoriambe mandeha ho azy sy ny fametrahana azy dia mila soatoavina miafina maromaro isika, toy ny ID key, ny tenimiafina nampidirintsika rehefa namorona ny lakile, ny lakile PGP mihitsy, ary koa ny fidirana / tenimiafina ho an'ny Sonatype. Azonao atao ny mametraka azy ireo amin'ny fizarana manokana ao amin'ny firafitry ny tahiry:
SIGNING_KEYID/SIGNING_PASSWORD β PGP key ID sy tenimiafina napetraka mandritra ny famoronana.
Te-hiresaka amin'ny antsipiriany bebe kokoa momba ny GPG_KEY_CONTENTS aho. Ny zava-misy dia ny famoahana dia mila fanalahidy PGP manokana. Mba hametrahana azy amin'ny tsiambaratelo dia nampiasako toromarika ary fanampin'izany dia nanao hetsika maromaro.
Andao atao encryption ny fanalahidin'ny gpg: gpg --symmetric --cipher-algo AES256 9B695056.gpgamin'ny fampidirana ny tenimiafina. Tokony hapetraka ao anaty fari-pitsipika: SECRET_PASSPHRASE
Andao avadika ho endrika lahatsoratra amin'ny alΓ lan'ny base64 ny lakile encryption vokatr'izany: base64 9B695056.gpg.gpg > 9B695056.txt. Hametraka ny atiny amin'ny fari-pitsipika: GPG_KEY_CONTENTS.
Mametraka fananganana rehefa manosika kaody sy mamorona PR
Voalohany dia mila mamorona lahatahiry ao amin'ny fototry ny tetikasanao ianao: .github/workflows.
name: build
on:
push:
branches:
- master
- dev
- testing
pull_request:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 8
uses: actions/setup-java@v1
with:
java-version: 8
- name: Build with Gradle
uses: eskatos/gradle-command-action@v1
with:
gradle-version: current
arguments: build -PsonatypeUsername=${{secrets.SONATYPE_USERNAME}} -PsonatypePassword=${{secrets.SONATYPE_PASSWORD}}
Ity workflow ity dia hotanterahina rehefa manosika ny sampana master, dev ΠΈ testing, koa rehefa mamorona fangatahana misintona.
Ny fizarana asa dia mamaritra ny dingana tsy maintsy tanterahina mifototra amin'ny hetsika voafaritra. Amin'ity tranga ity, hanorina amin'ny dikan-teny farany an'ny ubuntu izahay, hampiasa Java 8, ary hampiasa plugin ho an'ny Gradle ihany koa. eskatos/gradle-command-action@v1, izay, amin'ny fampiasana ny kinova farany an'ny mpanangona, dia handefa ny baiko voalaza ao arguments. hiovaova secrets.SONATYPE_USERNAME ΠΈ secrets.SONATYPE_PASSWORD Ireo no tsiambaratelo nanontanianay teo aloha.
Ny valin'ny fananganana dia ho hita ao amin'ny tabilao Actions:
Autodeploy rehefa mamoaka famoahana vaovao
Ho an'ny autodeployment dia hamorona fisie workflow misaraka izahay gradle-ci-publish.yml:
name: publish
on:
push:
tags:
- 'v*'
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 8
uses: actions/setup-java@v1
with:
java-version: 8
- name: Prepare to publish
run: |
echo '${{secrets.GPG_KEY_CONTENTS}}' | base64 -d > publish_key.gpg
gpg --quiet --batch --yes --decrypt --passphrase="${{secrets.SECRET_PASSPHRASE}}"
--output secret.gpg publish_key.gpg
echo "::set-env name=RELEASE_VERSION::${GITHUB_REF:11}"
- name: Publish with Gradle
uses: eskatos/gradle-command-action@v1
with:
gradle-version: current
arguments: test publish -Psigning.secretKeyRingFile=secret.gpg -Psigning.keyId=${{secrets.SIGNING_KEYID}} -Psigning.password=${{secrets.SIGNING_PASSWORD}} -PsonatypeUsername=${{secrets.SONATYPE_USERNAME}} -PsonatypePassword=${{secrets.SONATYPE_PASSWORD}}
Ny rakitra dia saika mitovy amin'ilay teo aloha afa-tsy ny hetsika izay hanombohany azy. Amin'ity tranga ity, ity no hetsika hamoronana marika misy anarana manomboka amin'ny v.
Alohan'ny fametrahana dia mila manala ny fanalahidin'ny PGP avy amin'ny tsiambaratelo isika ary mametraka izany ao amin'ny fototry ny tetikasa, ary koa manala azy. Avy eo dia mila mametraka fari-piainana manokana isika RELEASE_VERSION izay resahinay gradle.build rakitra. Izany rehetra izany dia atao amin'ny fizarana Prepare to publish. Mahazo ny fanalahidinay avy amin'ny fari-piadidiana GPG_KEY_CONTENTS izahay, mandika azy ho rakitra gpg, avy eo decrypt izany amin'ny fametrahana azy ao anaty rakitra secret.gpg.
Avy eo dia miditra amin'ny variable manokana isika GITHUB_REF, izay ahafahantsika mahazo ny dikan-teny nofaritana tamin'ny famoronana ny tag. Manana ny sandany io fari-piainana io amin'ity tranga ity refs/tags/v0.0.2 izay no nanapahanay ireo tarehintsoratra 11 voalohany mba hahazoana ilay dikan-teny manokana. Manaraka, mampiasa ny baiko Gradle mahazatra izahay amin'ny famoahana: test publish
Fanamarinana ny valin'ny fametrahana ao amin'ny tahiry Sonatype
Aorian'ny famoronana ny famoahana dia tokony hanomboka ny fizotran'ny asa voalaza ao amin'ny fizarana teo aloha. Mba hanaovana izany dia mamorona famoahana izahay:
Amin'ity tranga ity, ny anaran'ny tag dia tsy maintsy manomboka amin'ny v. Raha, aorian'ny fipihana ny Publish release, mandeha tsara ny workflow, dia afaka mandeha any Sonatype Nexus mba hahazoana antoka:
Nipoitra tao amin'ny tahiry Staging ny artifact. Mipoitra avy hatrany ao amin'ny sata Misokatra izy io, avy eo dia tsy maintsy afindra amin'ny tanana amin'ny sata Akatona amin'ny fipihana ny bokotra mifanaraka amin'izany. Rehefa avy nanamarina fa nahafeno ny fepetra rehetra, ny artifact dia mifindra mankany amin'ny status Close ary tsy azo ovaina intsony. Amin'ity endrika ity dia handeha any MavenCentral izany. Raha tsara ny zava-drehetra dia azonao atao ny manindry ny bokotra Release, ary ny artifact dia handeha any amin'ny tahiry Sonatype.
Mba hampidirana ny artifact ao amin'ny MavenCentral dia mila mangataka izany ianao amin'ny asa izay noforoninay tany am-boalohany. Indray mandeha ihany ianao no mila manao izany, ka sambany no avoakanay. Tsy ilaina ny manao izany amin'ny manaraka, ny zava-drehetra dia ho voarindra ho azy. Navelan'izy ireo haingana ho ahy ny fampifanarahana, saingy 5 andro teo ho eo vao tonga tao amin'ny MavenCentral ny artifact.
Izay ihany, navoakanay tao amin'ny MavenCentral ny artifacty.
rohy mahasoa
Similar lahatsoratra, famoahana amin'ny alalan'ny maven ihany