Twaqqif ta 'GitLab CI biex ittella' proġett java fuq maven central
Dan l-artikolu huwa maħsub għall-iżviluppaturi java li għandhom bżonn jippubblikaw il-prodotti tagħhom malajr għal repożitorji ċentrali sonatype u/jew maven bl-użu ta 'GitLab. F'dan l-artikolu, se nitkellem dwar it-twaqqif ta 'gitlab-runner, gitlab-ci u maven-plugin biex issolvi din il-problema.
Prerekwiżiti:
Ħażna sikura ta 'mvn u GPG keys.
Eżekuzzjoni sigura tal-kompiti pubbliċi tas-CI.
Tlugħ ta' artifacts (rilaxx/snapshot) f'repożitorji pubbliċi.
Deskrizzjoni dettaljata tal-mekkaniżmu għall-pubblikazzjoni ta' artifatti lil Maven Central permezz tas-Servizz ta' Hosting tar-Repożitorju Sonatype OSS hija diġà deskritta f' Dan l-artiklu utent Googlelplex, għalhekk se nirreferi għal dan l-artikolu fil-postijiet it-tajba.
Irreġistra minn qabel fuq Sonatype JIRA u ibda biljett biex tiftaħ ir-repożitorju (għal aktar dettalji, aqra t-taqsima Oħloq biljett fuq Sonatype JIRA). Wara li jinfetaħ ir-repożitorju, il-par login/password minn JIRA (minn hawn 'il quddiem imsejjaħ il-kont Sonatype) se jintuża biex ittella' artifacts fuq Sonatype nexus.
Jekk tuża l-console Linux biex tiġġenera ċavetta GPG (gnupg/gnupg2), allura trid tinstalla għodod rng biex tiġġenera entropija. Inkella, il-ġenerazzjoni taċ-ċavetta tista' tieħu żmien twil ħafna.
L-ewwelnett, għandek bżonn toħloq u tikkonfigura proġett li fih il-pipeline se jinħażen għall-iskjerament ta 'artifacts. Semmejt il-proġett tiegħi b'mod sempliċi u bla komplikazzjoni - tiskjera
Wara li toħloq ir-repożitorju, trid tirrestrinġi l-aċċess biex tibdel ir-repożitorju.
Mur fil-proġett -> Settings -> Repożitorju -> Fergħat Protetti. Aħna nħassru r-regoli kollha u nżidu regola waħda bil-Wildcard * bid-dritt li timbotta u tgħaqqad biss għall-utenti bir-rwol ta' Maintainers. Din ir-regola se taħdem għall-utenti kollha kemm ta’ dan il-proġett kif ukoll tal-grupp li għalih jappartjeni dan il-proġett.
Jekk ikun hemm diversi manutenzjoni, allura l-aħjar soluzzjoni tkun li jiġi limitat l-aċċess għall-proġett fil-prinċipju.
Mur fil-proġett -> Settings -> Ġenerali -> Viżibilità, karatteristiċi tal-proġett, permessi u ssettja l-viżibilità tal-proġett għal Privat.
Għandi proġett f'aċċess pubbliku, peress li nuża GitLab Runner tiegħi stess u jien biss għandi aċċess biex timmodifika r-repożitorju. Ukoll, fil-fatt mhuwiex fl-interess tiegħi li nuri informazzjoni privata f'pipeline logs pubbliċi.
Issikkar tar-regoli għall-bidla tar-repożitorju
Mur fil-proġett -> Settings -> Repożitorju -> Imbotta Regoli u waqqaf ir-restrizzjoni tal-Committer, Iċċekkja jekk l-awtur huwiex bnadar utent GitLab. Nirrakkomanda wkoll it-twaqqif jimpenja firma, u ssettja l-bandiera ta' impenji mhux iffirmati ta' Irrifjuta.
Sussegwentement trid tikkonfigura grillu biex tniedi l-kompiti
Mur fil-proġett -> Settings -> CI / CD -> Pipeline triggers u oħloq trigger-token ġdid
Dan it-token jista 'jiżdied immedjatament mal-konfigurazzjoni ġenerali tal-varjabbli għal grupp ta' proġetti.
Mur fil-grupp -> Settings -> CI / CD -> Varjabbli u żid varjabbli DEPLOY_TOKEN bi trigger-token fil-valur.
Oħloq direttorju għall-maven cache u tassenja drittijiet tal-grupp runner
Tista' taqbeż dan il-pass jekk ma tippjanax li tħaddem diversi runners fuq l-istess magna.
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!
Iċċekkja li r-runner huwa reġistrat. Mur fuq gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners -> Runners attivati għal dan il-proġett
Aħna niġġeneraw ċavetta billi nwieġbu mistoqsijiet. Jien użajt ismi u l-email.
Kun żgur li tispeċifika l-password għaċ-ċavetta. L-artifacts se jiġu ffirmati b'din iċ-ċavetta.
gpg --gen-key
Iċċekkja
gpg --list-keys -a
/home/gitlab-deployer/.gnupg/pubring.gpg
----------------------------------------
pub 4096R/00000000 2019-04-19
uid Petruha Petrov <[email protected]>
sub 4096R/11111111 2019-04-19
Intellgħu ċ-ċavetta pubblika tagħna fuq is-server taċ-ċavetta
gpg --keyserver keys.gnupg.net --send-key 00000000
gpg: sending key 00000000 to hkp server keys.gnupg.net
Oħloq direttorju maven repożitorju u link għall-cache (tagħmel l-ebda żball)
Tista' taqbeż dan il-punt jekk ma tippjanax li tmexxi diversi runners fuq magna waħda.
Jekk għandek proġett b'ħafna moduli, u m'għandekx bżonn ittella' modulu speċifiku fir-repożitorju, allura trid iżżid mal-pom.xml ta' dan il-modulu nexus-staging-maven-plugin bil-bandiera skipNexusStagingDeployMojo
<repositories>
<repository>
<id>SonatypeNexus</id>
<url>https://oss.sonatype.org/content/groups/staging/</url>
<!-- Не надо указывать флаги snapshot/release для репозитория -->
</repository>
</repositories>
Aktar pluses
Lista rikka ħafna ta' miri biex taħdem mar-repożitorju ta' nexus (mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin).
Kontroll tar-rilaxx awtomatiku għall-downloadability f'maven central
Meta t-tikketta tkun issettjata, il-kompitu korrispondenti fil-proġett ta' skjerament jiġi awtomatikament attivat biex ittella' l-verżjoni tar-rilaxx fuq nexus (eżempju).
L-aħjar parti hija li r-rilaxx mill-qrib jiġi awtomatikament attivat fir-rabta.
[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] ------------------------------------------------------------------------
U jekk xi ħaġa tmur ħażin, il-kompitu definittivament se jfalli
[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] ------------------------------------------------------------------------
Bħala riżultat, nibqgħu b'għażla waħda biss. Jew ħassar din il-verżjoni jew ippubblikaha.
Wara r-rilaxx, wara xi żmien, l-artifacts se jkunu ġewwa
offtopic
Kienet skoperta għalija li maven indiċi repożitorji pubbliċi oħra.
Kelli ntella' robots.txt għax indiċjat ir-repożitorju l-antik tiegħi.
Proġett ta' skjerament separat li fih tista' timplimenta diversi kompiti CI għat-tlugħ ta' artifacts f'repożitorji pubbliċi għal diversi lingwi ta' żvilupp.
Il-proġett Deploy huwa iżolat minn interferenza esterna u jista' jinbidel biss minn utenti bir-rwoli ta' Sid u Mantenitur.
Runner Speċifiku separat b'cache "taħraq" biex jaħdem biss kompiti.
Il-pubblikazzjoni ta' verżjonijiet ta' snapshot/rilaxx f'repożitorju pubbliku.
Protezzjoni kontra l-pubblikazzjoni awtomatika ta 'verżjonijiet "mhux maħduma" f'maven central.
Ibni u ppubblika verżjonijiet snapshot "fuq ikklikkja".
Repożitorju wieħed għall-kisba ta' verżjonijiet ta' snapshot/rilaxx.
Pipeline ġenerali għall-bini/ittestjar/pubblikazzjoni ta 'proġett java.
It-twaqqif ta' GitLab CI mhuwiex suġġett ikkumplikat daqs kemm jidher mal-ewwel daqqa t'għajn. Huwa biżżejjed li twaqqaf CI fuq bażi turnkey ftit drabi, u issa int bogħod minn dilettant f'din il-kwistjoni. Barra minn hekk, id-dokumentazzjoni GitLab hija żejda ħafna. Tibżax tieħu l-ewwel pass. It-triq tidher taħt it-taraġ tal-persuna li tkun miexja (ma niftakarx min qalha :)
Inkun kuntent li nirċievi feedback.
Fl-artiklu li jmiss, ser nuruk kif twaqqaf GitLab CI biex tmexxi l-kompiti tat-test tal-integrazzjoni b'mod kompetittiv (tmexxija tas-servizzi tat-test b'docker-compose) jekk għandek shell runner wieħed biss.