ProHoster > Blog > Rianachd > A’ stèidheachadh GitLab CI gus pròiseact java a luchdachadh suas gu maven central
A’ stèidheachadh GitLab CI gus pròiseact java a luchdachadh suas gu maven central
Tha an artaigil seo airson luchd-leasachaidh java a dh’ fheumas na toraidhean aca fhoillseachadh gu sgiobalta gu stòran sonatype agus / no maven meadhanach a ’cleachdadh GitLab. San artaigil seo, bruidhnidh mi mu bhith a’ stèidheachadh gitlab-runner, gitlab-ci agus maven-plugin gus an duilgheadas seo fhuasgladh.
Ro-ghoireasan:
Stòradh sàbhailte de iuchraichean mvn agus GPG.
Cur an gnìomh gnìomhan CI poblach gu tèarainte.
A’ luchdachadh suas stuthan (sgaoileadh / dealbh) gu stòran poblach.
Sgrùdadh fèin-ghluasadach air dreachan fuasglaidh airson am foillseachadh ann am meadhan maven.
Fuasgladh coitcheann airson stuthan a luchdachadh suas gu stòr airson grunn phròiseactan.
Tha tuairisgeul mionaideach air an uidheamachd airson stuthan fhoillseachadh gu Maven Central tro Sheirbheis aoigheachd Stòr Sonatype OSS air a mhìneachadh mar-thà ann an artaigil seo neach-cleachdaidh Googolplex, mar sin bheir mi iomradh air an artaigil seo anns na h-àiteachan ceart.
Clàraich ro-làimh aig Sonatype JIRA agus tòisich tiogaid gus an stòr fhosgladh (airson tuilleadh fiosrachaidh, leugh an earrann Cruthaich tiogaid Sonatype JIRA). Às deidh an stòr fhosgladh, thèid an logadh a-steach / facal-faire JIRA paidhir (ris an canar an cunntas Sonatype an-seo) a chleachdadh gus artifacts a luchdachadh suas chun Sonatype nexus.
A bharrachd air an sin, thathas a’ toirt cunntas gu math tioram air a’ phròiseas airson iuchair GPG a ghineadh. Faic an earrann airson tuilleadh fiosrachaidh. A’ rèiteachadh GnuPG gu Soidhnigeadh Artifacts
Ma tha thu a’ cleachdadh consol Linux gus iuchair GPG a ghineadh (gnupg/gnupg2), feumaidh tu stàladh innealan rng gus entropy a ghineadh. Rud eile, faodaidh prìomh ghineadh ùine mhòr a thoirt.
A’ stèidheachadh pròiseact cleachdadh ann an GitLab
An toiseach, feumaidh tu pròiseact a chruthachadh agus a rèiteachadh anns am bi an loidhne-phìoban air a stòradh airson artifacts a chleachdadh. Dh’ ainmich mi mo phròiseact gu sìmplidh agus gu sìmplidh - cleachdadh
Às deidh dhut an stòr a chruthachadh, feumaidh tu ruigsinneachd a chuingealachadh gus an stòr atharrachadh.
Rach gu pròiseact -> Roghainnean -> Stòr -> Meuran Dìon. Bidh sinn a’ cuir às do na riaghailtean gu lèir agus a’ cur aon riaghailt ri Wildcard * leis a’ chòir a bhith a’ putadh agus a’ tighinn còmhla a-mhàin airson luchd-cleachdaidh le dreuchd Neach-gleidhidh. Bidh an riaghailt seo ag obair airson luchd-cleachdaidh a’ phròiseict seo agus a’ bhuidheann dham buin am pròiseact seo.
Ma tha grunn luchd-gleidhidh ann, is e am fuasgladh as fheàrr a bhith a’ cuingealachadh ruigsinneachd don phròiseact ann am prionnsapal.
Rach don phròiseact -> Roghainnean -> Coitcheann -> Faicsinneachd, feartan pròiseict, ceadan agus suidhich faicsinneachd pròiseict gu prìobhaideach.
Tha pròiseact agam ann an ruigsinneachd poblach, leis gu bheil mi a’ cleachdadh an GitLab Runner agam fhìn agus is e dìreach cothrom a tha agam an stòr atharrachadh. Uill, gu fìrinneach chan eil e gu math dhomh fiosrachadh prìobhaideach a nochdadh ann an logaichean loidhne-phìoban poblach.
A 'teannachadh nan riaghailtean airson atharrachadh an stòrais
Rach don phròiseact -> Suidhichidhean -> Stòr -> Put air Riaghailtean agus suidhich cuingealachadh an Neach-coimhid, Dèan cinnteach a bheil an t-ùghdar na bhrataichean cleachdaiche GitLab. Tha mi cuideachd a’ moladh stèidheachadh soidhnigeadh a dhèanamh, agus suidhich am bratach gealltanas Reject gun ainm.
An ath rud, feumaidh tu inneal-brosnachaidh a rèiteachadh gus gnìomhan a ruith
Rach don phròiseact -> Suidhichidhean -> CI / CD -> Piobair loidhne-phìoban agus cruthaich comharra brosnachaidh ùr
Faodar an comharra seo a chuir sa bhad ris an rèiteachadh coitcheann de chaochladairean airson buidheann de phròiseactan.
Rach don bhuidheann -> Roghainnean -> CI / CD -> caochladairean agus cuir caochladair ris DEPLOY_TOKEN le comharra brosnachaidh anns an luach.
Tha an earrann seo a’ toirt cunntas air an rèiteachadh airson gnìomhan ruith air an cleachdadh a’ cleachdadh an ruitheadair dùthchasach (Sònraichte) agus poblach (Co-roinnte).
Runaire sònraichte
Bidh mi a’ cleachdadh na ruitheadairean agam fhìn, oir an toiseach tha e goireasach, luath, saor.
Airson ruitheadair tha mi a’ moladh Linux VDS le 1 CPU, 2 GB RAM, 20 GB HDD. Prìs cuir a-mach ~ 3000₽ gach bliadhna.
Mo runadair
Airson an ruitheadair ghabh mi VDS 4 CPU, 4 GB RAM, 50 GB SSD. Chosg e ~11000₽ agus cha do ghabh e aithreachas a-riamh.
Tha 7 innealan agam gu h-iomlan. 5 air aruba agus 2 air ihor.
Mar sin, tha ruitheadair againn. A-nis cuiridh sinn air dòigh e.
Bidh sinn a’ dol chun inneal tro SSH agus a’ stàladh java, git, maven, gnupg2.
Cruthaich eòlaire airson an tasgadan maven agus sònraich còraichean buidhne runner
Faodaidh tu an ceum seo a sheachnadh mura h-eil thu an dùil iomadh ruitheadair a ruith air an aon inneal.
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!
Dèan cinnteach gu bheil an ruitheadair clàraichte. Rach gu gitlab.com -> deploy-project -> Settings -> CI/CD -> Runners -> Runners sònraichte -> Runners air an cur an gnìomh airson a’ phròiseict seo
Sgrion
A' cur ris fa leth seirbheis /etc/systemd/system/gitlab-deployer.service
Bidh sinn a’ cruthachadh iuchair le bhith a’ freagairt cheistean. Chleachd mi m’ ainm fhìn agus post-d.
Dèan cinnteach gun sònraich thu am facal-faire airson an iuchair. Thèid artifacts a shoidhnigeadh leis an iuchair seo.
gpg --gen-key
Thoir sùil air
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
A’ luchdachadh suas an iuchair phoblach againn gu prìomh fhrithealaiche
gpg --keyserver keys.gnupg.net --send-key 00000000
gpg: sending key 00000000 to hkp server keys.gnupg.net
Bidh sinn a 'dol fon neach-cleachdaidh gitlab-deployer
su gitlab-deployer
Cruthaich eòlaire maven stòras agus ceangail ris an tasgadan (na dèan mearachd)
Faodar an ceum seo a sheachnadh mura h-eil thu an dùil grunn ruitheadairean a ruith air an aon inneal.
An toiseach, feumaidh tu iuchair GPG a chruthachadh. Gus seo a dhèanamh, stàlaich gnupg.
yum install -y gnupg
Bidh sinn a’ cruthachadh iuchair le bhith a’ freagairt cheistean. Chleachd mi m’ ainm fhìn agus post-d. Dèan cinnteach gun sònraich thu am facal-faire airson an iuchair.
Bidh sinn a’ cruthachadh Dockerfile gu math sìmplidh gus gnìomhan a ruith air an cleachdadh leis an dreach a tha thu ag iarraidh de Java. Gu h-ìosal tha eisimpleir airson alpach.
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/
Cuir am faidhle .gitlab-ci.yml ri freumh a’ phròiseict cleachdadh
Tha an sgriobt a’ taisbeanadh dà ghnìomh cleachdadh gun samhail. Runner Sònraichte no Runner Co-roinnte fa leth.
.gitlab-ci.yml
stages:
- deploy
Specific Runner:
extends: .java_deploy_template
# Задача будет выполняться на вашем shell-раннере
tags:
- deploy
Shared Runner:
extends: .java_deploy_template
# Задача будет выполняться на публичном docker-раннере
tags:
- docker
# Образ из раздела GitLab Runner -> Shared Runner -> Docker
image: registry.gitlab.com/group/deploy-project:latest
before_script:
# Импортируем GPG ключ
- printf "${GPG_SECRET_KEY}" | gpg --batch --import
# Сохраняем maven конфигурацию
- printf "${SETTINGS_SECURITY_XML}" > ~/.m2/settings-security.xml
- printf "${SETTINGS_XML}" > ~/.m2/settings.xml
.java_deploy_template:
stage: deploy
# Задача сработает по триггеру, если передана переменная DEPLOY со значением java
only:
variables:
- $DEPLOY == "java"
variables:
# отключаем клонирование текущего проекта
GIT_STRATEGY: none
script:
# Предоставляем возможность хранения пароля в незашифрованном виде
- git config --global credential.helper store
# Сохраняем временные креды пользователя gitlab-ci-token
# Токен работает для всех публичных проектов gitlab.com и для проектов группы
- echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com" >> ~/.git-credentials
# Полностью чистим текущую директорию
- rm -rf .* *
# Клонируем проект который, будем деплоить в Sonatype Nexus
- git clone ${DEPLOY_CI_REPOSITORY_URL} .
# Переключаемся на нужный коммит
- git checkout ${DEPLOY_CI_COMMIT_SHA} -f
# Если хоть один pom.xml содержит параметр autoReleaseAfterClose валим сборку.
# В противном случае есть риск залить сырые артефакты в maven central
- >
for pom in $(find . -name pom.xml); do
if [[ $(grep -q autoReleaseAfterClose "$pom" && echo $?) == 0 ]]; then
echo "File $pom contains prohibited setting: <autoReleaseAfterClose>";
exit 1;
fi;
done
# Если параметр DEPLOY_CI_COMMIT_TAG пустой, то принудительно ставим SNAPSHOT-версию
- >
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
# Запускаем задачу на сборку и деплой артефактов
- mvn clean deploy -DskipTests=true
Ann am pròiseactan java a tha còir a bhith air an luchdachadh suas gu stòran poblach, feumaidh tu ceumannan 2 a chuir ris gus na dreachan Release and Snapshot a luchdachadh sìos.
.gitlab-ci.yml
stages:
- build
- test
- verify
- deploy
<...>
Release:
extends: .trigger_deploy
# Запускать задачу только пo тегу.
only:
- tags
Snapshot:
extends: .trigger_deploy
# Запускаем задачу на публикацию SNAPSHOT версии вручную
when: manual
# Не запускать задачу, если проставлен тег.
except:
- tags
.trigger_deploy:
stage: deploy
variables:
# Отключаем клонирование текущего проекта
GIT_STRATEGY: none
# Ссылка на триггер deploy-задачи
URL: "https://gitlab.com/api/v4/projects/<deploy project ID>/trigger/pipeline"
# Переменные deploy-задачи
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:
# Не использую cURL, так как с флагами --fail --show-error
# он не выводит тело ответа, если HTTP код 400 и более
- wget --content-on-error -qO- ${URL} --post-data ${POST_DATA}
Anns an fhuasgladh seo, chaidh mi beagan nas fhaide agus cho-dhùin mi aon teamplaid CI a chleachdadh airson pròiseactan java.
Gu mion-fhiosrachadh
Chruthaich mi pròiseact air leth gitlab-ci anns an do chuir e an teamplaid CI airson pròiseactan java cumanta.yml.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
<!-- Генерация javadoc должна быть после фазы генерации ресурсов -->
<phase>prepare-package</phase>
<configuration>
<!-- Очень помогает в публичных проектах -->
<failOnError>true</failOnError>
<failOnWarnings>true</failOnWarnings>
<!-- Убирает ошибку поиска документации в target директории -->
<detectOfflineLinks>false</detectOfflineLinks>
</configuration>
</execution>
</executions>
</plugin>
Ma tha modal agad anns nach eil java (mar eisimpleir goireasan a-mhàin)
No chan eil thu airson javadoc a ghineadh ann am prionnsapal, an uairsin airson cuideachadh maven-jar-plugin
Ma tha pròiseact ioma-mhodal agad, agus nach fheum thu modal sònraichte a luchdachadh suas don stòr, feumaidh tu cuir ri pom.xml a’ mhodal seo nexus-staging-maven-plugin le bratach skipNexusStagingDeployMojo
Às deidh dhut dealbh a luchdachadh suas / leigeil ma sgaoil tha dreachan rim faighinn ann an stèidse a chur air dòigh
<repositories>
<repository>
<id>SonatypeNexus</id>
<url>https://oss.sonatype.org/content/groups/staging/</url>
<!-- Не надо указывать флаги snapshot/release для репозитория -->
</repository>
</repositories>
Barrachd bhuannachdan
Liosta fìor bheairteach de thargaidean airson a bhith ag obair leis an stòr nexus (mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin).
Sgrùdadh fuasglaidh fèin-ghluasadach airson a luchdachadh suas gu maven central
Nuair a thèid an taga a shuidheachadh, thèid an obair fhreagarrach sa phròiseact cleachdadh a chuir air adhart gu fèin-ghluasadach gus an dreach fuasglaidh a luchdachadh suas gu nexus (eisimpleir).
Is e am pàirt as fheàrr gu bheil sgaoileadh dùinte a’ piobrachadh gu fèin-ghluasadach ann an nexus.
[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] ------------------------------------------------------------------------
Agus ma thèid rudeigin ceàrr, bidh an obair gu cinnteach a’ fàiligeadh
[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] ------------------------------------------------------------------------
Mar thoradh air an sin, chan eil againn ach aon roghainn. No sguab às an tionndadh seo no foillsich.
Às deidh an leigeil ma sgaoil, às deidh beagan ùine, bidh na stuthan a-staigh
offtopic
Bha e na fhoillseachadh dhomh gu bheil maven a’ clàradh stòran poblach eile.
B’ fheudar dhomh robots.txt a luchdachadh suas oir rinn e clàr-amais air an t-seann stòr-tasgaidh agam.
Pròiseact cleachdadh air leth anns an urrainn dhut grunn ghnìomhan CI a chuir an gnìomh airson stuthan a luchdachadh suas gu stòran poblach airson diofar chànanan leasachaidh.
Tha am pròiseact cleachdadh air leth bho bhacadh bhon taobh a-muigh agus chan urrainn dha atharrachadh ach le luchd-cleachdaidh le dreuchdan an t-sealbhadair agus an neach-gleidhidh.
Runner Sònraichte air leth le tasgadan “teth” gus dìreach gnìomhan a chuir an gnìomh.
Foillseachadh dreachan dealbh / fuasglaidh ann an stòr poblach.
Sgrùdadh fèin-ghluasadach air an dreach fuasglaidh airson a bhith deiseil airson fhoillseachadh ann am meadhan maven.
Dìon an aghaidh foillseachadh fèin-ghluasadach de dhreachan “amh” ann am meadhan maven.
Chan eil stèidheachadh GitLab CI na chuspair cho iom-fhillte ‘s a tha e coltach aig a’ chiad sealladh. Tha e gu leòr CI a stèidheachadh air stèidh turnkey dà uair, agus a-nis tha thu fada bho bhith neo-dhreuchdail sa chùis seo. A bharrachd air an sin, tha sgrìobhainnean GitLab gu math gun fheum. Na biodh eagal ort a 'chiad cheum a ghabhail. Tha an rathad a’ nochdadh fo staidhre an neach a bha a’ coiseachd (chan eil cuimhne agam cò thuirt e :)
Bidh mi toilichte fios air ais.
Anns an ath artaigil, seallaidh mi dhut mar a stèidhicheas tu GitLab CI gus gnìomhan deuchainn amalachaidh a ruith gu farpaiseach (a ’ruith seirbheisean deuchainn le docker-compose) mura h-eil agad ach aon ruitheadair slige.