ProHoster > Blogi > Haldamine > GitLabi CI seadistamine Java projekti üleslaadimiseks Maven Centralisse
GitLabi CI seadistamine Java projekti üleslaadimiseks Maven Centralisse
See artikkel on mõeldud Java-arendajatele, kes peavad GitLabi kasutades kiiresti oma tooted Sonatype ja/või Maveni keskvaramutesse avaldama. Selles artiklis räägin gitlab-runneri, gitlab-ci ja maven-plugini seadistamisest selle probleemi lahendamiseks.
Üksikasjalik kirjeldus artefaktide avaldamise mehhanismi kohta Maven Centralis Sonatype OSS-i hoidla hostimisteenuse kaudu on juba kirjeldatud see artikkel kasutaja Googolplex, seega viitan sellele artiklile õigetes kohtades.
Eelregistreerimine kl Sonatüüp JIRA ja käivitage hoidla avamiseks pilet (lisateabe saamiseks lugege jaotist Looge Sonatype JIRA pilet). Pärast hoidla avamist kasutatakse JIRA sisselogimise/parooli paari (edaspidi Sonatype konto) artefaktide üleslaadimiseks Sonatype nexusesse.
Kui kasutate GPG-võtme genereerimiseks Linuxi konsooli (gnupg/gnupg2), peate installima rng-tööriistad entroopia tekitamiseks. Vastasel juhul võib võtme genereerimine võtta väga kaua aega.
Kõigepealt peate looma ja konfigureerima projekti, milles konveier salvestatakse artefaktide juurutamiseks. Ma nimetasin oma projekti lihtsalt ja lihtsaks - juurutada
Pärast hoidla loomist peate hoidla muutmiseks juurdepääsu piirama.
Avage projekt -> Seaded -> Hoidla -> Kaitstud filiaalid. Kustutame kõik reeglid ja lisame metamärgiga * ühe reegli, millel on tõuke- ja liitmisõigus ainult hooldaja rolliga kasutajatele. See reegel töötab nii selle projekti kui ka rühma, kuhu see projekt kuulub, kõigi kasutajate puhul.
Kui hooldajaid on mitu, siis oleks parim lahendus piirata ligipääsu projektile põhimõtteliselt.
Avage projekt -> Seaded -> Üldine -> Nähtavus, projekti funktsioonid, load ja määrake Projekti nähtavus väärtuseks Era-.
Mul on projekt avalikult juurdepääsetav, kuna kasutan oma GitLabi Runnerit ja ainult mul on juurdepääs hoidla muutmiseks. Tegelikult ei ole minu huvides näidata avalikes torujuhtmete logides privaatset teavet.
Hoidla muutmise reeglite karmistamine
Mine projekti -> Seaded -> Hoidla -> Tõukereeglid ja seadke lipud Committer limitation, Kontrollige, kas autor on GitLabi kasutaja. Soovitan ka sättida alla kirjutamaja määrake lipp Keeldu allkirjastamata kohustustest.
Järgmisena peate ülesannete käivitamiseks konfigureerima päästiku
Avage projekt -> Seaded -> CI / CD -> Pipeline'i käivitajad ja looge uus käivitusluba
Selle märgi saab kohe lisada projektirühma muutujate üldisesse konfiguratsiooni.
Minge gruppi -> Settings -> CI / CD -> Variables ja lisage muutuja DEPLOY_TOKEN mille väärtuses on käivitusmärk.
Selles jaotises kirjeldatakse konfiguratsiooni toimingute käitamiseks juurutamisel, kasutades oma (spetsiifiline) ja avalikku (jagatud) käitajat.
Konkreetne jooksja
Kasutan enda jooksjaid, sest esiteks on see mugav, kiire, odav.
Jooksjale soovitan Linux VDS-i, millel on 1 protsessor, 2 GB muutmälu, 20 GB kõvaketas. Emissioonihind ~ 3000₽ aastas.
Minu jooksja
Jooksja jaoks võtsin VDS 4 CPU, 4 GB RAM, 50 GB SSD. See maksis ~11000₽ ja pole kunagi kahetsenud.
Mul on kokku 7 masinat. 5 arubal ja 2 ihoril.
Niisiis, meil on jooksja. Nüüd paneme selle paika.
Me läheme SSH kaudu masinasse ja installime java, git, maven, gnupg2.
Runtime platform arch=amd64 os=linux pid=17594 revision=3001a600 version=11.10.0
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.com/
Please enter the gitlab-ci token for this runner:
REGISTRATION_TOKEN
Please enter the gitlab-ci description for this runner:
[ih1174328.vds.myihor.ru]: Deploy Runner
Please enter the gitlab-ci tags for this runner (comma separated):
deploy
Registering runner... succeeded runner=ZvKdjJhx
Please enter the executor: docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes, docker, ssh, docker+machine, shell:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
Kontrollige, kas jooksja on registreeritud. Minge saidile gitlab.com -> juurutamise projekt -> Seaded -> CI/CD -> Jooksjad -> Konkreetsed jooksjad -> Selle projekti jaoks aktiveeritud jooksjad
Ekraan
Lisage eraldi teenus /etc/systemd/system/gitlab-deployer.service
Kui teil on mitmest moodulist koosnev projekt ja te ei pea hoidlasse konkreetset moodulit üles laadima, peate selle mooduli faili pom.xml lisama. nexus-staging-maven-plugin lipuga skipNexusStagingDeployMojo
Pärast hetktõmmise/väljaande üleslaadimist on versioonid saadaval lavastushoidlad
<repositories>
<repository>
<id>SonatypeNexus</id>
<url>https://oss.sonatype.org/content/groups/staging/</url>
<!-- Не надо указывать флаги snapshot/release для репозитория -->
</repository>
</repositories>
Veel plusse
Väga rikkalik sihtmärkide loend nexuse hoidlaga töötamiseks (mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin).
Automaatne väljalaskekontroll allalaaditavuse osas Maven Centralis
Kui silt on määratud, käivitatakse juurutusprojektis automaatselt vastav ülesanne, et laadida väljalaskeversioon nexusesse (näide).
Parim osa on see, et sulgemine vallandub Nexuses automaatselt.
[INFO] Performing remote staging...
[INFO]
[INFO] * Remote staging into staging profile ID "9043b43f77dcc9"
[INFO] * Created staging repository with ID "orgtouchbit-1037".
[INFO] * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1037
[INFO] * Uploading locally staged artifacts to profile org.touchbit
[INFO] * Upload of locally staged artifacts finished.
[INFO] * Closing staging repository with ID "orgtouchbit-1037".
Waiting for operation to complete...
.........
[INFO] Remote staged 1 repositories, finished with success.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Shields4J 1.0.0 .................................... SUCCESS [ 9.603 s]
[INFO] test-core .......................................... SUCCESS [ 3.419 s]
[INFO] Shields4J client ................................... SUCCESS [ 9.793 s]
[INFO] TestNG listener 1.0.0 .............................. SUCCESS [01:23 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:47 min
[INFO] Finished at: 2019-04-21T04:05:46+03:00
[INFO] ------------------------------------------------------------------------
Ja kui midagi läks valesti, siis ülesanne ebaõnnestub
[INFO] Performing remote staging...
[INFO]
[INFO] * Remote staging into staging profile ID "9043b43f77dcc9"
[INFO] * Created staging repository with ID "orgtouchbit-1038".
[INFO] * Staging repository at https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1038
[INFO] * Uploading locally staged artifacts to profile org.touchbit
[INFO] * Upload of locally staged artifacts finished.
[INFO] * Closing staging repository with ID "orgtouchbit-1038".
Waiting for operation to complete...
.......
[ERROR] Rule failure while trying to close staging repository with ID "orgtouchbit-1039".
[ERROR]
[ERROR] Nexus Staging Rules Failure Report
[ERROR] ==================================
[ERROR]
[ERROR] Repository "orgtouchbit-1039" failures
[ERROR] Rule "signature-staging" failures
[ERROR] * No public key: Key with id: (1f42b618d1cbe1b5) was not able to be located on <a href=http://keys.gnupg.net:11371/>http://keys.gnupg.net:11371/</a>. Upload your public key and try the operation again.
...
[ERROR] Cleaning up local stage directory after a Rule failure during close of staging repositories: [orgtouchbit-1039]
[ERROR] * Deleting context 9043b43f77dcc9.properties
[ERROR] Cleaning up remote stage repositories after a Rule failure during close of staging repositories: [orgtouchbit-1039]
[ERROR] * Dropping failed staging repository with ID "orgtouchbit-1039" (Rule failure during close of staging repositories: [orgtouchbit-1039]).
[ERROR] Remote staging finished with a failure: Staging rules failure!
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Shields4J 1.0.0 .................................... SUCCESS [ 4.073 s]
[INFO] test-core .......................................... SUCCESS [ 2.788 s]
[INFO] Shields4J client ................................... SUCCESS [ 3.962 s]
[INFO] TestNG listener 1.0.0 .............................. FAILURE [01:07 min]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
Selle tulemusena jääb meile ainult üks valik. Või kustutage see versioon või avaldage.
Pärast vabastamist, mõne aja pärast, on artefaktid sees
teemast mööda
See oli mulle ilmutus, et maven indekseerib teisi avalikke hoidlaid.
Pidin faili robots.txt üles laadima, kuna see indekseeris mu vana hoidla.
Kaitse "toores" versioonide automaatse avaldamise eest Maven Centralis.
Looge ja avaldage hetktõmmise versioone "klõpsuga".
Üks hoidla hetktõmmise/väljalase versioonide hankimiseks.
Java projekti ehitamise / testimise / avaldamise üldine torustik.
GitLabi CI seadistamine pole nii keeruline teema, kui esmapilgul tundub. Piisab, kui seadistate CI paar korda võtmed kätte põhimõttel ja nüüd pole te selles küsimuses kaugeltki amatöör. Lisaks on GitLabi dokumentatsioon väga üleliigne. Ärge kartke astuda esimest sammu. Tee paistab kõndiva inimese trepi alla (ma ei mäleta, kes seda ütles :)
Annan hea meelega tagasisidet.
Järgmises artiklis näitan teile, kuidas seadistada GitLabi CI integratsioonitesti ülesandeid konkurentsivõimeliselt käivitama (testteenuste käitamine koos docker-compose'iga), kui teil on ainult üks shell runner.