ProHoster > Blag > Riarachán > GitLab CI a bhunú chun tionscadal java a uaslódáil chuig maven lárnach
GitLab CI a bhunú chun tionscadal java a uaslódáil chuig maven lárnach
Tá an t-alt seo dírithe ar fhorbróirí java a bhfuil gá acu a gcuid táirgí a fhoilsiú go tapa i stórtha lárnacha sonatype agus/nó maven ag baint úsáide as GitLab. San Airteagal seo labhróidh mé faoi gitlab-runner, gitlab-ci agus maven-plugin a bhunú chun an fhadhb seo a réiteach.
Réamhriachtanais:
Stóráil slán eochracha mvn agus GPG.
Feidhmiú slán cúraimí CI poiblí.
Déantáin a uaslódáil (scaoileadh / pictiúr) chuig stórtha poiblí.
Seiceáil uathoibríoch ar leaganacha eisithe le foilsiú i maven central.
Réiteach ginearálta le haghaidh déantáin a uaslódáil chuig stór le haghaidh tionscadail iolracha.
Tá cur síos mionsonraithe ar an meicníocht chun déantúsáin a fhoilsiú i Maven Central trí Sheirbhís Óstála Stór Sonatype OSS cheana féin curtha síos i An t-alt seo úsáideoir Googolplex, mar sin déanfaidh mé tagairt don alt seo sna háiteanna cearta.
Réamhchlárú le haghaidh Sonatype JIRA agus ticéad a oscailt chun an stór a oscailt (léigh an chuid le haghaidh tuilleadh sonraí Cruthaigh ticéad ar Sonatype JIRA). Tar éis an stór a oscailt, úsáidfear an logáil isteach/péire pasfhocal ó JIRA (dá ngairtear an cuntas Sonatype anseo feasta) chun déantáin a uaslódáil chuig Sonatype nexus.
Ansin, déantar cur síos an-tirim ar an bpróiseas chun eochair GPG a ghiniúint. Féach an rannán le haghaidh tuilleadh sonraí GnuPG á chumrú chun déantáin a shíniú
Má úsáideann tú an consól Linux chun eochair GPG a ghiniúint (gnupg/gnupg2), ní mór duit a shuiteáil rng-uirlisí eantrópachta a ghiniúint. Seachas sin, d'fhéadfadh go dtógfaidh sé tréimhse an-fhada chun eochair-ghiniúint.
Ar an gcéad dul síos, ní mór duit tionscadal a chruthú agus a chumrú ina stórálfar an phíblíne chun artifacts a imscaradh. D'ainmnigh mé mo thionscadal go simplí agus go neamhchasta - imscaradh
Tar éis duit an stór a chruthú, ní mór duit rochtain a shrianadh chun an stór a athrú.
Téigh go dtí an tionscadal -> Socruithe -> Stór -> Brainsí Cosanta. Scriosaimid na rialacha go léir agus cuirimid riail amháin le Wildcard * leis an gceart chun brú agus cumasc a dhéanamh ach amháin d’úsáideoirí a bhfuil ról an Chothabhálaigh acu. Oibreoidh an riail seo d’úsáideoirí uile an tionscadail seo agus don ghrúpa lena mbaineann an tionscadal seo.
Má tá roinnt cothaitheoirí ann, is é an réiteach is fearr a bheadh ann ná rochtain ar an tionscadal a theorannú i bprionsabal.
Téigh go dtí an tionscadal -> Socruithe -> Ginearálta -> Infheictheacht, gnéithe tionscadail, ceadanna agus socraigh infheictheacht an tionscadail go dtí Príobháideacha.
Tá tionscadal atá inrochtana go poiblí agam, toisc go n-úsáideann mé mo GitLab Runner féin agus níl rochtain agam ach chun an stór a athrú. Bhuel, i ndáiríre, níl sé chun mo leasa faisnéis phríobháideach a thaispeáint i logaí píblíne poiblí.
Géarú ar na rialacha chun an stór a athrú
Téigh go dtí an tionscadal -> Socruithe -> Stór -> Brúigh Rialacha agus socraigh an srian Committer, Seiceáil an bhfuil údar bratach úsáideora GitLab. Molaim freisin bunú síniú gealltanas, agus socraigh an bhratach Diúltaigh gealltanais gan síniú.
Ansin ní mór duit truicear a chumrú chun tascanna a sheoladh
Téigh go dtí an tionscadal -> Socruithe -> CI / CD -> Spreagann an phíblíne agus cruthaigh truicearchomhartha nua
Is féidir an comhartha seo a chur láithreach le cumraíocht ghinearálta na n-athróg do ghrúpa tionscadal.
Téigh go dtí an grúpa -> Socruithe -> CI / CD -> Athróga agus cuir athróg leis DEPLOY_TOKEN le truicearchomhartha i luach.
Déanann an chuid seo cur síos ar an chumraíocht do thascanna reatha ar imscaradh ag baint úsáide as do reathaí (Sainiúil) agus poiblí (Comhroinnte).
Runaire Sonrach
Úsáidim mo reathaithe féin mar, ar an gcéad dul síos, tá sé áisiúil, tapa agus saor.
Le haghaidh rádala, molaim Linux VDS le 1 CPU, 2 GB RAM, 20 GB HDD. Is é an praghas eisiúna ná ~3000₽ in aghaidh na bliana.
Mo rádala
Maidir leis an rádala ghlac mé VDS 4 CPU, 4 GB RAM, 50 GB SSD. Costas ~11000₽ agus níor aiféala riamh é.
Tá 7 meaisín san iomlán agam. 5 ar aruba agus 2 ar ihor.
Mar sin tá rádala againn. Anois déanfaimid é a chumrú.
Téann muid chuig an meaisín trí SSH agus suiteáil java, git, maven, gnupg2.
Cruthaigh eolaire don taisce maven agus sann ceadanna grúpa runner
Is féidir leat an pointe seo a scipeáil mura bhfuil sé ar intinn agat roinnt reathaithe a rith ar mheaisín amháin.
Téigh go dtí an suíomh Gréasáin gitlab.com -> deploy-project -> Socruithe -> CI/CD -> Runners -> Runners Sonracha agus cóipeáil an comhartha clárúcháin
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éanaimid seiceáil go bhfuil an rádala cláraithe. Téigh go dtí an suíomh Gréasáin gitlab.com -> deploy-project -> Socruithe -> CI/CD -> Runners -> Runners Sonracha -> Ritheoirí gníomhachtaithe don tionscadal seo
Scáileán
Cuir leis ar leithligh seirbhís /etc/systemd/system/gitlab-deployer.service
Gineann muid eochair trí cheisteanna a fhreagairt. D'úsáid mé m'ainm féin agus mo ríomhphost.
Bí cinnte an focal faire don eochair a shonrú. Déanfar déantáin a shíniú leis an eochair seo.
gpg --gen-key
Seiceáil
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
Ár n-eochair phoiblí a uaslódáil chuig an bhfreastalaí eochair
gpg --keyserver keys.gnupg.net --send-key 00000000
gpg: sending key 00000000 to hkp server keys.gnupg.net
Cruthaigh eolaire maven stór agus nasc leis an taisce (ná déan dearmad)
Is féidir leat an pointe seo a scipeáil mura bhfuil sé ar intinn agat roinnt reathaithe a rith ar mheaisín amháin.
Cuir an comhad .gitlab-ci.yml le fréamh an tionscadail imlonnaithe
Cuireann an script dhá thasc imscartha chomheisiatach i láthair. Runaire Sonrach nó Rith Comhroinnte faoi seach.
.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
I dtionscadail java atá ceaptha a uaslódáil chuig stórtha poiblí, ní mór duit 2 chéim a chur leis chun na leaganacha Eisiúint agus Snapshot a íoslódáil.
.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}
Sa réiteach seo, chuaigh mé beagán eile agus chinn mé teimpléad CI amháin a úsáid le haghaidh tionscadail java.
Tuilleadh sonraí
Chruthaigh mé tionscadal ar leith gitlab-ci inar chuir mé teimpléad CI do thionscadail java coitianta.yml.
Déantar cur síos go mion ar an ábhar seo. Googolplex в Maven a chur ar bun chun déantáin a shíniú agus a uaslódáil go huathoibríoch chuig stórtha pictiúir agus stáitsithe, mar sin déanfaidh mé cur síos ar roinnt de na nuances a bhaineann le húsáid breiseán. Déanfaidh mé cur síos freisin ar cé chomh héasca agus chomh suaimhneach is féidir leat é a úsáid nexus-staging-maven-pluginmura dteastaíonn uait nó mura bhfuil tú in ann org.sonatype.oss:oss-parent a úsáid mar thuismitheoir do do thionscadal.
maven-install- breiseán
Suiteáil modúil isteach sa stór áitiúil.
An-úsáideach le haghaidh fíorú áitiúil ar réitigh i dtionscadail eile, chomh maith le seiceam.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<executions>
<execution>
<id>install-project</id>
<!-- Если у вас многомодульный проект с деплоем родительского помика -->
<phase>install</phase>
<!-- Явно указываем файлы для локальной установки -->
<configuration>
<file>target/${project.artifactId}-${project.version}.jar</file>
```target/${project.artifactId}-${project.version}-sources.jar</sources>
<pomFile>dependency-reduced-pom.xml</pomFile>
<!-- Принудительное обновление метаданных проекта -->
<updateReleaseInfo>true</updateReleaseInfo>
<!-- Контрольные суммы для проверки целостности -->
<createChecksum>true</createChecksum>
</configuration>
</execution>
</executions>
</plugin>
<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>
Má tá modúl agat nach bhfuil java ann (mar shampla acmhainní amháin)
Nó níl tú ag iarraidh javadoc a ghiniúint i bprionsabal, mar sin cuidigh leat maven-jar-plugin
Má tá tionscadal ilmhodúil agat agus nach gá duit modúl ar leith a uaslódáil chuig an stór, ansin caithfidh tú nexus-staging-maven-plugin le bratach skipNexusStagingDeployMojo
Tar éis iad a íoslódáil, tá leaganacha seat/eisiúint ar fáil i stórtha stáitse
<repositories>
<repository>
<id>SonatypeNexus</id>
<url>https://oss.sonatype.org/content/groups/staging/</url>
<!-- Не надо указывать флаги snapshot/release для репозитория -->
</repository>
</repositories>
Tuilleadh buntáistí
Liosta an-saibhir spriocanna chun oibriú leis an stór nexus (mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin).
Seiceáil scaoileadh uathoibríoch le huaslódáil go maven lárnach
Nuair a shuiteáiltear clib, spreagtar an tasc comhfhreagrach sa tionscadal imlonnaithe go huathoibríoch chun an leagan scaoileadh a íoslódáil chuig nexus (mar shampla).
Is é an chuid is fearr ná go spreagtar scaoileadh gar go huathoibríoch i 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 má théann rud éigin mícheart, beidh an tasc theipeann cinnte
[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 sin, níl ach rogha amháin fágtha againn. Scrios an leagan seo nó foilsigh é.
Tar éis é a scaoileadh, tar éis roinnt ama beidh na déantáin isteach
offtopic
Ba fhionnachtain domsa é go ndéanann maven innéacsú ar stórtha poiblí eile.
Bhí orm robots.txt a chur leis toisc gur innéacsaigh sé mo sheanstór.
Tionscadal imscartha ar leith inar féidir leat roinnt tascanna CI a chur i bhfeidhm chun déantúsáin a uaslódáil chuig stórtha poiblí do theangacha forbartha éagsúla.
Tá an tionscadal Imscaradh scoite amach ó chur isteach ón taobh amuigh agus ní féidir ach le húsáideoirí a bhfuil róil an Úinéara agus an Chothabhlóra acu é a athrú.
Runaire Sonrach ar leith le taisce “te” chun tascanna a imscaradh amháin a rith.
Gearrscéalta/leaganacha scaoilte a fhoilsiú i stór poiblí.
Seiceáil go huathoibríoch ar an leagan eisithe chun a bheith ullamh le foilsiú i maven central.
Cosaint ar fhoilsiú uathoibríoch leaganacha “amh” i maven lárnach.
Tóg agus foilsigh leaganacha seat “ar chliceáil”.
Taisclann amháin chun leaganacha pictiúr/scaoileadh a fháil.
Píblíne ghinearálta chun tionscadal java a thógáil / a thástáil / a fhoilsiú.
Ní ábhar chomh casta é GitLab CI a bhunú agus a fheictear ar an gcéad amharc. Is leor CI a bhunú ar bhonn turnkey cúpla uair, agus anois tá tú i bhfad ó amaitéarach san ábhar seo. Ina theannta sin, tá doiciméadú GitLab an-iomarcach. Ná bíodh eagla ort an chéad chéim a ghlacadh. Tá an bóthar le feiceáil faoi chéimeanna an duine a bhí ag siúl (ní cuimhin liom cé a dúirt é :)
Beidh áthas orm aiseolas a fháil.
Sa chéad alt eile beidh mé ag caint faoi conas GitLab CI a chumrú chun tascanna a reáchtáil le tástálacha comhtháthaithe go hiomaíoch (ag rith na seirbhísí faoi thástáil ag baint úsáide as docker-compose) mura bhfuil agat ach rádala sliogáin amháin.