Muchikamu chino, ndinoda kunyatsotarisisa maitiro ekudhindisa Java artifact kubva kutanga kuburikidza neGithub Actions kune Sonatype Maven Central Repository uchishandisa Gradle muvaki.
Ndakafunga kunyora chinyorwa ichi nekuda kwekushaikwa kwechidzidzo chenguva dzose munzvimbo imwechete. Ruzivo rwese rwaifanira kuunganidzwa chidimbu nechidimbu kubva kwakasiyana zvinyorwa, uyezve, kwete kutsva zvachose. Ndiani ane hanya, anogamuchirwa pasi pekati.
Kugadzira repository muSonatype
Danho rekutanga kugadzira repository muSonatype Maven Central. Nokuda kwaizvozvi tinoenda
Imwe nguva mushure mekusimbiswa, GroupId yako ichagadzirwa uye isu tinogona kuenderera kune inotevera nhanho, Gradle kumisikidza.
Kugadzirisa Gradle
Panguva yekunyora, ini handina kuwana Gradle plugins inogona kubatsira nekuburitsa iyo artifact.
Chinhu chekutanga kufunga ndeche Sonatype inodiwa pakutsikisa. Ndiwo anotevera:
- Kuvepo kwemasource codes uye JavaDoc, kureva. anofanira kupinda
-sources.jar
ΠΈ-javadoc.jar
mafaira. Sezvakataurwa muzvinyorwa, kana zvisingaite kupa makodhi makodhi kana zvinyorwa, unogona kuita dummy-sources.jar
kana-javadoc.jar
ine nyore README mukati kuti upfuure bvunzo. - Mafaira ese anofanira kusainwa nawo
GPG/PGP
uye.asc
iyo faira ine siginicha inofanira kuiswa kune imwe neimwe faira. - Kuwanika
pom
faira - Hunhu hwakarurama
groupId
,artifactId
ΠΈversion
. Iyo vhezheni inogona kuve yakasarudzika tambo uye haigone kupera nayo-SNAPSHOT
- Hupo hunodiwa
name
,description
ΠΈurl
- Kuvapo kweruzivo nezve rezinesi, vagadziri uye shanduro control system
Iyi ndiyo mitemo yakakosha inofanirwa kutevedzwa pakudhindisa. Ruzivo rwakazara rwuripo
Isu tinoshandisa izvi zvinodiwa mu build.gradle
file. Kutanga, ngatiwedzerei ruzivo rwese rwunodiwa nezvevagadziri, marezinesi, vhezheni control system, uye zvakare kuseta url, zita uye tsananguro yeprojekiti. Ngatinyorei nzira iri nyore yeizvi:
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]'
}
}
}
}
}
Tevere, iwe unofanirwa kutsanangura kuti panguva yegungano yakagadzirwa -sources.jar
ΠΈ-javadoc.jar
mafaira. Zvechikamu ichi java
unofanira kuwedzera zvinotevera:
java {
withJavadocJar()
withSourcesJar()
}
Ngatienderei kune chekupedzisira chinodiwa, kumisikidza GPG/PGP siginicha. Kuti uite izvi, batanidza iyo plugin signing
:
plugins {
id 'signing'
}
Uye wedzera chikamu:
signing {
sign publishing.publications
}
Pakupedzisira, ngatiwedzere chikamu 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
}
}
}
}
zviri sonatypeUsername ΠΈ sonatypePassword akasiyana ane login uye password yakagadzirwa panguva yekunyoresa pa
Saka iyo yekupedzisira build.gradle
zvicharatidzika seizvi:
Full build.gradle code
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]'
}
}
}
}
}
Ini ndoda kuona kuti isu tinowana iyo vhezheni kubva kune nharaunda shanduko: System.getenv('RELEASE_VERSION')
. Tichazvifumura panguva yegungano uye toitora kubva pazita reti.
PGP kiyi yekugadzira
Chimwe chezvinoda Sonatype ndechekuti mafaera ese asainwe nekiyi yeGPG/PGP. Nokuda kwaizvozvi tinoenda
- Isu tinogadzira maviri akakosha:
gpg --gen-key
, isa zita rekushandisa, e-mail, uye zvakare isa password. - Tinozviona
id
kiyi yedu nemurairo:gpg --list-secret-keys --keyid-format short
. Id ichatsanangurwa mushure mekucheka, semuenzaniso: rsa2048/9B695056 - Kuburitsa kiyi yeruzhinji kune server
https://keys.openpgp.org raira:gpg --keyserver [https://keys.openpgp.org](https://keys.openpgp.org/) --send-keys 9B695056
- Isu tinotumira kunze kiyi yakavanzika kunzvimbo yekupokana, isu tichaida mune ramangwana:
gpg --export-secret-key 9B695056 > D:\gpg\9B695056.gpg
Kumisikidza Github Zviito
Ngatienderei padanho rekupedzisira, gadzira kuvaka uye otomatiki-kushambadzira uchishandisa Github Zviito.
Github Zviito chinhu chinokutendera kuti uite otomatiki mafambiro ebasa nekuita yakazara CI / CD kutenderera. Kuvaka, kuyedza, uye kuendesa kunogona kukonzereswa nezviitiko zvakasiyana: kodhi kusunda, kuburitsa kusikwa, kana nyaya. Izvi zvinoshanda zvachose zvemahara kune veruzhinji repositori.
Muchikamu chino, ini ndinokuratidza nzira yekumisikidza kuvaka uye kusunda kodhi uye kuendesa kune Sonatype repository pakuburitswa, pamwe nekumisikidza zvakavanzika.
Tinoisa zvakavanzika
Kuti tiunganidze otomatiki uye kutumira, tinoda huwandu hwezvakavanzika, senge kiyi id, password yatakaisa pakugadzira kiyi, kiyi yePGP pachayo, uye Sonatype login/password. Iwe unogona kuzvimisa muchikamu chakakosha mune repository marongero:
Isu tinogadzira zvinotevera zvakasiyana:
- SONATYPE_USERNAME / SONATYPE_PASSWORD - login / password yatakapinda tichinyoresa neSonatype
- SIGNING_KEYID/SIGNING_PASSWORD - PGP kiyi id uye password yakaiswa panguva yechizvarwa.
Ini ndinoda kugara pane iyo GPG_KEY_CONTENTS chinja mune zvakadzama. Icho chokwadi ndechekuti pakushambadza tinoda yakavanzika PGP kiyi. Kuti ndizvitumire mune zvakavanzika, ndakashandisa
- Ngatinyorei kiyi yedu ne gpg:
gpg --symmetric --cipher-algo AES256 9B695056.gpg
nekuisa password. Inofanirwa kuiswa mushanduko: SECRET_PASSPHRASE - Ngatishandurei kiyi yakavharidzirwa kuita fomu remavara tichishandisa base64:
base64 9B695056.gpg.gpg > 9B695056.txt
. Zvirimo zvichaiswa mune vhezheni: GPG_KEY_CONTENTS.
Vaka setup paunenge uchisundidzira kodhi uye kugadzira PR
Kutanga iwe unofanirwa kugadzira folda mumudzi weprojekiti yako: .github/workflows
.
Mariri, maka iyo faira, semuenzaniso, gradle-ci-build.yml
nezvinotevera zvirimo:
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}}
Uku kufambiswa kwebasa kuchaitwa kana uchisundidzira kumapazi master
, dev
ΠΈ testing
, zvakare pakugadzira zvikumbiro zvekudhonza.
Chikamu chemabasa chinotsanangura matanho anofanirwa kuitwa pazviitiko zvakatsanangurwa. Muchiitiko ichi, tichavaka pane yazvino vhezheni ye ubuntu, shandisa Java 8, uye zvakare shandisa iyo plugin yeGradle. eskatos/gradle-command-action@v1
iyo, uchishandisa yazvino vhezheni yemuvaki, inomhanyisa mirairo yakataurwa mukati arguments
. Variables secrets.SONATYPE_USERNAME
ΠΈ secrets.SONATYPE_PASSWORD
izvi ndizvo zvakavanzika zvatakabvunza kare.
Mhedzisiro yekuvaka icharatidzwa muActions tab:
Auto-deploy kana kuburitswa kutsva kwaburitswa
Ngatigadzire yakaparadzana yekufambisa faira ye autodeploy 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}}
Iro faira rinenge rakafanana nerekare, kunze kwechiitiko icho chichakonzerwa. Pakadai, ichi ndicho chiitiko chekugadzira tag ine zita rinotanga na v.
Tisati tatumirwa, isu tinofanirwa kuburitsa kiyi yePGP kubva pazvakavanzika toiisa mumudzi weprojekiti, pamwe nekuibvisa. Tevere, isu tinofanirwa kuseta yakakosha nharaunda inoshanduka RELEASE_VERSION
izvo zvatinoreva gradle.build
file. Zvose izvi zvinoitwa muchikamu Prepare to publish
. Isu tinotora kiyi yedu kubva kuGPG_KEY_CONTENTS chinja, tishandure kuita gpg faira, wobva warinyora nekuisa mufaira. secret.gpg
.
Zvadaro, tinotendeukira kune yakasiyana yakasiyana GITHUB_REF
, kubva kwatinogona kuwana shanduro yatinoseta kana tichigadzira tag. Kusiyana uku kunokosha munyaya iyi. refs/tags/v0.0.2
kubva patakacheka mavara gumi nerimwe ekutanga kuti tiwane chaiyo vhezheni. Tevere, isu tinoshandisa yakajairwa Gradle mirairo yekushambadzira: test publish
Kutarisa kutumirwa kunoguma muSonatype repository
Mushure mekunge kusunungurwa kwagadzirwa, kufambiswa kwebasa kunotsanangurwa muchikamu chekare kunofanira kutanga. Kuti uite izvi, gadzira kuburitswa:
zita retag rinofanira kutanga na v. Kana, mushure mekudzvanya Publish kuburitswa, kufambiswa kwebasa kunopera, tinogona kuenda
Iyo artifact yakaonekwa muStaging repository. Inobva yangooneka muOpen status, saka inofanira kuendeswa nemaoko kuChimiro Chekuvhara nekudzvanya bhatani rakakodzera. Mushure mekutarisa kuti zvese zvinodiwa zvinosangana here, iyo artifact inopinda muChimiro cheKuvhara uye haichawanikwi kuti igadziriswe. Mune iyi fomu, ichaguma muMavenCentral. Kana zvese zvakanaka, unogona kudzvanya bhatani rusununguko, uye chigadzirwa chacho chinozoguma chiri muSonatype repository.
Kuti iyo artefact ipinde muMavenCentral, iwe unofanirwa kuibvunza mune iro basa iro ratakagadzira pakutanga. Iwe unongoda kuita izvi kamwe chete, saka tinoburitsa kekutanga. Munguva dzinotevera, izvi hazvidiwe, zvese zvinozowiriraniswa otomatiki. Vakandibatidza kuwiriranisa nekukurumidza, asi zvakatora anenge mazuva mashanu kuti chigadzirwa chacho chiwanikwe muMavenCentral.
Ndizvo chete, isu takaburitsa chigadzirwa chedu muMavenCentral.
Useful links
- Zvakafanana
chinyorwa , buditsa chete kuburikidza nemaven - Staging
repository Sonatype Jira Sonatype umo kugadzira basaMuenzaniso: repository apo zvese zvakamisikidzwa
Source: www.habr.com