ProHoster > Блог > Nchịkwa > Ịtọlite GitLab CI iji bulite ọrụ java na maven Central
Ịtọlite GitLab CI iji bulite ọrụ java na maven Central
Ezubere akụkọ a maka ndị mmepe java nwere mkpa ibipụta ngwaahịa ha ngwa ngwa na sonatype na/ma ọ bụ maven Central repositories iji GitLab. N'isiokwu a, m ga-ekwu maka ịtọlite gitlab-runner, gitlab-ci na maven-plugin iji dozie nsogbu a.
Ihe ndị a chọrọ:
Nchekwa echekwabara nke mvn na igodo GPG.
Ezubeghi mmezu nke ọrụ CI ọha.
Na-ebugote arịa (mwepụta/nyocha) na ebe nchekwa ọha.
Nyochaa ụdị ntọhapụ na akpaghị aka maka mbipụta na maven Central.
Ngwọta n'ozuzu maka ibugo ihe arịa na ebe nchekwa maka ọtụtụ ọrụ.
Nkọwa zuru ezu nke usoro maka ibipụta arịa na Maven Central site na Sonatype OSS Repository Hosting Service ka akọwarala na Akụkọ a onye ọrụ Googolplex, yabụ m ga-ezo aka n'isiokwu a na ebe kwesịrị ekwesị.
Debanye aha maka Sonatype JIRA ma mepee tiketi iji mepee ebe nchekwa (gụọ ngalaba maka nkọwa ndị ọzọ Mepụta tiketi na Sonatype JIRA). Mgbe imepechara ebe nchekwa ahụ, a ga-eji ụzọ nbanye/paswọdu si na JIRA (nke a na-akpọ akaụntụ Sonatype) bulite arịa na Sonatype nexus.
Ọ bụrụ na ị na-eji ihe njikwa Linux mepụta igodo GPG (gnupg/gnupg2), yabụ ịkwesịrị ịwụnye Ngwa-ngwa iji mepụta entropy. Ma ọ bụghị ya, ọgbọ isi nwere ike iwe ogologo oge.
Nke mbụ, ịkwesịrị ịmepụta na hazie ọrụ nke a ga-echekwa pipeline maka ịkwanye ihe ndị dị na ya. Akpọrọ m ọrụ m aha n'ụzọ dị mfe na enweghị mgbagwoju anya - dozie
Mgbe ịmepụtara ebe nchekwa ahụ, ịkwesịrị igbochi ohere ịgbanwe ebe nchekwa ahụ.
Gaa na oru ngo -> Ntọala -> Ebe nchekwa -> Alaka echedoro. Anyị na-ehichapụ iwu niile wee tinye otu iwu na Wildcard * nke nwere ikike ịkwanye na jikọta naanị maka ndị ọrụ nwere ọrụ ndị na-elekọta. Iwu a ga-arụ ọrụ maka ndị ọrụ niile nke ma ọrụ a na otu nke ọrụ a nwere.
Ọ bụrụ na enwere ọtụtụ ndị na-elekọta, mgbe ahụ, ngwọta kachasị mma ga-abụ njedebe ịnweta ọrụ ahụ na ụkpụrụ.
Gaa na oru ngo -> Ntọala -> Ozuruọnụ -> Nhụta, atụmatụ ọrụ, ikike na tọọ visibiliti Project ka. Private.
Enwere m ọrụ a na-enweta n'ihu ọha, ebe m na-eji GitLab Runner nke m, naanị enwere m ike ịgbanwe ebe nchekwa ahụ. Ọfọn, n'ezie, ọ bụghị maka ọdịmma m igosi ozi nzuzo na ndekọ pipeline ọha.
Ịkwụsị iwu maka ịgbanwe ebe nchekwa
Gaa na oru ngo a -> Ntọala -> Ebe nchekwa -> Push Iwu ma tọọ mmachi nke Committer, Lelee ma onye edemede bụ ọkọlọtọ njirimara GitLab. Ana m akwado ịtọ ntọala mee mbinye aka, ma tọọ Ọkọlọtọ jụrụ mbinye aka n'akwụkwọ.
Ọzọ, ịkwesịrị ịhazi ihe mkpalite iji malite ọrụ
Gaa na oru ngo -> Ntọala -> CI / CD -> Pipeline na-akpalite ma mepụta ihe mkpali ọhụrụ
Enwere ike ịgbakwunye akara ngosi a ozugbo na nhazi izugbe nke mgbanwe maka otu ọrụ.
Gaa na otu -> Ntọala -> CI / CD -> Variables wee tinye mgbanwe DEPLOY_TOKEN ya na ihe mkpali na uru.
Nkebi a na-akọwa nhazi maka ịrụ ọrụ na-ebunye site na iji nke gị (kpọmkwem) na ọha (nkekọrịta) agba ọsọ.
Onye na-agba ọsọ akọwapụtara
M na-eji ndị na-agba ọsọ nke m eme ihe n'ihi na, nke mbụ, ọ dị mma, ngwa ngwa, na ọnụ ala.
Maka onye na-agba ọsọ, ana m akwado Linux VDS nwere 1 CPU, 2 GB Ram, 20 GB HDD. Ọnụ ego a na-akwụ bụ ~ 3000₽ kwa afọ.
Onye oso m
Maka onye na-agba ọsọ m weere VDS 4 CPU, 4 GB Ram, 50 GB SSD. Ọ na-efu ~ 11000₽ na ọ dịghị mgbe ọ bụla ịkwa ụta ya.
Enwere m ngụkọta nke igwe 7. 5 na aruba na 2 na ihor.
Ya mere, anyị nwere onye na-agba ọsọ. Ugbu a, anyị ga-ahazi ya.
Anyị na-aga igwe site na SSH wee wụnye java, git, maven, gnupg2.
Mepụta ndekọ aha maka cache maven wee kenye ikike otu runner
Ị nwere ike ịgafe ebe a ma ọ bụrụ na ị naghị eme atụmatụ ịgba ọsọ ọtụtụ ndị na-agba ọsọ n'otu igwe.
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!
Anyị na-enyocha na edebanye aha onye na-agba ọsọ. Gaa na webụsaịtị gitlab.com -> deploy-project -> Ntọala -> CI/CD -> Ndị na-agba ọsọ -> Ndị na-agba ọsọ pụrụ iche -> Ndị na-agba ọsọ agbagoro maka ọrụ a.
Ihuenyo
Tinye iche ọrụ /etc/systemd/system/gitlab-deployer.service
Anyị na-ewepụta igodo site na ịza ajụjụ. Eji m aha na email nke m.
Jide n'aka na ezipụta paswọọdụ maka igodo ahụ. A ga-eji igodo a bịanye aka n'ihe arụrụ arụ.
gpg --gen-key
Na-enyocha
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
Na-ebugote igodo ọha anyị na sava igodo
gpg --keyserver keys.gnupg.net --send-key 00000000
gpg: sending key 00000000 to hkp server keys.gnupg.net
Mepụta ndekọ ndekọ maven ebe nchekwa na njikọ na cache (emehieghị)
Ị nwere ike ịgafe ebe a ma ọ bụrụ na ị naghị eme atụmatụ ịgba ọsọ ọtụtụ ndị na-agba ọsọ n'otu igwe.
Tinye faịlụ .gitlab-ci.yml na mgbọrọgwụ nke ọrụ ebuga
Edemede a na-egosi ọrụ mbugharị abụọ na-akpakọrịta. Onye na-agba ọsọ akọwapụtara ma ọ bụ onye na-agba ọsọ ekekọrịtara n'otu n'otu.
.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
Ọ bụrụ na ị nwere ọrụ multi-module ma ọ dịghị mkpa ka ị bulite otu modul na ebe nchekwa, mgbe ahụ ịkwesịrị ịgbakwunye. nexus-staging-maven-plugin na ọkọlọtọ skipNexusStagingDeployMojo
<repositories>
<repository>
<id>SonatypeNexus</id>
<url>https://oss.sonatype.org/content/groups/staging/</url>
<!-- Не надо указывать флаги snapshot/release для репозитория -->
</repository>
</repositories>
pluses ndị ọzọ
Ndepụta ihe mgbaru ọsọ bara ụba nke ukwuu maka ịrụ ọrụ na ebe nchekwa nexus (mvn help:describe -Dplugin=org.sonatype.plugins:nexus-staging-maven-plugin).
Nyocha mwepụta akpaaka maka ibugo na maven Central
Mgbe arụnyere mkpado, ọrụ kwekọrọ na ọrụ mbugharị ga-akpalite ozugbo ka ibudata ụdị ntọhapụ na nexus (ihe atụ).
Nke kacha mma bụ na nso ntọhapụ na-akpaghị aka triggered na 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] ------------------------------------------------------------------------
Ma ọ bụrụ na ihe adịghị mma, ọrụ ahụ ga-adarịrị
[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] ------------------------------------------------------------------------
N'ihi ya, a hapụrụ anyị naanị otu nhọrọ. Hichapụ ụdị a ma ọ bụ bipụta ya.
Mgbe ahapụchara, mgbe oge ụfọdụ gachara, ihe ndị ahụ ga-abanye
Offtopic
Ọ bụ nchoputa nye m na maven na-edepụta ebe nchekwa ọha ndị ọzọ.
Ekwesịrị m itinye robots.txt n'ihi na ọ depụtara ebe nchekwa ochie m.
Ọrụ mbugharị dị iche iche nke ị nwere ike mejuputa ọtụtụ ọrụ CI maka ibugo ihe arịa na ebe nchekwa ọha maka asụsụ mmepe dị iche iche.
Ihe oru ngo a dịpụrụ adịpụ site na nnyonye anya n'èzí, naanị ndị ọrụ nwere ọrụ onye nwe na onye na-elekọta nwere ike ịgbanwe ya.
Отдельный Specific Runner с "горячим" кэшем для запуска только deploy задач.
Na-ebipụta ụdị ọnsọ/nhapụta n'ime ebe nchekwa ọha.
Nyochaa akpaaka nke ụdị mwepụta maka ịdị njikere maka mbipụta na maven Central.
Защита от автоматической публикации "сырых" версий в maven central.
Сборка и публикация snapshot версий "по клику".
Otu ebe nchekwa maka inweta ụdị foto/nhapụta.
Pipeline izugbe maka iwulite/nnwale/bipụta ọrụ java.
Настройка GitLab CI не такая сложная тема как кажется на первый взгляд. Достаточно пару раз настроить CI "под ключ" и вот, ты уже далеко не дилетант в этом деле. Тем более GitLab документация весьма избыточна. Не бойтесь делать первый шаг. Дорога возникает под шагами идущего (не помню кто сказал 🙂 ).
Obi ga-adị m ụtọ ịnata nzaghachi.
N'isiokwu na-esonụ, m ga-ekwu maka otu esi ahazi GitLab CI ka ọ rụọ ọrụ na ule ntinye aka na-asọmpi (na-arụ ọrụ n'okpuru ule site na iji docker-compose) ma ọ bụrụ na ị nwere naanị otu onye na-agba ọsọ.