د سوناټایپ ماون مرکزي ذخیره ته د جاوا پروژې خپرولو لپاره د ګرډل او ګیتوب عملونو کارول

پدې مقاله کې ، زه غواړم د ګریډ بلډر په کارولو سره د سوناټایپ ماون مرکزي ذخیره ته د ګیتوب عملونو له لارې له سکریچ څخه د جاوا هنري آثارو خپرولو پروسې ته نږدې کتنه وکړم.

ما پریکړه وکړه چې دا مقاله په یو ځای کې د نورمال ټیوټوریل نشتوالي له امله ولیکم. ټول معلومات باید د مختلفو سرچینو څخه ټوټه ټوټه راټول شي، سربیره پردې، په بشپړه توګه تازه نه وي. څوک پروا لري، د پیشو لاندې ښه راغلاست.

په سونټایپ کې د ذخیره کولو رامینځته کول

لومړی ګام د سونټایپ ماوین مرکزي کې د ذخیره کولو رامینځته کول دي. د دې لپاره موږ ځو دلته، راجستر کړئ او نوې دنده رامینځته کړئ ، له موږ څخه د ذخیره کولو غوښتنه کوي. موږ خپل موټر چلوو ګروپ ID پروژه د پروژې URL د پروژې لینک او د SCM url د نسخې کنټرول سیسټم ته یو لینک په کوم کې چې پروژه موقعیت لري. ګروپ ID دلته باید د com.example، com.example.domain، com.example.testsupport بڼه وي، او ستاسو د ګیتوب لپاره د لینک په بڼه هم کیدی شي: github.com/yourusername -> io.github.yourusername. په هر حالت کې، تاسو به د دې ډومین یا پروفایل ملکیت تصدیق کولو ته اړتیا ولرئ. که تاسو د ګیتوب پروفایل مشخص کړی ، نو تاسو څخه به وغوښتل شي چې د مطلوب نوم سره عامه ذخیره جوړه کړئ.

د تایید څخه یو څه وخت وروسته، ستاسو ګروپ ID به رامینځته شي او موږ کولی شو بل ګام ته لاړ شو، د ګریډ ترتیب.

د Gradle ترتیب کول

د لیکلو په وخت کې، ما د ګریډل پلگ ان ونه موندل چې کولی شي د هنري اثارو په خپرولو کې مرسته وکړي. د دې یوازینی پلگ ان چې ما وموندله، په هرصورت، لیکوال د دې نور ملاتړ کولو څخه انکار وکړ. له همدې امله، ما پریکړه وکړه چې هرڅه پخپله ترسره کړم، ځکه چې دا کار کول خورا ستونزمن ندي.

د معلومولو لپاره لومړی شی د خپرولو لپاره د سونټایپ اړتیاوې دي. دوی په لاندې ډول دي:

  • د سرچینې کوډونو شتون او JavaDoc، د بیلګې په توګه. باید ګډون وکړي -sources.jar и-javadoc.jar فایلونه لکه څنګه چې په اسنادو کې ویل شوي، که د سرچینې کوډ یا اسناد چمتو کول ممکن نه وي، تاسو کولی شئ یو ډمی جوړ کړئ -sources.jar او یا -javadoc.jar د ازموینې پاس کولو لپاره دننه د ساده README سره.
  • ټول فایلونه باید لاسلیک شي GPG/PGPاو .asc هغه فایل چې لاسلیک لري باید د هرې فایل لپاره شامل شي.
  • شتون pom دوتنه
  • سم ارزښتونه groupId, artifactId и version. نسخه کیدای شي یو خپلسري تار وي او نشي پای ته رسیدلی -SNAPSHOT
  • شتون ته اړتیا ده name, description и url
  • د جواز، پراختیا کونکو او نسخه کنټرول سیسټم په اړه د معلوماتو شتون

دا اساسي قواعد دي چې باید د خپرولو په وخت کې تعقیب شي. بشپړ معلومات شتون لري دلته.

موږ دا اړتیاوې په کې پلي کوو build.gradle دوتنه. لومړی، راځئ چې د پراختیا کونکو، جوازونو، نسخه کنټرول سیسټم په اړه ټول اړین معلومات اضافه کړو، او د پروژې یو آر ایل، نوم او توضیحات هم تنظیم کړئ. راځئ چې د دې لپاره یو ساده طریقه ولیکو:

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 پټنوم متغیرات چې د ننوتلو او پټنوم لرونکي وي د راجسټریشن پرمهال رامینځته شوي sonatype.org.

په دې توګه فائنل build.gradle دا به داسې ښکاري:

بشپړ 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'). موږ به دا د مجلس په جریان کې افشا کړو او د ټګ نوم څخه به یې واخلو.

د PGP کلیدي نسل

د سونټایپ یو له اړتیاو څخه دا دی چې ټولې فایلونه د GPG/PGP کیلي سره لاسلیک شي. د دې لپاره موږ ځو دلته او د خپل عملیاتي سیسټم لپاره د GnuPG یوټیلیټ ډاونلوډ کړئ.

  • موږ کلیدي جوړه جوړه کوو: gpg --gen-key، یو کارن نوم ، بریښنالیک دننه کړئ ، او یو پټنوم هم تنظیم کړئ.
  • موږ معلوم کړو id زموږ کیلي د کمانډ سره: gpg --list-secret-keys --keyid-format short. ID به د سلیش وروسته مشخص شي، د بیلګې په توګه: 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

د ګیتوب عمل تنظیم کول

راځئ چې وروستي مرحلې ته لاړ شو، د ګیتوب عملونو په کارولو سره جوړ او اتوماتیک خپرول تنظیم کړئ.
د ګیتوب عملونه یوه ځانګړتیا ده چې تاسو ته اجازه درکوي د بشپړ CI / CD دورې پلي کولو سره د کار فلو اتومات کړئ. جوړول، ازموینه، او ځای پرځای کول د مختلفو پیښو لخوا رامینځته کیدی شي: کوډ فشار، خوشې کول، یا مسلې. دا فعالیت د عامه ذخیره کولو لپاره په بشپړ ډول وړیا دی.

پدې برخه کې ، زه به تاسو ته وښیم چې څنګه د جوړونې او فشار کوډ تنظیم کړئ او په خوشې کیدو کې د سونټایپ ذخیره کې ځای په ځای کړئ ، او همدارنګه رازونه تنظیم کړئ.

موږ رازونه ترتیب کړل

د اتوماتیک اسمبلۍ او ځای په ځای کولو لپاره، موږ یو شمیر پټو ارزښتونو ته اړتیا لرو، لکه د کیلي id، هغه پټنوم چې موږ د کیلي د جوړولو په وخت کې دننه کړی، د PGP کیلي پخپله، او د سوناټایپ ننوتل/پاسورډ. تاسو کولی شئ دا د ذخیره کولو ترتیباتو کې په ځانګړې برخه کې تنظیم کړئ:

د سوناټایپ ماون مرکزي ذخیره ته د جاوا پروژې خپرولو لپاره د ګرډل او ګیتوب عملونو کارول

موږ لاندې تغیرات تنظیم کوو:

  • SONATYPE_USERNAME / SONATYPE_PASSWORD - ننوت / پټنوم چې موږ د سونټایپ سره راجستر کولو پر مهال داخل شو
  • SIGNING_KEYID/SIGNING_PASSWORD — د پی جی پی کیلي ID او پټنوم د نسل په جریان کې ټاکل شوی.

زه غواړم په 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 سره پیل شي. که، د خپریدو په کلیک کولو وروسته، د کار جریان په بریالیتوب سره بشپړ شو، موږ کولی شو لاړ شو د سونټیوپ Nexus د ډاډ ترلاسه کولو لپاره:

د سوناټایپ ماون مرکزي ذخیره ته د جاوا پروژې خپرولو لپاره د ګرډل او ګیتوب عملونو کارول

اثار د سټیجینګ ذخیره کې څرګند شول. دا سمدلاسه د خلاص حالت کې څرګندیږي ، نو دا باید په لاسي ډول د مناسب تڼۍ په فشارولو سره د بند حالت ته ولیږدول شي. د چک کولو وروسته چې ټولې اړتیاوې پوره شوي، اثار د بند حالت ته ځي او نور د ترمیم لپاره شتون نلري. په دې بڼه، دا به په MavenCentral کې پای ته ورسیږي. که هرڅه سم وي، تاسو کولی شئ تڼۍ فشار کړئ اعلامیه، او اثار به د سونټایپ ذخیره کې پای ته ورسیږي.

د دې لپاره چې هنري اثار ماوین سینټرال ته ننوځي ، تاسو اړتیا لرئ د دې په دنده کې غوښتنه وکړئ چې موږ په پیل کې رامینځته کړی. تاسو اړتیا لرئ دا یوازې یو ځل ترسره کړئ، نو موږ د لومړي ځل لپاره خپروو. په راتلونکو وختونو کې، دا اړین ندي، هر څه به په اتوماتيک ډول همغږي شي. دوی زما لپاره په چټکۍ سره همغږي کول پیل کړل، مګر په ماون سینټرال کې د هنري اثارو شتون لپاره شاوخوا 5 ورځې وخت ونیو.

دا ټول دي، موږ خپل اثار په MavenCentral کې خپاره کړل.

ګټور لینکونه

  • ورته مقاله، یوازې د میون له لارې خپریږي
  • پوټینګ ذخیره سوناټایپ
  • جیره سونټایپ په کوم کې چې دنده رامینځته کول
  • بېلګه: ذخیره چیرې چې دا ټول تنظیم شوي

سرچینه: www.habr.com