ProHoster > Blog > Pulega > Faʻaaogaina Gradle ma Github Actions e faʻasalalau ai se poloketi Java i le Sonatype Maven Central Repository
Faʻaaogaina Gradle ma Github Actions e faʻasalalau ai se poloketi Java i le Sonatype Maven Central Repository
I totonu o lenei tusiga, ou te manaʻo e vaʻavaʻai totoʻa i le faʻagasologa o le lolomiina o se Java artifact mai le sasa e ala i Github Actions i le Sonatype Maven Central Repository e faʻaaoga ai le Gradle collector.
Na ou filifili e tusi lenei tusiga ona o le leai o se aʻoaʻoga masani i se tasi nofoaga. O faʻamatalaga uma e tatau ona aoina faʻatasi ma lea vaega mai faʻamatalaga eseese, ae le o faʻamatalaga lata mai. So'o se tasi e fiafia, fa'afeiloa'i ile pusi.
Fausia se fale teu oloa i Sonatype
O le laasaga muamua o le fatuina lea o se fale teu oloa i Sonatype Maven Central. Mo lenei mea tatou te o ai iinei, resitala ma faia se galuega fou ma se talosaga e fai se fale teu oloa mo i matou. Matou te tietie i la matou taavale GroupId galuega faatino, Poloketi URL sootaga i le poloketi ma SCM url se so'oga i le fa'atonuga o fa'asologa o lo'o i ai le poloketi. GroupId e tatau ona pei o com.example, com.example.domain, com.example.testsupport, ma e mafai foi ona i ai i le tulaga o se sootaga i lau github: github.com/yourusername -> io.github.yourusername. I so'o se tulaga, e te mana'omia le fa'amaonia o le umiaina o le vaega po'o le fa'amatalaga. Afai na e faʻamaonia se faʻamatalaga Github, o le a talosagaina oe e fai se fale teu oloa lautele ma le igoa e manaʻomia.
I se taimi pe a maeʻa le faʻamaoniga, o le a faia lau GroupId ma e mafai ona matou agai atu i le isi laasaga, Gradle configuration.
Fa'atonu Gradle
I le taimi o le tusitusi, ou te leʻi mauaina ni mea faʻapipiʻi mo Gradle e mafai ona fesoasoani i le lolomiina o se mea. lea na o le plugin lea na ou mauaina, ae na musu le tusitala e toe lagolagoina. O le mea lea, na ou filifili ai e fai mea uma lava ia, o le mea e lelei ai e le faigata tele.
O le mea muamua e suʻesuʻe o manaoga faʻasalalau a Sonatype. O latou nei:
Avanoa o faʻailoga punaʻoa ma JavaDoc, i.e. e tatau ona i ai -sources.jar и-javadoc.jar faila. E pei ona taʻua i totonu o faʻamaumauga, afai e le mafai ona tuʻuina atu tulafono faʻavae poʻo faʻamaumauga, e mafai ona e faia se dummy -sources.jar poʻo -javadoc.jar fa'atasi ai ma se README faigofie i totonu e pasi ai fa'amaoniga.
E tatau ona sainia uma faila GPG/PGPma .asc o le faila o loʻo i ai le saini e tatau ona aofia ai mo faila taʻitasi.
avanoa pom faila
Fa'atatau sa'o groupId, artifactId и version. Fa'aliliuga e mafai ona avea ma se manoa fa'apitoa ma e le mafai ona fa'ai'u i -SNAPSHOT
Manaomia le auai name, description и url
Le i ai o faʻamatalaga e uiga i le laisene, tagata atiaʻe ma le faʻatonuga o faiga
O tulafono fa'avae ia e tatau ona mulimulita'ia pe a fa'asalalau. E maua fa'amatalaga atoa iinei.
O le a matou faʻatinoina nei manaʻoga i build.gradle faila. Muamua, seʻi o tatou faʻaopoopo uma faʻamatalaga talafeagai e uiga i tagata atiaʻe, laisene, faiga faʻatonuga, ma seti foi le url, igoa ma faʻamatalaga o le poloketi. Ina ia faia lenei mea, seʻi o tatou tusia se auala faigofie:
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]'
}
}
}
}
}
Sosoo ai e tatau ona e faʻamaonia i le taimi o le faʻapotopotoga o le a latou gaosia -sources.jar и-javadoc.jar faila. Ina ia faia lenei mea, alu i le vaega java e tatau ona e fa'aopoopo mea nei:
java {
withJavadocJar()
withSourcesJar()
}
Se'i o tatou agai i luma i le mana'oga mulimuli, fa'atulaga se saini GPG/PGP. Ina ia faia lenei mea, tatou faʻafesoʻotaʻi le plugin signing:
plugins {
id 'signing'
}
Ma faaopoopo se vaega:
signing {
sign publishing.publications
}
Mulimuli ane, tatou faaopoopo se vaega 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
}
}
}
}
o sonatypeUsername и sonatypePassword fesuia'i o lo'o iai le saini ma le fa'aupuga na faia i le taimi o le resitalaina i sonatype.org.
O le mea mulimuli la build.gradle e pei o lenei:
Fa'ailoga atoa build.gradle
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]'
}
}
}
}
}
Ou te fia maitauina tatou te mauaina le faʻamatalaga mai le fesuiaiga o le siosiomaga: System.getenv('RELEASE_VERSION'). O le a matou setiina i le taimi o le faʻapotopotoga ma ave mai le igoa igoa.
PGP fa'atupuina autu
O se tasi o mana'oga a Sonatype o le sainia uma o faila e fa'aaoga ai le GPG/PGP key. Mo lenei mea tatou te o ai iinei ma la'u mai le aoga GnuPG mo lau faiga fa'aoga.
Fausia se paga autu: gpg --gen-key, ulufale i lou username, i-meli, ma seti foi se upu faataga.
Se'i tatou su'e id la tatou ki ma le poloaiga: gpg --list-secret-keys --keyid-format short. Id o le a faʻaalia pe a uma le faʻailoga, mo se faʻataʻitaʻiga: rsa2048/9B695056
Fa'asalalau le ki fa'alaua'itele i le server https://keys.openpgp.org poloa'iga: gpg --keyserver [https://keys.openpgp.org](https://keys.openpgp.org/) --send-keys 9B695056
Matou te auina atu i fafo le ki faalilolilo i se nofoaga faʻapitoa; matou te manaʻomia mulimuli ane: gpg --export-secret-key 9B695056 > D:\gpg\9B695056.gpg
Fa'atulaga Github Actions
Sei o tatou agai i luma i le tulaga mulimuli, faʻatulagaina le fausiaina ma le faʻasalalau faʻasalalau e faʻaaoga ai Github Actions.
Github Actions o se gaioiga e mafai ai e oe ona faʻaogaina le faʻaogaina o galuega e ala i le faʻatinoina o se taamilosaga CI / CD atoa. Fausia, faʻataʻitaʻiga ma faʻapipiʻiina e mafai ona faʻaosoina e ala i mea eseese: tuleia le code, fatuina o se faʻamalolo poʻo ni faʻafitauli. O lenei galuega e matua leai se totogi mo faleteuoloa lautele.
I lenei vaega, o le a ou faʻaali atu ia te oe le faʻatulagaina o le fausiaina ma le tuleia o le code ma le faʻapipiʻiina i le Sonatype repository pe a tuʻuina atu se faʻamalologa, faʻapea foʻi ma le faʻatulagaina o mealilo.
Faatuina mea lilo
Mo le faʻapipiʻiina otometi ma le faʻapipiʻiina, matou te manaʻomia se numera o mea lilo, e pei o le ki id, le upu faʻaulu na matou ulufale i le faʻatupuina o le ki, le ki PGP lava ia, faʻapea foʻi ma le login / password mo Sonatype. E mafai ona e setiina i latou i se vaega faʻapitoa i totonu o le fale teu oloa:
Matou te setiina suiga nei:
SONATYPE_USERNAME/SONATYPE_PASSWORD - saini/password na matou ulufale ina ua lesitala ile Sonatype
SIGNING_KEYID/SIGNING_PASSWORD — PGP ki id ma upu faataga seti i le faagasologa
Ou te fia nofo i le GPG_KEY_CONTENTS fesuiaiga i nisi auiliiliga. O le mea moni o le lolomiina matou te manaʻomia se ki PGP tumaoti. Ina ia tuu i mea lilo, sa ou faaaogaina faatonuga ma sa faia foi le tele o gaioiga.
Sei o tatou faʻailogaina la tatou ki e faʻaaoga ai le gpg: gpg --symmetric --cipher-algo AES256 9B695056.gpge ala i le ulufale i le upu faataga. E tatau ona tu'u i se fesuiaiga: SECRET_PASSPHRASE
Se'i o tatou fa'aliliuina le ki fa'ailoga fa'atupu i totonu o fa'amatalaga tusitusia e fa'aaoga ai le base64: base64 9B695056.gpg.gpg > 9B695056.txt. O le a matou tu'uina mea i totonu o le fesuiaiga: GPG_KEY_CONTENTS.
Faʻatulagaina se fale pe a tuleia le code ma fatuina se PR
Muamua e tatau ona e fatuina se faila i le aʻa o lau poloketi: .github/workflows.
Faailoga le faila i totonu, mo se faataitaiga, gradle-ci-build.yml fa'atasi ai ma mea nei:
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}}
O le a fa'atinoina lea fa'asologa o galuega pe a tulei i lala master, dev и testing, fa'apea fo'i pe a faia ni talosaga toso.
O le vaega o galuega o loʻo faʻamaonia ai laasaga e tatau ona faʻatinoina e faʻatatau i mea faʻapitoa. I lenei tulaga, o le a matou fausia i luga o le lomiga lata mai o ubuntu, faʻaaoga Java 8, ma faʻaaoga foi se masini mo Gradle eskatos/gradle-command-action@v1, lea, i le faʻaaogaina o le lomiga lata mai o le aoina, o le a faʻatautaia poloaiga o loʻo faʻamaonia i totonu arguments. Fuafuaga secrets.SONATYPE_USERNAME и secrets.SONATYPE_PASSWORD O mealilo ia na matou fesiligia muamua.
O fa'ai'uga faufale o le a fa'aalia i le Fa'asagaga fa'amau:
Autodeploy pe a fa'amatu'u se fa'asalalauga fou
Mo le autodeployment, o le a matou fatuina se faila faila galue 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}}
O le faila e toetoe lava a tutusa ma le muamua sei vagana ai le mea na tupu o le a faʻaosoina ai. I lenei tulaga, o le mea lea na tupu o le fatuina o se pine ma se igoa e amata i le v.
Aʻo leʻi faʻapipiʻiina, e manaʻomia ona aveese le ki PGP mai mea lilo ma tuʻu i totonu o le aʻa o le poloketi, faʻapea foʻi ma le faʻamaonia. O le isi mea e tatau ona tatou setiina se fesuiaiga o le siosiomaga faʻapitoa RELEASE_VERSION lea tatou te faasino i ai gradle.build faila. O nei mea uma e faia i le vaega Prepare to publish. Matou te maua la matou ki mai le GPG_KEY_CONTENTS fesuia'i, fa'aliliu i se faila gpg, ona fa'ailoga lea e ala i le tu'u i totonu o le faila. secret.gpg.
Ona sosoo ai lea ma le avanoa i le fesuiaiga faapitoa GITHUB_REF, lea e mafai ai ona matou maua le faʻamatalaga na matou faʻamaonia pe a fatuina le pine. O lenei fesuiaiga i lenei tulaga ei ai le tau refs/tags/v0.0.2 lea matou te tipi ese ai le 11 mataitusi muamua e maua ai le faʻamatalaga patino. Ma le isi, matou te faʻaogaina tulafono masani a Gradle mo le lolomiina: test publish
O le siakiina o le faʻapipiʻiina o taunuʻuga i le Sonatype repository
A mae'a ona faia le fa'asalalauga, e tatau ona amata le galuega fa'amatala i le vaega muamua. Ina ia faia lenei mea, matou te faia se faʻasalalauga:
i lenei tulaga, o le igoa fa'ailoga e tatau ona amata i le v. Afai, a maeʻa ona kiliki Faʻasalalau faʻasalalauga, o loʻo sologa lelei le galuega, e mafai ona tatou alu i Faʻatonu Faʻatonu ia mautinoa:
Na fa'aalia lea mea i totonu o le faleteuoloa o le Staging. E vave ona aliali mai i le tulaga Tatala, ona tatau lea ona faʻafeiloaʻi ma le lima i le tulaga Close e ala i le kilikiina o le ki fetaui. A uma ona siaki ua ausia uma mana'oga, o le meafaitino e alu i le tulaga Close ma ua le toe avanoa mo suiga. I lenei fomu o le a alu i MavenCentral. Afai e lelei mea uma, e mafai ona e oomi le ki tatala, ma o le a alu le meafaitino i le Sonatype repository.
Ina ia mafai ona faʻapipiʻi le mea faʻapitoa i MavenCentral, e tatau ona e fesili i ai i le galuega na matou fatuina i le amataga. E na'o le tasi le mea e te mana'omia, o lea matou te fa'asalalauina mo le taimi muamua. E leai se mea e manaʻomia e fai ai i le isi taimi, o mea uma o le a faʻapipiʻiina otometi. Na vave ona latou kiina le fa'amaopoopoina mo a'u, ae pe a ma le 5 aso na maua ai le meafaitino i MavenCentral.
Pau lava lena, na matou faʻasalalau a matou mea faʻapitoa i MavenCentral.
aoga fesoʻotaʻiga
E tutusa se tusiga, na'o le lolomiina e ala i le maven