See artikkel on mõeldud java arendajatele, kellel on vajadus kiiresti oma tooteid avalikesse sonatype ja/või maven central hoidlasse avaldada GitLabi abil. Selles artiklis räägin gitlab-runneri, gitlab-ci ja maven-plugin'i seadistamisest selle ülesande jaoks.
Eeltingimused:
- Mvn ja GPG võtmete turvaline säilitamine.
- Avalike CI ülesannete turvaline täitmine.
- Aretfaktide (release/snapshot) üleslaadimine avalikesse hoidlatestse.
- Automaatne release-versioonide kontrollimine maven central'i avaldamiseks.
- Üksikasjalik lahendus aretfaktide hoidlasse laadimiseks mitme projekti jaoks.
- Lihtsus ja mugavus.
Sisukord
Üldine teave
- Avalike aretfaktide avaldamise mehhanismi üksikasjalik kirjeldus Maven Central'i kaudu Sonatype OSS Repository Hosting Service'i on juba kirjeldatud kasutaja poolt , seetõttu viitan sobivates kohtades sellele artiklile.
- Esmalt registreerime end ja loome pileti hoidla avamiseks (täiendavalt vaata jaotist ). Pärast hoidla avamist kasutatakse JIRA login/parooli (edasi Sonatype konto) aretfaktide laadimiseks Sonatype nexus'esse.
- Edasi on GPG võtme genereerimise protsess kirjeldatud väga kuivalt. Üksikasjalikumalt vaata jaotist
- Kui kasutad Linuxi konsooli GPG võtme genereerimiseks (gnupg/gnupg2), siis pead installima entropia genereerimiseks. Vastasel juhul võib võtme genereerimine võtta väga kaua aega.
- Hoidlate teenused avalike GPG võtmete
Deploy projekti seadistamine GitLab'is
- Esmalt on vajalik luua ja seadistada projekt, kuhu salvestatakse pipeline, et aretfakte üles laadida. Minu projekt sai lihtsa ja arusaadava nime —
- Pärast hoidla loomist on vajalik piirata juurdepääsu hoidla muutmiseks.
Liigume projekti -> Seaded -> Repositoorium -> Kaitstud harud. Eemaldame kõik reeglid ja lisame ainulaadse reegli wildcard * õigusega push ja merge ainult hooldajate rolliga kasutajatele. See reegel kehtib kõigile kasutajatele, nii antud projekti kui ka projekti kuuluvate gruppide seas.
- Kui hooldajaid on mitu, on parim lahendus piirata ligipääsu projektile üldiselt.
Liigume projekti -> Seaded -> Üldine -> Nähtavus, projekti omadused, õigused ja seame projekti nähtavuse väärtuseks Privaatne.
Mul on projekt avalikus juurdepääsuks, kuna kasutan oma GitLabi jooksjat ja muudatuste tegemise juurdepääs on ainult mul. Mulle ei meeldi jagada privaatset teavet avalikes pipeline’i logides. - Repositooriumi muutmisreeglite karmistamine
Liigume projekti -> Seaded -> Repositoorium -> Push reeglid ja seame lipud Komiteeli piirang, Kontrolli, kas autor on GitLabi kasutaja. Soovitan samuti seadistada , ja seada lipp Keelata allkirjastamata komiteed. - Seejärel on vajalik ülesannete käivitamiseks seada töötlust-trigger.
Liigume projekti -> Seaded -> CI / CD -> Pipeline’i käivitajad ja loome uue käivitustokeni.
Seda tokenit saab kohe lisada projektigruppide üldisse konfiguratsiooni muutujaid.
Liigume gruppi -> Seaded -> CI / CD -> Muutujad ja lisame muutujaDEPLOY_TOKENkäivitustokenina.
GitLab Runner'i
Selles jaotises on kirjeldatud konfiguratsiooni, et käivitada ülesandeid deploy’l, kasutades oma (Spetsiifiline) ja avalikku (Jagatud) jooksjat.
Spetsiifiline Runner
Kasutame oma jooksjaid, kuna see on kõigepealt mugav, kiire ja odav.
Soovitan jooksjaks linuks VDS-i, millel on 1 CPU, 2 GB RAM, 20 GB HDD. Hinda on umbes 3000₽ aastas.
Minu jooksja
Kasutasin jooksjaks VDS-i, millel on 4 CPU, 4 GB RAM, 50 GB SSD. Maksis umbes 11000₽ ja ma ei kahetse seda kordagi.
Kokku on mul 7 masinat. 5 arubas ja 2 ihoris.
Nii et meil on jooksja. Nüüd hakkame seda seadistama.
Logime masinasse SSH kaudu ja installime java, git, maven, gnupg2.
Installige gitlab runner
- Loome uue grupi
runnersudo groupadd runner - Loome mape maven’i vahemälu jaoks ja määrame grupi õigused.
runner
Selle sammu võib vahele jätta, kui plaanite käitada mitu jooksjat ühel masinal.mkdir -p /usr/cache/.m2/repository chown -R :runner /usr/cache chmod -R 770 /usr/cache - Loome kasutaja
gitlab-deployerja lisame grupirunneruseradd -m -d /home/gitlab-deployer gitlab-deployer usermod -a -G runner gitlab-deployer - Lisame faili
/etc/ssh/sshd_configjärgmise reaAllowUsers root@* gitlab-deployer@127.0.0.1 - Taaskordame
sshdsystemctl restart sshd - Seame kasutajale parooli
gitlab-deployer(võib olla lihtne, kuna kehtib piirang localhostile)passwd gitlab-deployer - Paigaldame GitLab Runneri (Linux x86-64)
sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 sudo chmod +x /usr/local/bin/gitlab-runner ln -s /usr/local/bin/gitlab-runner /etc/alternatives/gitlab-runner ln -s /etc/alternatives/gitlab-runner /usr/bin/gitlab-runner - Liigume veebilehe gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners ja kopeerime registreerimise märgendi
Screenshot
- Registreerime runneri
gitlab-runner register --config /etc/gitlab-runner/gitlab-deployer-config.toml
Protsess
Runtime platform arch=amd64 os=linux pid=17594 revision=3001a600 version=11.10.0
Running in system-mode.
Palun sisestage gitlab-ci koordinaatori URL (nt https://gitlab.com/):
https://gitlab.com/
Palun sisestage gitlab-ci märgend selle runneri jaoks:
REGISTRATION_TOKEN
Palun sisestage gitlab-ci kirjelduse selle runneri jaoks:
[ih1174328.vds.myihor.ru]: Deploy Runner
Palun sisestage gitlab-ci sildid selle runneri jaoks (koma eraldatud):
deploy
Runneri registreerimine... õnnestus runner=ZvKdjJhx
Palun sisestage executor: docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes, docker, ssh, docker+machine, shell:
shell
Runner edukalt registreeritud. Võite seda käivitada, kuid kui see juba töötab, peaks konfigureerimine automaatselt uuenduma!- Kontrollime, et runner on registreeritud. Liigume veebilehe gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners -> Runners activated for this project
Screenshot
- Lisame erinev teenus
/etc/systemd/system/gitlab-deployer.service[Unit] Description=GitLab Deploy Runner After=syslog.target network.target ConditionFileIsExecutable=/usr/local/bin/gitlab-runner [Service] StartLimitInterval=5 StartLimitBurst=10 ExecStart=/usr/local/bin/gitlab-runner "run" "--working-directory" "/home/gitlab-deployer" "--config" "/etc/gitlab-runner/gitlab-deployer-config.toml" "--service" "gitlab-deployer" "--syslog" "--user" "gitlab-deployer" Restart=always RestartSec=120 [Install] WantedBy=multi-user.target - Käivitatakse teenus.
systemctl enable gitlab-deployer.service systemctl start gitlab-deployer.service systemctl status gitlab-deployer.service - Kontrollime, et runner on käivitatud.
Näide
GPG võtmete genereerimine
- Samalt masinal siseneme ssh alla kasutaja all
gitlab-deployer(see on oluline GPG võtme genereerimise jaoks)ssh gitlab-deployer@127.0.0.1 - Genereerime võtme, vastates küsimustele. Ma kasutasin enda nime ja e-posti.
Oluliselt sisestage võtme parool. Selle võtmega allkirjastatakse artefaktid.gpg --gen-key - Kontrollime.
gpg --list-keys -a /home/gitlab-deployer/.gnupg/pubring.gpg ---------------------------------------- pub 4096R/00000000 2019-04-19 uid Petruha Petrov sub 4096R/11111111 2019-04-19 - Laadime meie avaliku võtme võtmete serverisse üles
gpg --keyserver keys.gnupg.net --send-key 00000000 gpg: key 00000000 saatmine hkp serverisse keys.gnupg.net
Maveni seadistamine
- Logime sisse kasutaja all
gitlab-deployersu gitlab-deployer - Loome maven katalooge repository ja linkime tahvli (ärge tehke viga)
Seda punkti võib vahele jätta, kui te ei kavatse mitu runnerit ühel masinal käivitada.mkdir -p ~\/\.m2\/repository ln -s \/usr\/cache\/\.m2\/repository \/home\/gitlab-deployer\/\.m2\/repository - Loome meistrikood
mvn --encrypt-master-password password {hnkle5BJ9HUHUMP+CXfGBl8dScfFci\/mpsur\/73tR2I=} - Loome faili ~\/\.m2\/settings-security.xml
{hnkle5BJ9HUHUMP+CXfGBl8dScfFci\/mpsur\/73tR2I=} - Krüpteerime Sonatype konto parooli
mvn --encrypt-password SONATYPE_PASSWORD {98Wv5+u+Tn0HX2z5G\/kR4R8Z0WBgcDBgi7d12S\/un+SCU7uxzaZGGmJ8Cu9pAZ2J} - Loome faili ~\/\.m2\/settings.xml
env true GPG_SECRET_KEY_PASSPHRASE sonatype SONATYPE_USERNAME {98Wv5+u+Tn0HX2z5G\/kR4R8Z0WBgcDBgi7d12S\/un+SCU7uxzaZGGmJ8Cu9pAZ2J}
kus,
GPG_SECRET_KEY_PASSPHRASE — GPG võtme parool
SONATYPE_USERNAME — Sonatype konto kasutajanimi
Sellel on runneri seadistamine lõpetatud, nüüd saame liikuda jaotisse
Ühisrunner
GPG võtmete genereerimine
- Esiteks tuleb luua GPG võti. Selleks installime gnupg.
yum install -y gnupg - Genereerime võtme, vastates küsimustele. Kasutasin oma nime ja e-posti. Koodi jaoks tuleb kindlasti parool määrata.
gpg --gen-key - Kuvame teavet võtme kohta
gpg --list-keys -a pub rsa3072 2019-04-24 [SC] [expires: 2021-04-23] 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 uid [ultimate] tttemp sub rsa3072 2019-04-24 [E] [expires: none] - Laadime meie avaliku võtme võtmete serverisse üles
gpg --keyserver keys.gnupg.net --send-key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 gpg: sending key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 to hkp server keys.gnupg.net - Saame privaatvõtme
gpg --export-secret-keys --armor 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 -----BEGIN PGP PRIVATE KEY BLOCK----- lQWGBFzAqp8BDADN41CPwJ\/gQwiKEbyA902DKw\/WSB1AvZQvV\/ZFV77xGeG4K7k5 ... =2Wd2 -----END PGP PRIVATE KEY BLOCK----- - Liigume projekti seadistusse -> Seaded -> CI \/ CD -> Muutujad ja salvestame privaatvõtme muutujasse
GPG_SECRET_KEY
Maveni seadistamine
- Loome meistrikood
mvn --encrypt-master-password password {hnkle5BJ9HUHUMP+CXfGBl8dScfFci\/mpsur\/73tR2I=} - Liigume projekti seadistusse -> Seaded -> CI \/ CD -> Muutujad ja salvestame muutujasse
SETTINGS_SECURITY_XMLjärgmised read:{hnkle5BJ9HUHUMP+CXfGBl8dScfFci\/mpsur\/73tR2I=} - Krüpteerime Sonatype konto parooli
mvn --encrypt-password SONATYPE_PASSWORD {98Wv5+u+Tn0HX2z5G\/kR4R8Z0WBgcDBgi7d12S\/un+SCU7uxzaZGGmJ8Cu9pAZ2J} - Liigume projekti seadistusse -> Seaded -> CI \/ CD -> Muutujad ja salvestame muutujasse
SETTINGS_XMLjärgmised read:env true GPG_SECRET_KEY_PASSPHRASE sonatype sonatype_username {98Wv5+u+Tn0HX2z5G\/kR4R8Z0WBgcDBgi7d12S\/un+SCU7uxzaZGGmJ8Cu9pAZ2J}
kus,
GPG_SECRET_KEY_PASSPHRASE — GPG võtme parool
SONATYPE_USERNAME — Sonatype konto kasutajanimi
Docker pildi üleslaadimine
- Loome piisavalt lihtsa Dockerfile'i, et käivitada ülesandeid seadistamisega vajaliku Java versiooniga. Allpool on näide alpine jaoks.
FROM java:8u111-jdk-alpine RUN apk add gnupg maven git --update-cache --repository http://dl-4.alpinelinux.org/alpine/edge/community/ --allow-untrusted && mkdir ~/.m2/ - Kogume konteineri oma projekti jaoks
docker build -t registry.gitlab.com/group/deploy . - Autentifitseerime ja laadime konteineri registrisse.
docker login -u USER -p PASSWORD registry.gitlab.com docker push registry.gitlab.com/group/deploy
GitLab CI-d
Projekti üleslaadimine
Lisame deploy-projekti juurkausta faili .gitlab-ci.yml
Skript sisaldab kahte välistavat ülesannet deploy jaoks. Spetsiifiline Runner või Jagatud Runner vastavalt.
.gitlab-ci.yml
stages:
- deploy
Specific Runner:
extends: .java_deploy_template
# Ülesanne täidetakse teie shell-runners
tags:
- deploy
Shared Runner:
extends: .java_deploy_template
# Ülesanne täidetakse avalikus docker-runners
tags:
- docker
# Pilt sektsioonis GitLab Runner -> Jagatud Runner -> Docker
image: registry.gitlab.com/group/deploy-project:latest
before_script:
# Impordime GPG võtme
- printf "${GPG_SECRET_KEY}" | gpg --batch --import
# Salvestame maven konfiguratsiooni
- printf "${SETTINGS_SECURITY_XML}" > ~/.m2/settings-security.xml
- printf "${SETTINGS_XML}" > ~/.m2/settings.xml
.java_deploy_template:
stage: deploy
# Ülesanne käivitub käivitaja põhjal, kui muutuja DEPLOY on seadistatud java väärtuseks
only:
variables:
- $DEPLOY == "java"
variables:
# keelame praeguse projekti klooni
GIT_STRATEGY: none
script:
# Anname võimaluse hoida parooli krüpteerimata
- git config --global credential.helper store
# Salvestame ajutised kredid kasutaja gitlab-ci-token
# Token töötab kõikide avalike projektide jaoks gitlab.com ja grupi projektide jaoks
- echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com" >> ~/.git-credentials
# Täielikult puhastame praeguse katalooge
- rm -rf .* *
# Kloonime projekti, mida kavatseme Sonatype Nexus'is deployida
- git clone ${DEPLOY_CI_REPOSITORY_URL} .
# Lülitame vajalikule commit'ile
- git checkout ${DEPLOY_CI_COMMIT_SHA} -f
# Kui ükski pom.xml ei sisalda parameetrit autoReleaseAfterClose, jätkame ehitamist.
# Vastasel juhul on oht üles laadida toores artefakte maven centralsse
- >
for pom in $(find . -name pom.xml); do
if [[ $(grep -q autoReleaseAfterClose "$pom" && echo $?) == 0 ]]; then
echo "Fail $pom sisaldab keelatud seadistust: ";
exit 1;
fi;
done
# Kui parameeter DEPLOY_CI_COMMIT_TAG on tühi, seadistame sundlikult SNAPSHOT-versiooni
- >
if [[ "${DEPLOY_CI_COMMIT_TAG}" != "" ]]; then
mvn versions:set -DnewVersion=${DEPLOY_CI_COMMIT_TAG}
else
VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
if [[ "${VERSION}" == *-SNAPSHOT ]]; then
mvn versions:set -DnewVersion=${VERSION}
else
mvn versions:set -DnewVersion=${VERSION}-SNAPSHOT
fi
fi
# Käivitame ülesande artefaktide compileerimiseks ja deployimiseks
- mvn clean deploy -DskipTests=trueJava projekt
Java projektides, mis on ette nähtud avalikesse hoidlatestesse laadimiseks, tuleb lisada 2 sammu Release ja Snapshot versioonide laadimiseks.
.gitlab-ci.yml
stages:
- build
- test
- verify
- deploy
Release:
extends: .trigger_deploy
# Käivita ülesanne ainult sildi põhjal.
only:
- tags
Snapshot:
extends: .trigger_deploy
# Käivita ülesanne SNAPSHOT versiooni käsitsi avaldamiseks
when: manual
# Ära käivita ülesannet, kui silt on määratud.
except:
- tags
.trigger_deploy:
stage: deploy
variables:
# Keela praeguse projekti kloonimine
GIT_STRATEGY: none
# Link deploy-ülesande trigerile
URL: "https://gitlab.com/api/v4/projects//trigger/pipeline"
# Deploy-ülesande muutujad
POST_DATA: "
token=${DEPLOY_TOKEN}&
ref=master&
variables[DEPLOY]=${DEPLOY}&
variables[DEPLOY_CI_REPOSITORY_URL]=${CI_REPOSITORY_URL}&
variables[DEPLOY_CI_PROJECT_NAME]=${CI_PROJECT_NAME}&
variables[DEPLOY_CI_COMMIT_SHA]=${CI_COMMIT_SHA}&
variables[DEPLOY_CI_COMMIT_TAG]=${CI_COMMIT_TAG}
"
script:
# Ei kasuta cURL, kuna lipud --fail --show-error
# ei prindi vastuse keha, kui HTTP kood on 400 või rohkem
- wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}Selles lahenduses läksin natuke kaugemale ja otsustasin kasutada ühte CI šablooni Java projektide jaoks.
Rohkem detaile
Loomisin eraldi projekti , kuhu paigaldasin CI šablooni Java projektide jaoks .
common.yml
etapid:
- ehitus
- testimine
- kinnitamine
- juurutamine
muutujad:
SONAR_ARGS: "
-Dsonar.gitlab.commit_sha=${CI_COMMIT_SHA}
-Dsonar.gitlab.ref_name=${CI_COMMIT_REF_NAME}
"
.build_java_project:
etapp: ehitus
sildid:
- touchbit-shell
muutujad:
SKIP_TEST: "vale"
skript:
- mvn clean
- mvn package -DskipTests=${SKIP_TEST}
artefaktid:
kui: alati
aegub: 30 päeva
teed:
- "*\/target\/reports"
.build_sphinx_doc:
etapp: ehitus
sildid:
- touchbit-shell
muutujad:
DOCKERFILE: .indirect\/docs\/Dockerfile
skript:
- docker build --no-cache -t ${CI_PROJECT_NAME}\/doc -f ${DOCKERFILE} .
.junit_module_test_run:
etapp: testimine
sildid:
- touchbit-shell
muutujad:
MODUL: ""
skript:
- cd ${MODUL}
- mvn test
artefaktid:
kui: alati
aegub: 30 päeva
teed:
- "*\/target\/reports"
.junit_test_run:
etapp: testimine
sildid:
- touchbit-shell
skript:
- mvn test
artefaktid:
kui: alati
aegub: 30 päeva
teed:
- "*\/target\/reports"
.sonar_review:
etapp: kinnitamine
sildid:
- touchbit-shell
sõltuvused: []
skript:
- >
if [ "$CI_BUILD_REF_NAME" == "master" ]; then
mvn compile sonar:sonar -Dsonar.login=$SONAR_LOGIN $SONAR_ARGS
else
mvn compile sonar:sonar -Dsonar.login=$SONAR_LOGIN $SONAR_ARGS -Dsonar.analysis.mode=preview
fi
.trigger_deploy:
etapp: juurutamine
sildid:
- touchbit-shell
muutujad:
URL: "https:\/\/gitlab.com\/api\/v4\/projects\/10345765\/trigger\/pipeline"
POST_DATA: "
token=${DEPLOY_TOKEN}&
ref=master&
variables[DEPLOY]=${DEPLOY}&
variables[DEPLOY_CI_REPOSITORY_URL]=${CI_REPOSITORY_URL}&
variables[DEPLOY_CI_PROJECT_NAME]=${CI_PROJECT_NAME}&
variables[DEPLOY_CI_COMMIT_SHA]=${CI_COMMIT_SHA}&
variables[DEPLOY_CI_COMMIT_TAG]=${CI_COMMIT_TAG}
"
skript:
- wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}
.trigger_release_deploy:
pikendub: .trigger_deploy
ainult:
- sildid
.trigger_snapshot_deploy:
pikendub: .trigger_deploy
millal: käsitsi
välja arvatud:
- sildid
Seetõttu näeb .gitlab-ci.yml failide struktuur java projektides üsna kompaktne ja mitte üleliigne välja.
.gitlab-ci.yml
kaasa: https:\/\/gitlab.com\/TouchBIT\/gitlab-ci\/raw\/master\/common.yml
Shields4J:
pikendub: .build_java_project
Sphinx doc:
pikendub: .build_sphinx_doc
muutujad:
DOCKERFILE: .docs\/Dockerfile
Sonar review:
pikendub: .sonar_review
sõltuvused:
- Shields4J
Väljalaskmine:
pikendub: .trigger_release_deploy
Snapshot:
pikendub: .trigger_snapshot_deploypom.xml konfiguratsioon
Seda teemat on kirjeldatud väga detailselt. ja , seetõttu ma kirjeldan mõned nüansid pluginite kasutamisest. Samuti kirjeldan, kuidas on lihtne ja muretult kasutada nexus-staging-maven-plugin, kui te ei soovi või ei saa kasutada org.sonatype.oss:oss-parent oma projekti vanemana.
maven-install-plugin
Paigaldab moodulid kohalikku repositooriumisse.
Äärmiselt kasulik kohalike lahenduste kontrollimiseks teistes projektides ning samuti kontrollsumma.
org.apache.maven.plugins
maven-install-plugin
install-project
install
target/${project.artifactId}-${project.version}.jar
```target/${project.artifactId}-${project.version}-sources.jar
dependency-reduced-pom.xml
true
truemaven-javadoc-plugin
Javadoc'i genereerimine projekti jaoks.
org.apache.maven.plugins
maven-javadoc-plugin
jar
prepare-package
true
true
falseKui teil on moodul, mis ei sisalda java't (näiteks ainult ressursid)
Või kui te ei soovi üldse javadoc'i genereerida, siis selleks on abi maven-jar-plugin
org.apache.maven.plugins
maven-jar-plugin
empty-javadoc-jar
generate-resources
jar
javadoc
${basedir}/javadocmaven-gpg-plugin
org.apache.maven.plugins
maven-gpg-plugin
sign-artifacts
deploy
signnexus-staging-maven-plugin
Konfiguratsioon:
org.sonatype.plugins
nexus-staging-maven-plugin
org.sonatype.plugins
nexus-staging-maven-plugin
true
sonatype
https://oss.sonatype.org/
true
org.apache.maven.plugins
maven-deploy-plugin
true
sonatype
Nexus Snapshot Repository
https://oss.sonatype.org/content/repositories/snapshots/
sonatype
Nexus Release Repository
https://oss.sonatype.org/service/local/staging/deploy/maven2/Kui teil on mitme mooduli projekt ja te ei soovi mingit moodulit hoidlasse üles laadida, peate selle mooduli pom.xml faili lisama nexus-staging-maven-plugin lipuga skipNexusStagingDeployMojo
org.sonatype.plugins
nexus-staging-maven-plugin
truePärast üleslaadimist on snapshot/release versioonid saadaval
SonatypeNexus
https://oss.sonatype.org/content/groups/staging/Veel plusse
- Väga rikkalik eesmärkide nimekiri nexus hoidla päringuteks (
mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin). - Automaatne rikka kontrollimine, et üles laadida maven keskusesse
Tulemus
SNAPSHOT versiooni avaldamine
Projekt lähtestamisel on võimalik käsitsi käivitada ülesande, et laadida SNAPSHOT versioon nexusesse
Selle ülesande käivitamisel käivitatakse vastav ülesanne projektis deploy ().
Lühendatud logi
Käivitus gitlab-runner 11.10.0 (3001a600)
Deploy runner JSKWyxUw
Kasutades Shell executori...
Käivitan ih1174328.vds.myihor.ru...
Skip Git reposti seadistamine
Skip Git checkout
Skip Git submodules seadistamine
$ rm -rf .* *
$ git config --global credential.helper store
$ echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com" >> ~/ .git-credentials
$ git clone ${DEPLOY_CI_REPOSITORY_URL} .
Kloonimine 'shields4j'...
$ git checkout ${DEPLOY_CI_COMMIT_SHA}
Märkus: '850f86aa317194395c5387790da1350e437125a7' kontrollimine.
Oled 'detached HEAD' olekus. Sa saad ringi vaadata, teha katsetusi
muudatusi ja neid salvestada, ja sa saad iga salvestatud muudatuse kõrvaldada
ilma, et see mõjutaks mingeid haru, tehes uuesti checkouti.
Kui soovid luua uut haru, et säilitada loodud salvestused, võid
seda teha (nüüd või hiljem) kasutades -b checkout käsu uuesti. Näiteks:
git checkout -b new_branch_name
HEAD on nüüd 850f86a... vahele jäetud deploy test-core
$ for pom in $(find . -name pom.xml); do # kokkusurutud mitmerealine käsk
$ if [[ "${DEPLOY_CI_COMMIT_TAG}" != "" ]]; then # kokkusurutud mitmerealine käsk
[INFO] Projekti otsimine...
[INFO] Ehitise kontrollimine, kokku 4 moodulit...
[INFO] Nexus Staging funktsioonide installimine:
[INFO] ... kokku 4 täitmist maven-deploy-plugin asendatud nexus-staging-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] Reactor ehitamise järjekord:
[INFO]
[INFO] Shields4J [pom]
[INFO] test-core [jar]
[INFO] Shields4J klient [jar]
[INFO] TestNG kuulaja [jar]
[INFO]
[INFO] -----------------------------
[INFO] Ehitamine Shields4J 1.0.0 [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.5:set (default-cli) @ shields4j-parent ---
[INFO] Otsin kohalikku ühendama juurt...
[INFO] Kohalik ühendamine juur: /home/gitlab-deployer/JSKWyxUw/0/TouchBIT/deploy/shields4j
[INFO] Töötlus org.touchbit.shields4j:shields4j-parent:1.0.0 -> 1.0.0-SNAPSHOT
[INFO] Töötlus org.touchbit.shields4j:shields4j-parent
[INFO] Värskendamine projekti org.touchbit.shields4j:shields4j-parent
[INFO] versioonilt 1.0.0 versioonile 1.0.0-SNAPSHOT
[INFO]
[INFO] Töötlus org.touchbit.shields4j:client
[INFO] Värskendamine vanem org.touchbit.shields4j:shields4j-parent
[INFO] versioonilt 1.0.0 versioonile 1.0.0-SNAPSHOT
[INFO] Värskendamine sõltuvust org.touchbit.shields4j:test-core
[INFO] versioonilt 1.0.0 versioonile 1.0.0-SNAPSHOT
[INFO]
[INFO] Töötlus org.touchbit.shields4j:test-core
[INFO] Värskendamine vanem org.touchbit.shields4j:shields4j-parent
[INFO] versioonilt 1.0.0 versioonile 1.0.0-SNAPSHOT
[INFO]
[INFO] Töötlus org.touchbit.shields4j:testng
[INFO] Värskendamine vanem org.touchbit.shields4j:shields4j-parent
[INFO] versioonilt 1.0.0 versioonile 1.0.0-SNAPSHOT
[INFO] Värskendamine sõltuvust org.touchbit.shields4j:client
[INFO] versioonilt 1.0.0 versioonile 1.0.0-SNAPSHOT
[INFO] Värskendamine sõltuvust org.touchbit.shields4j:test-core
[INFO] versioonilt 1.0.0 versioonile 1.0.0-SNAPSHOT
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor kokkuvõte:
[INFO]
[INFO] Shields4J 1.0.0 .................................... EDU [ 0.992 s]
[INFO] test-core .......................................... VAHELEJÄETUD
[INFO] Shields4J klient ................................... VAHELEJÄETUD
[INFO] TestNG kuulaja 1.0.0 .............................. VAHELEJÄETUD
[INFO] ------------------------------------------------------------------------
[INFO] EHITUS EDU
[INFO] ------------------------------------------------------------------------
[INFO] Kogu aeg: 2.483 s
[INFO] Lõpetatud: 2019-04-21T02:40:42+03:00
[INFO] ------------------------------------------------------------------------
$ mvn clean deploy -DskipTests=${SKIP_TESTS}
[INFO] Projekti otsimine...
[INFO] Ehitise kontrollimine, kokku 4 moodulit...
[INFO] Nexus Staging funktsioonide installimine:
[INFO] ... kokku 4 täitmist maven-deploy-plugin asendatud nexus-staging-maven-plugin
[INFO] ------------------------------------------------------------------------
[INFO] Reactor ehitamise järjekord:
[INFO]
[INFO] Shields4J [pom]
[INFO] test-core [jar]
[INFO] Shields4J klient [jar]
[INFO] TestNG kuulaja [jar]
[INFO]
[INFO] -----------------------------
[INFO] Ehitamine Shields4J 1.0.0-SNAPSHOT [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
...
KUSTUTATUD
...
[INFO] * Kohalikult kogutud snapshot artefaktide suurdeployimine lõpetatud.
[INFO] Kaugdeploeerimine lõpetatud edukalt.
[INFO] ------------------------------------------------------------------------
[INFO] Reactor kokkuvõte:
[INFO]
[INFO] Shields4J 1.0.0-SNAPSHOT ........................... EDU [ 2.375 s]
[INFO] test-core .......................................... EDU [ 3.929 s]
[INFO] Shields4J klient ................................... EDU [ 3.815 s]
[INFO] TestNG kuulaja 1.0.0-SNAPSHOT ..................... EDU [ 36.134 s]
[INFO] ------------------------------------------------------------------------
[INFO] EHITUS EDU
[INFO] ------------------------------------------------------------------------
[INFO] Kogu aeg: 47.629 s
[INFO] Lõpetanud: 2019-04-21T02:41:32+03:00
[INFO] ------------------------------------------------------------------------Seetõttu on nexus laaditud versioon .
Kõik snapshot versioonid saab veebilehelt kustutada oma kontoga.
Release versiooni avaldamine
Sildi seadmisel käivitub automaatselt vastav ülesanne projektis deploy, et laadida väljaandmist nexusesse ().
Kõige toredam on see, et nexus sulgeb väljaande automaatselt.
[INFO] Teostamine kaugstaging...
[INFO]
[INFO] * Kaugstaging profiili ID "9043b43f77dcc9"
[INFO] * Loob staging repository ID "orgtouchbit-1037".
[INFO] * Staging repository aadressil https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1037
[INFO] * Laadimine kohapeal stseeritud artefaktidest profiilile org.touchbit
[INFO] * Kohapeal stseeritud artefaktide laadimine on lõppenud.
[INFO] * Staging repository sulgemine ID "orgtouchbit-1037".
Ootamine operatsiooni lõpetamiseks...
.........
[INFO] Kaugstaging 1 repository, lõpetatud eduga.
[INFO] ------------------------------------------------------------------------
[INFO] Reaktori kokkuvõte:
[INFO]
[INFO] Shields4J 1.0.0 .................................... EDU [ 9.603 s]
[INFO] test-core .......................................... EDU [ 3.419 s]
[INFO] Shields4J klient ................................... EDU [ 9.793 s]
[INFO] TestNG kuulaja 1.0.0 .............................. EDU [01:23 min]
[INFO] ------------------------------------------------------------------------
[INFO] EHITUS EDU
[INFO] ------------------------------------------------------------------------
[INFO] Koguaeg: 01:47 min
[INFO] Lõpetatud: 2019-04-21T04:05:46+03:00
[INFO] ------------------------------------------------------------------------Ja kui midagi läheb valesti, siis ülesanne kukub kindlasti läbi
[INFO] Kaugtöötlemine...
[INFO]
[INFO] * Kaugtöötlemine stseeni profiili ID "9043b43f77dcc9" rakendamine
[INFO] * Loodud stseeni hoidlaga ID "orgtouchbit-1038".
[INFO] * Stseeni hoidla https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1038
[INFO] * Kohalikult stseeni artefaktide üleslaadimine profiilile org.touchbit
[INFO] * Kohalikult stseeni artefaktide üleslaadimine lõpetatud.
[INFO] * Stseeni hoidla ID "orgtouchbit-1038" sulgemine.
Ootab toimingu lõpetamist...
.......
[ERROR] Reegli rikkumine stseeni hoidla ID "orgtouchbit-1039" sulgemisel.
[ERROR]
[ERROR] Nexus Stseeni Reegli Rikkumise Raport
[ERROR] ==================================
[ERROR]
[ERROR] Hoidla "orgtouchbit-1039" rikkumised
[ERROR] Reegli "signature-staging" rikkumised
[ERROR] * Avalik võti puudub: Võti ID-ga: (1f42b618d1cbe1b5) ei saa leida <a href=http://keys.gnupg.net:11371/>http://keys.gnupg.net:11371/</a>. Laadige üles oma avalik võti ja proovige toimingut uuesti.
...
[ERROR] Kohaliku stseeni katalooge puhastamine pärast reegli rikkumist stseeni hoidlate sulgemisel: [orgtouchbit-1039]
[ERROR] * Konteksti kustutamine 9043b43f77dcc9.properties
[ERROR] Kaugtöötlemise hoidlate puhastamine pärast reegli rikkumist stseeni hoidlate sulgemisel: [orgtouchbit-1039]
[ERROR] * Ebaõnnestunud stseeni hoidla ID-ga "orgtouchbit-1039" kõrvaldamine (Reegli rikkumine stseeni hoidlate sulgemisel: [orgtouchbit-1039]).
[ERROR] Kaugtöötlemine lõppes ebaõnnestumisega: Stseeni reegli rikkumine!
[INFO] ------------------------------------------------------------------------
[INFO] Reactor kokkuvõte:
[INFO]
[INFO] Shields4J 1.0.0 .................................... EDU [ 4.073 s]
[INFO] test-core .......................................... EDU [ 2.788 s]
[INFO] Shields4J klient ................................... EDU [ 3.962 s]
[INFO] TestNG listener 1.0.0 .............................. EBAÕNNESTUMINE [01:07 min]
[INFO] ------------------------------------------------------------------------
[INFO] EHITUSE EBAÕNNESTUMINE
[INFO] ------------------------------------------------------------------------Meil on nüüd alles üks valik. Kas eemaldada see versioon või avaldada see.
Pärast väljaandmist, mõne aja pärast, on artefaktid olemas
off-topic
Minu jaoks oli üllatus, et Maven indekseerib teisi avalikke hoidlaid.
Pidin lisama robots.txt, kuna ta indekseeris mu vana hoidla.
Kokkuvõte
Mida me nüüd omame
- Eraldi deploy-projekt, kus saab rakendada mitmeid CI ülesandeid artefaktide üleslaadimiseks avalikesse hoidlatesse erinevatele arenduskeeledele.
- Deploy-projekt on isoleeritud välisest sekkumisest ja seda saavad muuta ainult kasutajad, kellel on roll Owner ja Maintainer.
- Eraldi Specific Runner kuuma vahemäluga, et käivitada ainult deploy-ülesandeid.
- Snapshot/release versioonide avaldamine avalikus hoidlas.
- Automaatne kontroll release versiooni valmiduse osas avaldamiseks maven centralis.
- Kaitse automaatse avaldamise eest "toore" versioonide osas maven centralis.
- Snapshot versioonide kogumine ja avaldamine "ühe klikiga".
- Üks hoidla snapshot/release versioonide saamiseks.
- Üldine torujuhe java projekti koostamiseks/testimiseks/avalikustamiseks.
GitLab CI seadistamine ei ole nii keeruline teema, nagu esmapilgul näib. Piisab, kui paar korda seadistada CI "võtmed kätte" ja oled juba kaugel mitteprofessionaalist. Eriti kuna GitLabi dokumentatsioon on üsna ulatuslik. Ära karda esimest sammu. Tee ilmub astujate all (ei mäleta, kes selle ütles 🙂 ).
Ootan tagasisidet.
Järgmises artiklis räägin, kuidas seadistada GitLab CI ülesannete konkurentsi käivitamiseks integratsioonitestidega (katsetatavate teenuste käivitamine docker-compose abil), kui sul on ainult üks shell-runner.
Allikas: habr.com
