เช เชฒเซเชเชฎเชพเช, เชนเซเช เชเซเชฐเซเชกเชฒ เชฌเชฟเชฒเซเชกเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเซเชจเชพเชเชพเชเชช เชฎเซเชตเซเชจ เชธเซเชจเซเชเซเชฐเชฒ เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เชเซเชฅเชฌ เชเชเซเชถเชจ เชฆเซเชตเชพเชฐเชพ เชถเชฐเซเชเชคเชฅเซ เชเชพเชตเชพ เชเชฐเซเชเชฟเชซเซเชเซเช เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพเชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชจเชเซเชเชฅเซ เชเซเชตเชพ เชฎเชพเชเชเซ เชเซเช.
เชเช เชเชเซเชฏเชพเช เชธเชพเชฎเชพเชจเซเชฏ เชเซเชฏเซเชเซเชฐเซเชฏเชฒ เชจ เชนเซเชตเชพเชจเซ เชเชพเชฐเชฃเซ เชฎเซเช เช เชฒเซเช เชฒเชเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช. เชคเชฎเชพเชฎ เชฎเชพเชนเชฟเชคเซ เชตเชฟเชตเชฟเชง เชธเซเชคเซเชฐเซเชคเซเชฎเชพเชเชฅเซ เชเซเชเชกเซ-เชเซเชเชกเซ เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชจเซ เชนเชคเซ, เชตเชงเซเชฎเชพเช, เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชคเชพเชเซ เชจเชฅเซ. เชเซเชฃ เชเชพเชณเชเซ เชฒเซ เชเซ, เชฌเชฟเชฒเชพเชกเซ เชนเซเช เชณ เชธเซเชตเชพเชเชค เชเซ.
Sonatype เชฎเชพเช เชญเชเชกเชพเชฐ เชฌเชจเชพเชตเชตเซเช
เชชเซเชฐเชฅเชฎ เชชเชเชฒเซเช เช เชธเซเชจเชพเชเชพเชเชช เชฎเซเชตเซเชจ เชธเซเชจเซเชเซเชฐเชฒเชฎเชพเช เชฐเซเชชเซเชเซเชเชฐเซ เชฌเชจเชพเชตเชตเชพเชจเซเช เชเซ. เช เชฎเชพเชเซ เช
เชฎเซ เชเชเช เชเซเช
เชเชจเซเชซเชฐเซเชฎเซเชถเชจ เชชเชเซ เช เชฎเซเช เชธเชฎเชฏ เชชเชเซ, เชคเชฎเชพเชฐเซ เชเซเชฐเซเชชเชเชเชกเซ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ เช เชจเซ เช เชฎเซ เชเชเชณเชจเชพ เชชเชเชฒเชพ, เชเซเชฐเซเชกเชฒ เชเชจเซเชซเชฟเชเชฐเซเชถเชจ เชชเชฐ เชเชเชณ เชตเชงเซ เชถเชเซเช เชเซเช.
Gradle เชฐเซเชชเชฐเซเชเชพเชเชเชฟเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
เชฒเซเชเชจ เชธเชฎเชฏเซ, เชฎเชจเซ เชเซเชฐเซเชกเชฒ เชชเซเชฒเชเชฟเชจเซเชธ เชฎเชณเซเชฏเชพเช เชจเชฅเซ เชเซ เชเชฐเซเชเชฟเชซเซเชเซเช เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชถเชเซ.
เชชเซเชฐเชเชพเชถเชจ เชฎเชพเชเซ เชธเซเชจเชพเชเชพเชเชชเชจเซ เชเชฐเซเชฐเชฟเชฏเชพเชคเซ เชถเซเชงเชตเชพ เชฎเชพเชเซเชจเซ เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซ เชเซ. เชคเซเช เชจเซเชเซ เชฎเซเชเชฌ เชเซ.
- เชธเซเชคเซเชฐเซเชค เชเซเชกเซเชธ เช
เชจเซ JavaDocเชจเซ เชเชชเชฒเชฌเซเชงเชคเชพ, เชเชเชฒเซ เชเซ. เชนเชพเชเชฐเซ เชเชชเชตเซ เชเซเชเช
-sources.jar
ะธ-javadoc.jar
เชซเชพเชเชฒเซ. เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃเชฎเชพเช เชเชฃเชพเชตเซเชฏเชพ เชฎเซเชเชฌ, เชเซ เชธเซเชฐเซเชค เชเซเชก เช เชฅเชตเชพ เชฆเชธเซเชคเชพเชตเซเชเซเชเชฐเชฃ เชชเซเชฐเชฆเชพเชจ เชเชฐเชตเซเช เชถเชเซเชฏ เชจ เชนเซเชฏ, เชคเซ เชคเชฎเซ เชกเชฎเซ เชฌเชจเชพเชตเซ เชถเชเซ เชเซ-sources.jar
เช เชฅเชตเชพ-javadoc.jar
เชเซเชธเซเช เชชเชพเชธ เชเชฐเชตเชพ เชฎเชพเชเซ เช เชเชฆเชฐ เชเช เชธเชฐเชณ README เชธเชพเชฅเซ. - เชฌเชงเซ เชซเชพเชเชฒเซ เชธเชพเชฅเซ เชธเชนเซ เชเชฐเชตเซ เชเชตเชถเซเชฏเช เชเซ
GPG/PGP
เช เชจเซ.asc
เชฆเชฐเซเช เชซเชพเชเชฒ เชฎเชพเชเซ เชธเชนเซ เชงเชฐเชพเชตเชคเซ เชซเชพเชเชฒเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชตเซ เชเชตเชถเซเชฏเช เชเซ. - เชชเซเชฐเชพเชชเซเชฏเชคเชพ
pom
เชซเชพเชเชฒ - เชฏเซเชเซเชฏ เชฎเซเชฒเซเชฏเซ
groupId
,artifactId
ะธversion
. เชธเชเชธเซเชเชฐเชฃ เชเช เชฎเชจเชธเซเชตเซ เชธเซเชเซเชฐเชฟเชเช เชนเซเช เชถเชเซ เชเซ เช เชจเซ เชคเซเชจเซ เชธเชพเชฅเซ เชธเชฎเชพเชชเซเชค เชฅเช เชถเชเชคเซเช เชจเชฅเซ-SNAPSHOT
- เชนเชพเชเชฐเซ เชเชฐเซเชฐเซ
name
,description
ะธurl
- เชฒเชพเชเชธเชจเซเชธ, เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเช เช เชจเซ เชธเชเชธเซเชเชฐเชฃ เชจเชฟเชฏเชเชคเซเชฐเชฃ เชธเชฟเชธเซเชเชฎ เชตเชฟเชถเซเชจเซ เชฎเชพเชนเชฟเชคเซเชจเซ เชนเชพเชเชฐเซ
เช เชฎเซเชณเชญเซเชค เชจเชฟเชฏเชฎเซ เชเซ เชเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเชคเซ เชตเชเชคเซ เช
เชจเซเชธเชฐเชตเชพ เชเชตเชถเซเชฏเช เชเซ. เชธเชเชชเซเชฐเซเชฃ เชฎเชพเชนเชฟเชคเซ เชเชชเชฒเชฌเซเชง
เช
เชฎเซ เช เชเชตเชถเซเชฏเชเชคเชพเชเชจเซ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเซเช เชเซเช build.gradle
เชซเชพเชเชฒ เชชเซเชฐเชฅเชฎ, เชเชพเชฒเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเช, เชฒเชพเชเชธเชจเซเชธ, เชธเชเชธเซเชเชฐเชฃ เชจเชฟเชฏเชเชคเซเชฐเชฃ เชธเชฟเชธเซเชเชฎ เชตเชฟเชถเซเชจเซ เชฌเชงเซ เชเชฐเซเชฐเซ เชฎเชพเชนเชฟเชคเซ เชเชฎเซเชฐเซเช เช
เชจเซ เชชเซเชฐเซเชเซเชเซเชเชจเซเช url, เชจเชพเชฎ เช
เชจเซ เชตเชฐเซเชฃเชจ เชชเชฃ เชธเซเช เชเชฐเซเช. เชเชพเชฒเซ เช เชฎเชพเชเซ เชเช เชธเชฐเชณ เชชเชฆเซเชงเชคเชฟ เชฒเชเซเช:
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]'
}
}
}
}
}
เชเชเชณ, เชคเชฎเชพเชฐเซ เชจเชฟเชฐเซเชฆเชฟเชทเซเช เชเชธเซเชฎเซเชฌเชฒเซ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชคเซ เชจเชฟเชฐเซเชฆเชฟเชทเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ -sources.jar
ะธ-javadoc.jar
เชซเชพเชเชฒเซ. เช เชตเชฟเชญเชพเช เชฎเชพเชเซ java
เชคเชฎเชพเชฐเซ เชจเซเชเซเชจเชพ เชเชฎเซเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ:
java {
withJavadocJar()
withSourcesJar()
}
เชเชพเชฒเซ เชเซเชฒเซเชฒเซ เชเชฐเซเชฐเชฟเชฏเชพเชค เชคเชฐเชซ เชเชเชณ เชตเชงเซเช, GPG/PGP เชนเชธเซเชคเชพเชเซเชทเชฐ เชเซเช เชตเซเช. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชชเซเชฒเชเชเชจเชจเซ เชเชจเซเชเซเช เชเชฐเซ signing
:
plugins {
id 'signing'
}
เช เชจเซ เชเช เชตเชฟเชญเชพเช เชเชฎเซเชฐเซ:
signing {
sign publishing.publications
}
เชเซเชฒเซเชฒเซ, เชเชพเชฒเซ เชเช เชตเชฟเชญเชพเช เชเชฎเซเชฐเซเช 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
}
}
}
}
เชคเซ sonatypeเชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชจเชพเชฎ ะธ sonatypeเชชเชพเชธเชตเชฐเซเชก เชชเชฐ เชจเซเชเชงเชฃเซ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชฌเชจเชพเชตเซเชฒ เชฒเซเชเชฟเชจ เช
เชจเซ เชชเชพเชธเชตเชฐเซเชก เชงเชฐเชพเชตเชคเชพ เชเชฒ
เชเชฎ เชซเชพเชเชจเชฒ 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]'
}
}
}
}
}
เชนเซเช เชจเซเชเชงเชตเชพ เชฎเชพเชเชเซ เชเซเช เชเซ เช
เชฎเชจเซ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซเชฐเซเชเชฌเชฒเชฎเชพเชเชฅเซ เชธเชเชธเซเชเชฐเชฃ เชฎเชณเซ เชเซ: System.getenv('RELEASE_VERSION')
. เช
เชฎเซ เชคเซเชจเซ เชเชธเซเชฎเซเชฌเชฒเซ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชเชเชพเชเชฐ เชเชฐเซเชถเซเช เช
เชจเซ เชคเซเชจเซ เชเซเช เชจเชพเชฎเชฎเชพเชเชฅเซ เชฒเชเชถเซเช.
เชชเซเชเซเชชเซ เชเซ เชเชจเชฐเซเชถเชจ
Sonatype เชจเซ เชเชตเชถเซเชฏเชเชคเชพเชเชฎเชพเชเชจเซ เชเช เช เชเซ เชเซ เชฌเชงเซ เชซเชพเชเชฒเซ GPG/PGP เชเซ เชตเชกเซ เชธเชนเซ เชเชฐเชตเซ. เช เชฎเชพเชเซ เช
เชฎเซ เชเชเช เชเซเช
- เช
เชฎเซ เชเซ เชเซเชกเซ เชฌเชจเชพเชตเซเช เชเซเช:
gpg --gen-key
, เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชจเชพเชฎ, เช-เชฎเซเชฒ เชฆเชพเชเชฒ เชเชฐเซ เช เชจเซ เชชเชพเชธเชตเชฐเซเชก เชชเชฃ เชธเซเช เชเชฐเซ. - เชถเซเชงเซ เชเชพเชขเชตเซเช
id
เชเชฆเซเชถ เชธเชพเชฅเซ เช เชฎเชพเชฐเซ เชเซ:gpg --list-secret-keys --keyid-format short
. เชเชเชกเซ เชธเซเชฒเซเชถ เชชเชเซ เชจเชฟเชฐเซเชฆเชฟเชทเซเช เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ: rsa2048/9B695056 - เชธเชฐเซเชตเชฐ เชชเชฐ เชเชพเชนเซเชฐ เชเซ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
https://keys.openpgp.org เชเชฆเซเชถ:gpg --keyserver [https://keys.openpgp.org](https://keys.openpgp.org/) --send-keys 9B695056
- เช
เชฎเซ เชเซเชชเซเชค เชเซเชจเซ เชฎเชจเชธเซเชตเซ เชธเซเชฅเชณเซ เชจเชฟเชเชพเชธ เชเชฐเซเช เชเซเช, เช
เชฎเชจเซ เชญเชตเชฟเชทเซเชฏเชฎเชพเช เชคเซเชจเซ เชเชฐเซเชฐ เชชเชกเชถเซ:
gpg --export-secret-key 9B695056 > D:\gpg\9B695056.gpg
Github เชเซเชฐเชฟเชฏเชพเช เชธเซเชฏเซเชเชฟเชค เชเชฐเซ เชฐเชนเซเชฏเชพ เชเซเช
เชเชพเชฒเซ เช
เชเชคเชฟเชฎ เชคเชฌเชเซเชเชพเชฎเชพเช เชเชเชณ เชตเชงเซเช, เชฌเชฟเชฒเซเชก เชธเซเช เชเชฐเซ เช
เชจเซ เชเซเชฅเชฌ เชเซเชฐเชฟเชฏเชพเชเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชธเซเชตเชคเช-เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซเช.
เชเซเชฅเชฌ เชเชเซเชถเชจเซเชธ เช เชเช เชตเชฟเชถเซเชทเชคเชพ เชเซ เชเซ เชคเชฎเชจเซ เชธเชเชชเซเชฐเซเชฃ CI/CD เชเชเซเชฐ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเซเชจเซ เชตเชฐเซเชเชซเซเชฒเซเชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเชตเชพเชจเซ เชฎเชเชเซเชฐเซ เชเชชเซ เชเซ. เชฌเชฟเชฒเซเชก, เชเซเชธเซเช เช
เชจเซ เชกเชฟเชชเซเชฒเซเชฏ เชตเชฟเชตเชฟเชง เชเชตเซเชจเซเชเซเชธ เชฆเซเชตเชพเชฐเชพ เชเซเชฐเชฟเชเชฐ เชฅเช เชถเชเซ เชเซ: เชเซเชก เชชเซเชถ, เชฐเชฟเชฒเซเช เชฌเชจเชพเชตเช เช
เชฅเชตเชพ เชธเชฎเชธเซเชฏเชพเช. เช เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชเชพเชนเซเชฐ เชญเชเชกเชพเชฐเซ เชฎเชพเชเซ เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชฎเชซเชค เชเซ.
เช เชตเชฟเชญเชพเชเชฎเชพเช, เชนเซเช เชคเชฎเชจเซ เชฌเชคเชพเชตเซเชถ เชเซ เชฌเชฟเชฒเซเชก เช เชจเซ เชชเซเชถ เชเซเชก เชเซเชตเซ เชฐเซเชคเซ เชธเซเช เชเชฐเชตเซ เช เชจเซ เชฐเชฟเชฒเซเช เชชเชฐ เชธเซเชจเชพเชเชพเชเชช เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เชเซเชตเซ เชฐเซเชคเซ เชเชฎเชพเชตเชตเซเช, เชคเซเชฎเช เชฐเชนเชธเซเชฏเซ เชเซเชตเซ เชฐเซเชคเซ เชธเซเช เชเชฐเชตเซ.
เช เชฎเซ เชฐเชนเชธเซเชฏเซ เชธเซเช เชเชฐเซเช เชเซเช
เชธเซเชตเชฏเชเชธเชเชเชพเชฒเชฟเชค เชเชธเซเชฎเซเชฌเชฒเซ เช เชจเซ เชเชฎเชพเชตเช เชฎเชพเชเซ, เช เชฎเชจเซ เชธเชเชเซเชฏเชพเชฌเชเชง เชเซเชชเซเชค เชฎเซเชฒเซเชฏเซเชจเซ เชเชฐเซเชฐ เชนเซเชฏ เชเซ, เชเซเชฎ เชเซ เชเซ id, เชเซ เชเชจเชฐเซเช เชเชฐเชคเซ เชตเชเชคเซ เช เชฎเซ เชฆเชพเชเชฒ เชเชฐเซเชฒ เชชเชพเชธเชตเชฐเซเชก, PGP เชเซ เชชเซเชคเซ เช เชจเซ Sonatype เชฒเซเชเชฟเชจ/เชชเชพเชธเชตเชฐเซเชก. เชคเชฎเซ เชคเซเชฎเชจเซ เชฐเชฟเชชเซเชเซเชเชฐเซ เชธเซเชเชฟเชเชเซเชธเชฎเชพเช เชตเชฟเชถเชฟเชทเซเช เชตเชฟเชญเชพเชเชฎเชพเช เชธเซเช เชเชฐเซ เชถเชเซ เชเซ:
เช เชฎเซ เชจเซเชเซเชจเชพ เชเชฒเซ เชธเซเช เชเชฐเซเช เชเซเช:
- SONATYPE_USERNAME / SONATYPE_PASSWORD - เชฒเซเชเชฟเชจ / เชชเชพเชธเชตเชฐเซเชก เชเซ เช เชฎเซ Sonatype เชธเชพเชฅเซ เชจเซเชเชงเชฃเซ เชเชฐเชคเซ เชตเชเชคเซ เชฆเชพเชเชฒ เชเชฐเซเชฏเซ เชนเชคเซ
- SIGNING_KEYID/SIGNING_PASSWORD โ เชเชจเชฐเซเชถเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ PGP เชเซ เชเชเชกเซ เช เชจเซ เชชเชพเชธเชตเชฐเซเชก เชธเซเช.
เชนเซเช เชตเชงเซ เชตเชฟเชเชคเชฎเชพเช GPG_KEY_CONTENTS เชเชฒ เชชเชฐ เชฐเชนเซเชตเชพ เชฎเชพเชเชเซ เชเซเช. เชนเชเซเชเชค เช เชเซ เชเซ เชชเซเชฐเชเชพเชถเชจ เชฎเชพเชเซ เช
เชฎเชจเซ เชเชพเชจเชเซ PGP เชเซเชจเซ เชเชฐเซเชฐ เชเซ. เชคเซเชจเซ เชฐเชนเชธเซเชฏเซเชฎเชพเช เชชเซเชธเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชฎเซเช เชคเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเชฏเซ
- เชเชพเชฒเซ เชเชชเชฃเซ เชเซเชจเซ gpg เชตเชกเซ เชเชจเซเชเซเชฐเชฟเชชเซเช เชเชฐเซเช:
gpg --symmetric --cipher-algo AES256 9B695056.gpg
เชชเชพเชธเชตเชฐเซเชก เชฆเชพเชเชฒ เชเชฐเซเชจเซ. เชคเซ เชเชฒเชฎเชพเช เชฎเซเชเชตเซเช เชเซเชเช: SECRET_PASSPHRASE - เชเชพเชฒเซ เชฌเซเช 64 เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชชเซเชฐเชพเชชเซเชค เชฅเชฏเซเชฒ เชเชจเซเชเซเชฐเชฟเชชเซเชเซเชก เชเซเชจเซ เชเซเชเซเชธเซเช เชซเซเชฐเซเชฎเชฎเชพเช เช
เชจเซเชตเชพเชฆเชฟเชค เชเชฐเซเช:
base64 9B695056.gpg.gpg > 9B695056.txt
. เชธเชพเชฎเชเซเชฐเซเชจเซ เชเชฒเชฎเชพเช เชฎเซเชเชตเชพเชฎเชพเช เชเชตเชถเซ: GPG_KEY_CONTENTS.
เชเซเชกเชจเซ เชฆเชฌเชพเชฃ เชเชฐเชคเซ เชตเชเชคเซ เช เชจเซ PR เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ เชธเซเชเช เชช เชฌเชจเชพเชตเซ
เชชเซเชฐเชฅเชฎ เชคเชฎเชพเชฐเซ เชคเชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเชเชจเชพ เชฐเซเชเชฎเชพเช เชเช เชซเซเชฒเซเชกเชฐ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ: .github/workflows
.
เชคเซเชฎเชพเช, เชซเชพเชเชฒเชจเซ เชฎเชพเชฐเซเช เช
เชช เชเชฐเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, gradle-ci-build.yml
เชจเซเชเซเชจเซ เชธเชพเชฎเชเซเชฐเซ เชธเชพเชฅเซ:
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}}
เชถเชพเชเชพเช เชชเชฐ เชฆเชฌเชพเชฃ เชเชฐเชคเซ เชตเชเชคเซ เช เชตเชฐเซเชเชซเซเชฒเซ เชเชฒเชพเชตเชตเชพเชฎเชพเช เชเชตเชถเซ master
, dev
ะธ testing
เชชเซเชฒ เชตเชฟเชจเชเชคเซเช เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ เชชเชฃ.
เชเซเชฌเซเชธ เชตเชฟเชญเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชเชตเซเชจเซเชเซเชธ เชชเชฐ เช
เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพเชจเชพ เชชเชเชฒเชพเชเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, เช
เชฎเซ เชเชฌเซเชจเซเชเซเชจเชพ เชจเชตเซเชจเชคเชฎ เชธเชเชธเซเชเชฐเชฃ เชชเชฐ เชจเชฟเชฐเซเชฎเชพเชฃ เชเชฐเซเชถเซเช, เชเชพเชตเชพ 8 เชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช เช
เชจเซ เชเซเชฐเซเชกเชฒ เชฎเชพเชเซ เชชเซเชฒเชเชเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช. eskatos/gradle-command-action@v1
เชเซ, เชฌเชฟเชฒเซเชกเชฐเชจเชพ เชจเชตเซเชจเชคเชฎ เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เชคเซเชฎเชพเช เชเชฒเซเชฒเซเชเชฟเชค เชเชฆเซเชถเซ เชเชฒเชพเชตเชถเซ arguments
. เชเชฒเซ secrets.SONATYPE_USERNAME
ะธ secrets.SONATYPE_PASSWORD
เช เชคเซ เชฐเชนเชธเซเชฏเซ เชเซ เชเซ เช
เชฎเซ เช
เชเชพเช เชชเซเชเซเชฏเชพ เชนเชคเชพ.
เชฌเชฟเชฒเซเชก เชชเชฐเชฟเชฃเชพเชฎเซ เชเซเชฐเชฟเชฏเชพเช เชเซเชฌเชฎเชพเช เชชเซเชฐเชคเชฟเชฌเชฟเชเชฌเชฟเชค เชฅเชถเซ:
เชเซเชฏเชพเชฐเซ เชจเชตเซ เชฐเซเชฒเซเช เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ เชธเซเชตเชคเช เชเชฎเชพเชตเช เชเชฐเซ
เชเชพเชฒเซ 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}}
เชซเชพเชเชฒ เชฒเชเชญเช เชชเชพเชเชฒเซ เชซเชพเชเชฒ เชเซเชตเซ เช เชเซ, เชธเชฟเชตเชพเชฏ เชเซ เชคเซ เชเชตเซเชจเซเช เชเซ เชเซเชฎเชพเช เชคเซ เชเซเชฐเชฟเชเชฐ เชฅเชถเซ. เช เชเชฟเชธเซเชธเชพเชฎเชพเช, v เชฅเซ เชถเชฐเซ เชฅเชคเชพ เชจเชพเชฎ เชธเชพเชฅเซ เชเซเช เชฌเชจเชพเชตเชตเชพเชจเซ เช เชเชเชจเชพ เชเซ.
เชเชฎเชพเชตเช เชชเชนเซเชฒเชพเช, เช
เชฎเชพเชฐเซ เชฐเชนเชธเซเชฏเซเชฎเชพเชเชฅเซ PGP เชเซ เชเชพเชขเชตเชพเชจเซ เช
เชจเซ เชคเซเชจเซ เชชเซเชฐเซเชเซเชเซเชเชจเชพ เชฐเซเชเชฎเชพเช เชฎเซเชเชตเชพเชจเซ เชธเชพเชฅเซ เชธเชพเชฅเซ เชคเซเชจเซ เชกเชฟเชเซเชฐเชฟเชชเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชเชเชณ, เชเชชเชฃเซ เชตเชฟเชถเชฟเชทเซเช เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชเชฒ เชธเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ RELEASE_VERSION
เชเซเชจเซ เชเชชเชฃเซ เชเชฒเซเชฒเซเช เชเชฐเซเช เชเซเช gradle.build
เชซเชพเชเชฒ เช เชฌเชงเซเช เชตเชฟเชญเชพเชเชฎเชพเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ Prepare to publish
. เช
เชฎเซ GPG_KEY_CONTENTS เชตเซเชฐเซเชเชฌเชฒเชฎเชพเชเชฅเซ เช
เชฎเชพเชฐเซ เชเซ เชฎเซเชณเชตเซเช เชเซเช, เชคเซเชจเซ gpg เชซเชพเชเชฒเชฎเชพเช เช
เชจเซเชตเชพเชฆเชฟเชค เชเชฐเซเช เชเซเช, เชชเชเซ เชคเซเชจเซ เชซเชพเชเชฒเชฎเชพเช เชฎเซเชเซเชจเซ เชคเซเชจเซ เชกเชฟเชเซเชฐเชฟเชชเซเช เชเชฐเซเช เชเซเช. secret.gpg
.
เชเชเชณ, เชเชชเชฃเซ เชตเชฟเชถเชฟเชทเซเช เชเชฒ เชคเชฐเชซ เชตเชณเซเช เชเซเช GITHUB_REF
, เชเซเชฎเชพเชเชฅเซ เชเชชเชฃเซ เชเซเช เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ เชธเซเช เชเชฐเซเชฒ เชตเชฐเซเชเชจ เชฎเซเชณเชตเซ เชถเชเซเช เชเซเช. เช เชเชฒ เช เชเชฟเชธเซเชธเชพเชฎเชพเช เชธเชเชฌเชเชงเชฟเชค เชเซ. refs/tags/v0.0.2
เชเซเชฎเชพเชเชฅเซ เช
เชฎเซ เชเซเชเซเชเชธ เชธเชเชธเซเชเชฐเชฃ เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ เชชเซเชฐเชฅเชฎ 11 เช
เชเซเชทเชฐเซเชจเซ เชเชพเชชเซ เชจเชพเชเซเชฏเชพ. เชเชเชณ, เช
เชฎเซ เชชเซเชฐเชเชพเชถเชจ เชฎเชพเชเซ เชชเซเชฐเชฎเชพเชฃเชญเซเชค Gradle เชเชฆเซเชถเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช: test publish
เชธเซเชจเชพเชเชพเชเชช เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเช เชเชฎเชพเชตเชเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ เชคเชชเชพเชธเซ เชฐเชนเซเชฏเชพ เชเซเช
เชเชเชตเชพเชฐ เชฐเชฟเชฒเซเช เชฅเช เชเชพเชฏ, เชชเชเซ เช เชเชพเชเชจเชพ เชตเชฟเชญเชพเชเชฎเชพเช เชตเชฐเซเชฃเชตเซเชฒ เชตเชฐเซเชเชซเซเชฒเซ เชถเชฐเซ เชฅเชตเซ เชเซเชเช. เช เชเชฐเชตเชพ เชฎเชพเชเซ, เชเช เชชเซเชฐเชเชพเชถเชจ เชฌเชจเชพเชตเซ:
เชเซเช เชจเชพเชฎ v เชฅเซ เชถเชฐเซ เชฅเชตเซเช เชเซเชเช. เชเซ, เชชเซเชฐเชเชพเชถเชจ เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซเชฏเชพ เชชเชเซ, เชตเชฐเซเชเชซเซเชฒเซ เชธเชซเชณเชคเชพเชชเซเชฐเซเชตเช เชชเซเชฐเซเชฃ เชฅเชพเชฏ เชเซ, เชคเซ เช
เชฎเซ เชเช เชถเชเซเช เชเซเช
เช เชเชฐเซเชเชฟเชซเซเชเซเช เชธเซเชเซเชเชฟเชเช เชฐเชฟเชชเซเชเซเชเชฐเซเชฎเชพเช เชฆเซเชเชพเชฏ เชเซ. เชคเซ เชคเชฐเชค เช เชเชชเชจ เชธเซเชเซเชเชธเชฎเชพเช เชฆเซเชเชพเชฏ เชเซ, เชชเชเซ เชคเซเชจเซ เชฏเซเชเซเชฏ เชฌเชเชจ เชฆเชฌเชพเชตเซเชจเซ เชฎเซเชจเซเชฏเซเช เชฒเซ เชเซเชฒเซเช เชธเซเชเซเชเชธเชฎเชพเช เชเซเชฐเชพเชจเซเชธเชซเชฐ เชเชฐเชตเซเช เชเชตเชถเซเชฏเช เชเซ. เชฌเชงเซ เชเชตเชถเซเชฏเชเชคเชพเช เชชเซเชฐเซ เชฅเช เชเซ เชเซ เชเซเชฎ เชคเซ เชคเชชเชพเชธเซเชฏเชพ เชชเชเซ, เชเชฐเซเชเชฟเชซเซเชเซเช เชฌเชเชง เชธเซเชฅเชฟเชคเชฟเชฎเชพเช เชเชพเชฏ เชเซ เช เชจเซ เชคเซ เชนเชตเซ เชซเซเชฐเชซเชพเชฐ เชฎเชพเชเซ เชเชชเชฒเชฌเซเชง เชจเชฅเซ. เช เชธเซเชตเชฐเซเชชเชฎเชพเช, เชคเซ MavenCentral เชฎเชพเช เชธเชฎเชพเชชเซเชค เชฅเชถเซ. เชเซ เชฌเชงเซเช เชฌเชฐเชพเชฌเชฐ เชเซ, เชคเซ เชคเชฎเซ เชฌเชเชจ เชฆเชฌเชพเชตเซ เชถเชเซ เชเซ เชชเซเชฐเชเชพเชถเชจ, เช เชจเซ เชเชฐเซเชเชฟเชซเซเชเซเช เชธเซเชจเชพเชเชพเชเชช เชฐเซเชชเซเชเซเชเชฐเซเชฎเชพเช เชธเชฎเชพเชชเซเชค เชฅเชถเซ.
เชฎเซเชตเชจเชธเซเชจเซเชเซเชฐเชฒเชฎเชพเช เชเชฐเซเชเชฟเชซเซเชเซเช เชฎเซเชณเชตเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ เชคเซ เชเชพเชฐเซเชฏเชฎเชพเช เชชเซเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชเซ เช เชฎเซ เชเซเชฌ เชถเชฐเซเชเชคเชฎเชพเช เชฌเชจเชพเชตเซเชฒ เชเซ. เชคเชฎเชพเชฐเซ เช เชฎเชพเชคเซเชฐ เชเช เช เชตเชพเชฐ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชคเซเชฅเซ เช เชฎเซ เชชเซเชฐเชฅเชฎ เชตเชเชค เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซเช เชเซเช. เชชเชเซเชจเชพ เชธเชฎเชฏเชฎเชพเช, เช เชเชฐเซเชฐเซ เชจเชฅเซ, เชฌเชงเซเช เชเชชเชฎเซเชณเซ เชธเชฟเชเชเซเชฐเชจเชพเชเช เชฅเชถเซ. เชคเซเชเช เชฎเชพเชฐเชพ เชฎเชพเชเซ เชเชกเชชเชฅเซ เชธเชฟเชเชเซเชฐเชจเชพเชเชเซเชถเชจ เชเชพเชฒเซ เชเชฐเซเชฏเซเช, เชชเชฐเชเชคเซ เชเชฐเซเชเชฟเชซเซเชเซเชเชจเซ MavenCentral เชฎเชพเช เชเชชเชฒเชฌเซเชง เชฅเชตเชพเชฎเชพเช เชฒเชเชญเช 5 เชฆเชฟเชตเชธ เชฒเชพเชเซเชฏเชพ.
เชเชเชฒเซเช เช, เช เชฎเซ เชฎเซเชตเชจเชธเซเชจเซเชเซเชฐเชฒเชฎเชพเช เช เชฎเชพเชฐเซ เชเชฐเซเชเชฟเชซเซเชเซเช เชชเซเชฐเชเชพเชถเชฟเชค เชเชฐเซ เชเซ.
เชเชชเชฏเซเชเซ เชฒเชฟเชเชเซเชธ
- เชธเชฎเชพเชจ
เชฒเซเช , เชฎเชพเชคเซเชฐ maven เชฎเชพเชฐเชซเชคเซ เชชเซเชฐเชเชพเชถเชฟเชค - เชธเซเชเซเชเซเชเช
เชญเชเชกเชพเชฐ เชธเซเชจเชพเชเชพเชเชช Jira เชธเซเชจเชพเชเชพเชเชช เชเซเชฎเชพเช เชเชพเชธเซเช เชฌเชจเชพเชตเชตเชพเชจเซเช เชเซเชเชฆเชพเชนเชฐเชฃ: เชฐเซเชชเซเชเซเชเชฐเซ เชเซเชฏเชพเช เชคเซ เชฌเชงเซเช เชธเซเชฏเซเชเชฟเชค เชเซ
เชธเซเชฐเซเชธ: www.habr.com