See artikkel on suunatud Java arendajatele, kellel on vajadus kiiresti avaldada oma tooteid Sonatype ja/või Maven Central reposse GitLabi abil. Artiklis räägin GitLab Runneri, GitLab CI ja Maven-plugin'i seadistamisest selle ülesande täitmiseks.
Eeltingimused:
- Mvn ja GPG võtmete turvaline säilitamine.
- Avalike CI ülesannete turvaline täitmine.
- Artefaktide (release/snapshot) laadimine avalikesse repo'desse.
- Release-versioonide automaatne kontrollimine Maven Centralisse avaldamiseks.
- Üldlahendus artefaktide laadimiseks mitmele projektile reposse.
- Lihtsus ja kasutusmugavus.
Sisu
Ülevaade
- Artefaktide avaldamise mehhanismi üksikasjalik kirjeldus Maven Centralisse Sonatype OSS Repository Hosting Service kaudu on juba kajastatud kasutaja , seega viitan artiklile vajalikes kohtades.
- Eelnevalt registreerume ja avame pilet repositori avamiseks (täpsemalt vaata jaotist ). Pärast repositori avamist kasutatakse JIRA kasutajanime/parooli (edaspidi Sonatype konto) artefaktide üleslaadimiseks Sonatype nexusesse.
- Edasi on GPG võtme genereerimise protsess kirjeldatud üsna kuivalt. Täpsemalt vaata jaotist
- Kui kasutad Linuxi konsoli GPG võtme genereerimiseks (gnupg/gnupg2), tuleb paigaldada entenete genereerimiseks. Vastasel juhul võib võtme genereerimine kesta väga kaua.
- Avalike GPG võtmete salvestamisteenused
Deploy-projekti seadistamine GitLabis
- Esiteks tuleb luua ja seadistada projekt, kuhu salvestatakse pipeline artefaktide deploy’imiseks. Minu projekt kannab lihtsalt ja arusaadavalt nime —
- Pärast repositori loomist tuleb piirata muutmise ligipääsu repositorile.
Liigume projekti -> Seaded -> Repositoorium -> Kaitstud harud. Eemaldame kõik reeglid ja lisame ainulaadse reegli Wildcard * õigusega push ja merge vaid kasutajatele, kellel on hooldaja roll. See reegel kehtib kõigile kasutajatele nii antud projektis kui ka rühmas, kuhu see projekt kuulub.
- Kui mingeid hooldajaid on mitu, on parim lahendus piirata juurdepääsu projektile üldiselt.
Liigume projekti -> Seaded -> Üldine -> Nähtavus, projekti omadused, õigused ja seame Projekti nähtavuse väärtuseks Privaatne.
Minu projekt on avalikult saadaval, kuna kasutan oma GitLabi runner'it ja muudatuste tegemise juurdepääs on vaid minul. Samuti ei ole minu huvides avaldada privaatset teavet avalikes pipeline logides. - Repositooriumi muutmise reeglite karmistamine
Liigume projekti -> Seaded -> Repositoorium -> Push reeglid ja seame lipud Komiteeri piiramine, Kontrolli, kas autor on GitLabi kasutaja. Samuti soovitan seadistada , ja seada lige Reject unsigned commits. - Seejärel on vaja seadistada ülesande käivitamise päästik
Liigume projekti -> Seaded -> CI / CD -> Pipeline päästikud ja loome uue trigger-tokeni
Seda tokeni saab kohe lisada projektigruppide muutujate üldisse konfiguratsiooni.
Liigume grupisse -> Seaded -> CI / CD -> Muutujad ja lisame muutujaDEPLOY_TOKENtrigger-token väärtusega.
GitLabi jooksja
Selles jaotises on kirjas konfiguratsioon ülesannete käivitamiseks deploy jaoks, kasutades isiklikku (Specific) ja avalikku (Shared) runnerit.
Spetsiaalne Runner
Ma kasutan oma runner'eid, sest see on mugav, kiire ja odav.
Runneri jaoks soovitan Linuxi VDS, millel on 1 CPU, 2 GB RAM ja 20 GB HDD. Hinnaks tuleb ~3000 ₽ aastas.
Minu runner
Runneri jaoks valisin VDS, millel on 4 CPU, 4 GB RAM ja 50 GB SSD. See maksis ~11000 ₽ ja ma ei ole kordagi kahetsenud.
Kokku on mul 7 masinat. 5 Aruba's ja 2 Ihoris.
Nii et me oleme saanud runner'i. Nüüd hakkame seda seadistama.
Logime SSH kaudu masinale ja paigaldame java, git, maven, gnupg2.
Paigaldame GitLab runner'i
- Loome uue rühma
runnersudo groupadd runner - Loome direktori maven'i vahemälu jaoks ja anname grupile õigused
runner
Seda punkti võib vahele jätta, kui te ei plaani käivitada mitut runner'it ü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ärgmist ridaAllowUsers root@* gitlab-deployer@127.0.0.1 - Taaskäivitame
sshdsystemctl restart sshd - Seame kasutajale parooli
gitlab-deployer(võib olla lihtne, kuna kohalike kasutajate jaoks on piirangud)passwd gitlab-deployer - Installime GitLab Runner'i (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 - Siseneme saidile gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners ja kopeerime registration token'i
Ekraanipilt
- Registreerime runner'i
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 koordineerija URL (nt https://gitlab.com/):
https://gitlab.com/
Palun sisestage gitlab-ci token selle runner'i jaoks:
REGISTRATION_TOKEN
Palun sisestage gitlab-ci kirjeldus selle runner'i jaoks:
[ih1174328.vds.myihor.ru]: Deploy Runner
Palun sisestage gitlab-ci sildid selle runner'i jaoks (komaga eraldatud):
deploy
Runner'i registreerimine... õnnestus runner=ZvKdjJhx
Palun sisestage täitja: docker-ssh, parallels, virtualbox, docker-ssh+machine, kubernetes, docker, ssh, docker+machine, shell:
shell
Runner registreeritud edukalt. Võite selle käivitada, kuid kui see juba töötab, peaks konfiguratsioon automaatselt uuendama!- Kontrollime, et jooksja on registreeritud. Liigume saidile gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Specific Runners -> Runners, mis on selle projekti jaoks aktiveeritud
Ekraanipilt
- Lisame erakondlik 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äivitame teenuse.
systemctl enable gitlab-deployer.service systemctl start gitlab-deployer.service systemctl status gitlab-deployer.service - Kontrollime, et jooksja on käivitatud.
Näide
GPG võtmete genereerimine
- Sama masinaga siseneme ssh kaudu kasutajana
gitlab-deployer(see on oluline GPG võtme genereerimiseks)ssh gitlab-deployer@127.0.0.1 - Genereerime võtme, vastates küsimustele. Kasutasin oma nime ja e-posti.
Oluline on määrata parool võtmele. 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 üles meie avaliku võtme võtme_SERVERile
gpg --keyserver keys.gnupg.net --send-key 00000000 gpg: sending key 00000000 to hkp server keys.gnupg.net
Maveni seadistamine
- Siseneme kasutajana
gitlab-deployersu gitlab-deployer - Loome maven katalooge repository ja linkime selle vahemäluga (ärge eksige)
Selle sammu võib vahele jätta, kui te ei kavatse käivitada mitu jooksjat ühel masinal.mkdir -p ~/.m2/repository ln -s /usr/cache/.m2/repository /home/gitlab-deployer/.m2/repository - Loome meistrivõtme
mvn --encrypt-master-password password {hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=} - Loome faili ~/.m2/settings-security.xml
{hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=} - Krüpteerime Sonatype'i 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'i konto kasutajanimi
Sellega on jooksja seadistamine lõpetatud, edasi liikuda jao juurde
Jagatud Runner
GPG võtmete genereerimine
- Esiteks on vaja luua GPG võti. Selleks installime gnupg.
yum install -y gnupg - Loome võtme, vastates küsimustele. Kasutasin enda nime ja e-posti. Oluline on märkida võtme parool.
gpg --gen-key - Toome võtme teabe välja
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 üles meie avaliku võtme võtme_SERVERile
gpg --keyserver keys.gnupg.net --send-key 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 gpg: saatmine võti 2D0D1706366FC4AEF79669E24D09C55BBA3FD728 hkp serverisse 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 seadete juurde -> Settings -> CI / CD -> Variables ja salvestame privaatvõtme muutujasse
GPG_SECRET_KEY
Maveni seadistamine
- Loome meistrivõtme
mvn --encrypt-master-password password {hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=} - Liigume projekti seadete juurde -> Settings -> CI / CD -> Variables ja salvestame muutujasse
SETTINGS_SECURITY_XMLjärgmised read:{hnkle5BJ9HUHUMP+CXfGBl8dScfFci/mpsur/73tR2I=} - Krüpteerime Sonatype'i konto parooli
mvn --encrypt-password SONATYPE_PASSWORD {98Wv5+u+Tn0HX2z5G/kR4R8Z0WBgcDBgi7d12S/un+SCU7uxzaZGGmJ8Cu9pAZ2J} - Liigume projekti seadete juurde -> Settings -> CI / CD -> Variables 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'i konto kasutajanimi
Docker pildi deployment
- Loome piisavalt lihtne Dockerfile, et käivitada ülesandeid deploy'iga koos vajaliku Java versiooniga. Allpool on esitatud näidis 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 teie projekti jaoks
docker build -t registry.gitlab.com/group/deploy . - Autentiseerime ja laadime konteineri registry'sse.
docker login -u USER -p PASSWORD registry.gitlab.com docker push registry.gitlab.com/group/deploy
GitLab CI
Projekti deployment
Lisame deploy-projekti juurese faili .gitlab-ci.yml
Skriptis on esitatud kaks vastastikku välistavat ülesannet deploy'iks. Specific Runner või Shared Runner vastavalt.
.gitlab-ci.yml
etapid:
- juurutamine
Spetsiifiline jooksja:
extends: .java_deploy_template
# Ülesanne käivitub teie shell- jooksjal
tags:
- juurutamine
Ühiskasutatav jooksja:
extends: .java_deploy_template
# Ülesanne käivitub avalikul docker-jooksjal
tags:
- docker
# Pilt jaotises GitLab Runner -> Ühiskasutatav jooksja -> 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: juurutamine
# Ülesanne käivitub triggereid pidi, kui on edastatud muutuja DEPLOY väärtusega java
only:
variables:
- $DEPLOY == "java"
variables:
# keelame praeguse projekti kloonimise
GIT_STRATEGY: none
script:
# Anname võimaluse salvestada parool avatud kujul
- git config --global credential.helper store
# Salvestame ajutised kredentsid kasutajale gitlab-ci-token
# Token kehtib kõigi avalike projektide jaoks gitlab.com ja grupiprojektide jaoks
- echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com" >> ~/ .git-credentials
# Täielikult puhastame praeguse kausta
- rm -rf .* *
# Kloonime projekti, mida tahame Sonatype Nexusis juurutada
- git clone ${DEPLOY_CI_REPOSITORY_URL} .
# Lülitame vastavale kommitile
- git checkout ${DEPLOY_CI_COMMIT_SHA} -f
# Kui ükski pom.xml fail ei sisalda parameetrit autoReleaseAfterClose, katkestame ehituse.
# Vastupidisel juhul on oht üles laadida toored artefaktid maven centralsse
- >
for pom in $(find . -name pom.xml); do
if [[ $(grep -q autoReleaseAfterClose "$pom" && echo $?) == 0 ]]; then
echo "Fail $pom sisaldab keelatud seadistust: <autoReleaseAfterClose>";
exit 1;
fi;
done
# Kui parameeter DEPLOY_CI_COMMIT_TAG on tühi, seame sunniviisiliselt 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 ehitamiseks ja juurutamiseks
- mvn clean deploy -DskipTests=trueJava projekt
Java projektides, mis on ette nähtud avalikesse repository'desse laadimiseks, tuleb lisada 2 etappi Release ja Snapshot versioonide laadimiseks.
.gitlab-ci.yml
stages:
- build
- test
- verify
- deploy
Release:
extends: .trigger_deploy
# Käivitada ülesanne ainult sildi järgi.
only:
- tags
Snapshot:
extends: .trigger_deploy
# Käivitame ülesande SNAPSHOT versiooni avaldamiseks käsitsi
when: manual
# Ärge käivitage ülesannet, kui silt on määratud.
except:
- tags
.trigger_deploy:
stage: deploy
variables:
# Lülitame välja käesoleva projekti kloonimise
GIT_STRATEGY: none
# Link deploy-ülesande triggerele
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-i, kuna --fail --show-error lippudega
# ei väljasta 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.
Üksikasjalikumalt
Loomisin eraldi projekti kuhu paigutasin CI šablooni Java projektide jaoks .
common.yml
etapid:
- koostamine
- testimine
- kontrollimine
- juurutamine
muutujad:
SONAR_ARGS: "
-Dsonar.gitlab.commit_sha=${CI_COMMIT_SHA}
-Dsonar.gitlab.ref_name=${CI_COMMIT_REF_NAME}
"
.build_java_project:
etapp: koostamine
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: koostamine
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:
MODULE: ""
skript:
- cd ${MODULE}
- 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: kontrollimine
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:
pikas: .trigger_deploy
ainult:
- sildid
.trigger_snapshot_deploy:
pikas: .trigger_deploy
kui: käsitsi
välja arvatud:
- sildid
Seetõttu näeb .gitlab-ci.yml fail Java projektides üsna kompaktne ja üheselt mõistetav välja.
.gitlab-ci.yml
include: https://gitlab.com/TouchBIT/gitlab-ci/raw/master/common.yml
Shields4J:
extends: .build_java_project
Sphinx doc:
extends: .build_sphinx_doc
variables:
DOCKERFILE: .docs/Dockerfile
Sonar review:
extends: .sonar_review
dependencies:
- Shields4J
Release:
extends: .trigger_release_deploy
Snapshot:
extends: .trigger_snapshot_deploypom.xml konfigureerimine
Seda teemat on väga detailselt käsitletud. ühes , seetõttu kirjeldan ma mõningaid pluginate kasutamise nüansse. Kirjeldan ka, kui lihtsalt ja mugavalt saab neid kasutada nexus-staging-maven-plugin, kui te ei soovi ega saa kasutada org.sonatype.oss:oss-parent oma projekti vanemana.
maven-install-plugin
Paigaldab mooduleid kohalikku repositooriumisse.
On väga kasulik kohalike lahenduste kontrollimiseks teistes projektides, samuti ristsummana.
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
Projekti jaoks javadoc'i genereerimine.
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 javadoc'i genereerida, on abiks 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 mudeliga projekt ja te ei soovi teatud mudelit hoidlasse laadida, peate lisama pom.xml failis nexus-staging-maven-plugin lipu skipNexusStagingDeployMojo
org.sonatype.plugins
nexus-staging-maven-plugin
truePärast laadimist on snapshot/release versioonid saadaval
SonatypeNexus
https://oss.sonatype.org/content/groups/staging/
Veel plusse
- Väga rikkalik sihtide loetelu nexus hoidla haldamiseks (
mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin). - Automaatne väljaande kontroll maven central'i üleslaadimise võimaluse osas
Tulemus
SNAPSHOT versiooni avaldamine
Projekti koostamisel on võimalik käsitsi käivitada ülesanne SNAPSHOT versiooni laadimiseks nexusisse
Selle ülesande käivitamisel aktiveeritakse vastav ülesanne projekti deploy ().
Lühendatud logi
Töötamine gitlab-runner 11.10.0 (3001a600)
Deploy runner JSKWyxUw peal
Kasutatakse Shell täitjat...
Töötamine ih1174328.vds.myihor.ru...
Skipitud Git'i repositooriumi seadistamine
Skipitud Git'i checkout
Skipitud Git'i alamkoodide 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: kontrollitakse '850f86aa317194395c5387790da1350e437125a7'.
Olete 'detached HEAD' olekus. Saate ringi vaadata, teha eksperimentaalseid
muudatusi ja need salvestada, ning võite katkestada kõik tehtud muudatused
selles olekus, tehes veel ühe checkout'i.
Kui soovite luua uue haru, et säilitada loodud kommid, saate
seda teha (nüüd või hiljem), kasutades -b checkout'i käsu juures uuesti. Näide:
git checkout -b new_branch_name
HEAD on nüüd 850f86a... skip deploy test-core
$ for pom in $(find . -name pom.xml); do # kokkuvolditud mitmerealine käsk
$ if [[ "${DEPLOY_CI_COMMIT_TAG}" != "" ]]; then # kokkuvolditud mitmerealine käsk
[INFO] Projektiotsing...
[INFO] Ülevaade koostamisest, kokku 4 moodulit...
[INFO] Nexus Staging funktsioonide installimine:
[INFO] ... kokku 4 maven-deploy-plugin'i täitmist asendatud nexus-staging-maven-plugin'iga
[INFO] ------------------------------------------------------------------------
[INFO] Reaktori koostamisjärjestus:
[INFO]
[INFO] Shields4J [pom]
[INFO] test-core [jar]
[INFO] Shields4J klient [jar]
[INFO] TestNG kuulaja [jar]
[INFO]
[INFO] -----------------------------
[INFO] Koostamine Shields4J 1.0.0 [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.5:set (default-cli) @ shields4j-parent ---
[INFO] Otsitakse kohalikku agregaatorijuuri...
[INFO] Kohalik agregatsiooni juur: /home/gitlab-deployer/JSKWyxUw/0/TouchBIT/deploy/shields4j
[INFO] Töötlemine org.touchbit.shields4j:shields4j-parent:1.0.0 -> 1.0.0-SNAPSHOT
[INFO] Töötlemine org.touchbit.shields4j:shields4j-parent
[INFO] Uuendamine projekti org.touchbit.shields4j:shields4j-parent
[INFO] versioonist 1.0.0 versioonini 1.0.0-SNAPSHOT
[INFO]
[INFO] Töötlemine org.touchbit.shields4j:client
[INFO] Uuendamine vanemast org.touchbit.shields4j:shields4j-parent
[INFO] versioonist 1.0.0 versioonini 1.0.0-SNAPSHOT
[INFO] Uuendamine sõltuvusest org.touchbit.shields4j:test-core
[INFO] versioonist 1.0.0 versioonini 1.0.0-SNAPSHOT
[INFO]
[INFO] Töötlemine org.touchbit.shields4j:test-core
[INFO] Uuendamine vanemast org.touchbit.shields4j:shields4j-parent
[INFO] versioonist 1.0.0 versioonini 1.0.0-SNAPSHOT
[INFO]
[INFO] Töötlemine org.touchbit.shields4j:testng
[INFO] Uuendamine vanemast org.touchbit.shields4j:shields4j-parent
[INFO] versioonist 1.0.0 versioonini 1.0.0-SNAPSHOT
[INFO] Uuendamine sõltuvusest org.touchbit.shields4j:client
[INFO] versioonist 1.0.0 versioonini 1.0.0-SNAPSHOT
[INFO] Uuendamine sõltuvusest org.touchbit.shields4j:test-core
[INFO] versioonist 1.0.0 versioonini 1.0.0-SNAPSHOT
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reaktori kokkuvõte:
[INFO]
[INFO] Shields4J 1.0.0 .................................... EDU [ 0.992 s]
[INFO] test-core .......................................... JÄETUD
[INFO] Shields4J klient ................................... JÄETUD
[INFO] TestNG kuulaja 1.0.0 .............................. JÄETUD
[INFO] ------------------------------------------------------------------------
[INFO] KOOSTAMINE EDU
[INFO] ------------------------------------------------------------------------
[INFO] Koos kokkuvõttes kulunud aeg: 2.483 s
[INFO] Lõpetatud: 2019-04-21T02:40:42+03:00
[INFO] ------------------------------------------------------------------------
$ mvn clean deploy -DskipTests=${SKIP_TESTS}
[INFO] Projektiotsing...
[INFO] Ülevaade koostamisest, kokku 4 moodulit...
[INFO] Nexus Staging funktsioonide installimine:
[INFO] ... kokku 4 maven-deploy-plugin'i täitmist asendatud nexus-staging-maven-plugin'iga
[INFO] ------------------------------------------------------------------------
[INFO] Reaktori koostamisjärjestus:
[INFO]
[INFO] Shields4J [pom]
[INFO] test-core [jar]
[INFO] Shields4J klient [jar]
[INFO] TestNG kuulaja [jar]
[INFO]
[INFO] -----------------------------
[INFO] Koostamine Shields4J 1.0.0-SNAPSHOT [1/4]
[INFO] --------------------------------[ pom ]---------------------------------
...
KUSTUTATUD
...
[INFO] * Kohalike kogutud snapshot'i artefaktide suurem osa lõpetatud.
[INFO] Kaugtegevuse lõpetamine õnnestus.
[INFO] ------------------------------------------------------------------------
[INFO] Reaktori 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] KOOSTAMINE EDU
[INFO] ------------------------------------------------------------------------
[INFO] Koos kokkuvõttes kulunud aeg: 47.629 s
[INFO] Lõpetatud: 2019-04-21T02:41:32+03:00
[INFO] ------------------------------------------------------------------------Nexus's versioon on üles laaditud .
Kõik snapshot versioonid saab eemaldada veebirepositooriumist oma konto all.
Release versiooni avaldamine
Sildiga seadistamisel aktiveeritakse automaatselt vastav ülesanne deploying projektis, et laadida versioon üles nexus.).
Tore on see, et nexus's toimub automaatne close release.
[INFO] Teostan kaugstagingut...
[INFO]
[INFO] * Kaugstaging profiili ID "9043b43f77dcc9".
[INFO] * Loodud staging repositoorium ID-ga "orgtouchbit-1037".
[INFO] * Staging repositoorium aadressil https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1037
[INFO] * Kohalikult staadiumisse pandud artefaktide laadimine profiilile org.touchbit
[INFO] * Kohalikult staadiumisse pandud artefaktide laadimine lõpule viidud.
[INFO] * Staging repositooriumi sulgemine ID-ga "orgtouchbit-1037".
Ootame, kuni operatsioon on lõppenud...
.........
[INFO] Kaugstaging 1 repositooriumi, lõpetatud eduga.
[INFO] ------------------------------------------------------------------------
[INFO] Reaktori kokkuvõte:
[INFO]
[INFO] Shields4J 1.0.0 .................................... EDUS [ 9.603 s]
[INFO] test-core .......................................... EDUS [ 3.419 s]
[INFO] Shields4J kliendi .................................. EDUS [ 9.793 s]
[INFO] TestNG kuulaja 1.0.0 .............................. EDUS [01:23 min]
[INFO] ------------------------------------------------------------------------
[INFO] EHITUS EDUS
[INFO] ------------------------------------------------------------------------
[INFO] Kokkuvõtuaeg: 01:47 min
[INFO] Lõpetatud: 2019-04-21T04:05:46+03:00
[INFO] ------------------------------------------------------------------------Ja kui midagi läheb valesti, jääb ülesanne kindlasti pooleli.
[INFO] Kaugena kaugelt stseen...
[INFO]
[INFO] * Kaugelt stseen profiili ID-ga "9043b43f77dcc9"
[INFO] * Loodud stseenide hoidla ID-ga "orgtouchbit-1038".
[INFO] * Stseenide hoidla aadress https://oss.sonatype.org:443/service/local/staging/deployByRepositoryId/orgtouchbit-1038
[INFO] * Kohalikult stseenitud artefaktide üleslaadimine profiili org.touchbit
[INFO] * Kohalikult stseenitud artefaktide üleslaadimine lõpetatud.
[INFO] * Sulgemine stseenide hoidla ID-ga "orgtouchbit-1038".
Ootab toimingu lõppu...
.......
[ERROR] Reegli ebaõnnestumine, kui prooviti sulgeda stseenide hoidla ID-ga "orgtouchbit-1039".
[ERROR]
[ERROR] Nexus Stseenireeglite ebaõnnestumise aruanne
[ERROR] ==================================
[ERROR]
[ERROR] Hoidla "orgtouchbit-1039" ebaõnnestumised
[ERROR] Reegli "signature-staging" ebaõnnestumised
[ERROR] * Avaliku võti puudub: Võti ID-ga (1f42b618d1cbe1b5) ei leitud <a href=http://keys.gnupg.net:11371/>http://keys.gnupg.net:11371/</a>. Laadige oma avalik võti üles ja proovige toimingut uuesti.
...
[ERROR] Kohaliku stseeni katalooge koristamine pärast reegli ebaõnnestumist stseenide hoidlate sulgemisel: [orgtouchbit-1039]
[ERROR] * Kustutamine kontekst 9043b43f77dcc9.properties
[ERROR] Kaugelt stseeni hoidlate koristamine pärast reegli ebaõnnestumist stseenide hoidlate sulgemisel: [orgtouchbit-1039]
[ERROR] * Ebaõnnestunud stseenide hoidla ID-ga "orgtouchbit-1039" kustutamine (reegli ebaõnnestumine stseenide hoidlate sulgemisel: [orgtouchbit-1039]).
[ERROR] Kaugelt stseen lõppes ebaõnnestumisega: stseenireeglite ebaõnnestumine!
[INFO] ------------------------------------------------------------------------
[INFO] Reaktorite 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 kuulaja 1.0.0 .............................. EBAÕNNESTUMINE [01:07 min]
[INFO] ------------------------------------------------------------------------
[INFO] KODULE OHT
[INFO] ------------------------------------------------------------------------Meil on jäänud vaid üks valik. Kas eemaldada see versioon või avaldada see.
Pärast väljalaskmist, mõne aja pärast saavad artefaktid olema
offtopic
Minu jaoks oli üllatus, et maven indekseerib teisi avalikke hoidlaid.
Pidin lisama robots.txt, kuna see indekseeris mu vana hoidla.
Kokkuvõte
Mida me omame
- Erinev deploy-projekt, kus saab teostada mitu CI ülesannet artefaktide laadimiseks avalikesse hoidlatesse erinevates arenduskeeltes.
- Deploy-projekt on isoleeritud kõrvaliste sekkumiste eest ja seda saavad muuta ainult kasutajad, kellel on roll Owner ja Maintainer.
- Eriline Specific Runner „kuuma” vahemälu jaoks, et käivitada ainult deploy ülesandeid.
- Snapshot / release versioonide avaldamine avalikus hoidlas.
- Automaatne kontroll release versiooni valmiduse kohta avaldamiseks maven centralis.
- Kaitse automaatse avaldamise eest „toore” versiooni maven centralis.
- Snapshot versioonide koostamine ja avaldamine „ühe klõpsuga”.
- Üks hoidla snapshot / release versioonide hankimiseks.
- Ühine torustik java projekti koostamiseks / testimiseks / avaldamiseks.
GitLab CI seadistamine ei ole nii keeruline teema, nagu esmapilgul tundub. Piisab paar korda seadistada CI "võtmed kätte" ja oled juba kaugel algajast. Eriti kuna GitLabi dokumentatsioon on väga põhjalik. Ära karda esimest sammu. Tee tee, käies sellel (ei mäleta, kes seda ütles 🙂 ).
Ootan tagasisidet.
Järgmises artiklis räägin, kuidas seadistada GitLab CI konkurentsivõimeliste ülesannete käivitamiseks koos integratsiooni testidega (testitavate teenuste käitamine docker-compose'i abil), kui sul on ainult üks shell runner.
Allikas: habr.com
