Omunye wemisebenzi edingeka kakhulu, ongekho kunguqulo yamahhala ye-GitLab, yikhono lokuvota ngokumelene nokuchithwa kwenqolobane nokulawula isicelo sokuhlanganisa (MR), kusetshenziswa ukubuyekezwa kwekhodi okuyisibopho.
Masenze umsebenzi omncane ngokwethu - sizokwenqabela ukuhlanganisa kuze kube yilapho onjiniyela abaningana benikeza uMR isithupha.
Kungani lokhu kudingekile?
Inhlangano yethu ingakwazi kalula ukuthenga ilayisensi ye-GitLab. Kodwa, njengoba ukuthuthukiswa kwenziwa ku-loop evaliwe ngaphandle kokufinyelela kwe-intanethi, futhi kukhona ukuhlelwa kwesabelomali okuqinile, ukuthengwa kwamalayisensi okulawulwa ngokwawo ngokusebenza okudingekile kungadonsa izinyanga eziningi, kodwa umsebenzi udinga ukwenziwa manje.
Ngenxa yalokho kufanele:
- noma ukwenqabela ngokuphelele Ukuhlanganisa emagatsheni avikelwe kwabanye onjiniyela, kodwa-ke abathuthukisi abanelungelo Lokuhlanganisa bathola ukungqubuzana lapho behlanganisa o-MR wabanye abantu njengebhonasi;
- noma unikeze ithuba lokwenza ukuhlanganisa okungalawuleki negatsha lakho eliyinhloko ngaphandle kokubuyekezwa kwekhodi, ngisho noma kunguJunior, oqashwe izolo nje.
Into yokuqala engiyenzile i-Google, ngikholelwa ukuthi othile usevele enze into efanayo (ngaphandle kokuguqula ikhodi), kodwa kwavela ukuthi kwakungekho ukuqaliswa okunjalo kunguqulo yomphakathi okwamanje.
Uhlelo olujwayelekile lomsebenzi
Njengesibonelo, ake silungiselele ukugunyazwa kwesicelo sokuhlanganisa endaweni yokuhlola
- Masidale ithokheni yokufinyelela ku-GitLab API (ngayo sizothola ulwazi mayelana nenani lamavoti "la" kanye "nokuphikisana").
- Ake sengeze ithokheni kokuguquguqukayo kwe-GitLab
- Masikhubaze ukuhlanganisa uma kwenzeka kuba namaphutha epayipini (uma kungekho amavoti aphezulu anele)
- Masimise ukuqinisekiswa kwevoti njengengxenye yepayipi le-CI/CD
- Siyakwenqabela ukuzibophezela emagatsheni avikelwe; zonke izinguquko zenziwa kuphela ngo-MR
- Ake sihlole ukuthi kwenzekeni ekugcineni
1. Dala ithokheni ukuze ufinyelele i-API
Iya kokuthi Izilungiselelo Zomsebenzisi → Amathokheni Okufinyelela bese ubhala phansi ithokheni:
I-akhawunti yokuthola ithokheni
Ukufinyelela ku-API kukuvumela ukuthi wenze noma yini ngamakhosombe akho, ngakho-ke ngincoma ukuthi udale i-akhawunti ehlukile ye-Gitlab, uyinikeze amalungelo amancane kumakhosombe akho (isb. Intatheli) futhi uthole ithokheni yaleyo akhawunti.
2. Engeza ithokheni kokuguquguqukayo kwe-Gitlab
Isibonelo, esinyathelweni esedlule sithole ithokheni QmN2Y0NOUFlfeXhvd21ZS01aQzgK
Vula Izilungiselelo → CI/CD → Okuguquguqukayo → Engeza okuguquguqukayo → GITLAB_TOKEN_FOR_CI
Ngenxa yalokho sithola:
Lokhu kungenziwa endaweni eyodwa noma eqenjini lamakhosombe.
3. Sibeka ukuvinjelwa kokuhlanganisa uma imvume yozakwethu ingatholwa ngemva kokubuyekezwa kwekhodi.
Esimweni sethu, ukuvinjelwa kokuhlanganisa kuzoba ukuthi ipayipi lomhlangano lizobuyisela iphutha uma kungekho amavoti anele.
Iya kokuthi Izilungiselelo → Okujwayelekile → Hlanganisa Izicelo → Hlanganisa Amasheke futhi unike amandla inketho Yokuhlanganisa imigqa kufanele iqedele ngempumelelo.
4. Ukusetha ipayipi
Uma ungakadali ipayipi le-CI/CD lesicelo sakho
Dala ifayela empandeni yendawo yokugcina .gitlab-ci.yml ngokuqukethwe okulula:
stages:
- build
- test
variables:
NEED_VOTES: 1
include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"
run-myapp:
stage: build
script: echo "Hello world"
Inqolobane ehlukene yokucushwa kwe-CI/CD
Ngingancoma ukwenza ikhosombe ehlukile lapho udinga ukudala ifayela le-myapp.gitlab-ci.yml ukuze ulungiselele ipayipi. Ngale ndlela ungakwazi ukulawula kangcono ukufinyelela kwabahlanganyeli abangashintsha ipayipi lokwakha futhi bathole ithokheni yokufinyelela.
Indawo yefayela elisha lephayiphi kuzodingeka icaciswe ngokuya endaweni yesikhombi se-myapp - Izilungiselelo - CI/CD - Imigqa Yomhlangano - Indlela yokumisa yangokwezifiso CI - cacisa ifayela elisha, isb. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci
Ithiphu: Sebenzisa i-linter ukwenza izinguquko kumafayela e-GitLab CI
Ngisho noma usebenza wedwa, ukusebenza ngo-MR kuzoba usizo oluhle, ukusebenzisa zonke izinguquko zakho kumafayela epayipi ngokusebenzisa i-linter. Uma wenza iphutha ku-syntax yefayela le-YAML, ngeke iphule ipayipi lakho lokukhiqiza, kodwa izomane ivimbe ukuhlanganisa.
Isibonelo seziqukathi ezinama-linter ongazakha epayipini lakho:
Futhi isibonelo sesigaba sokuqinisekisa:
stages:
- lint
lint:
stage: lint
image: sebiwi/gitlab-ci-validate:1.3.0
variables:
GITLAB_HOST: https://gitlab.com
script:
- CI_FILES=(./*.yml)
- for f in "${CI_FILES[@]}"; do
gitlab-ci-validate $f;
done;
Kusele ukungeza amapharamitha ambalwa epayipini lakho ukuze lisebenze:
stages:
- test
variables:
NEED_VOTES: 1
include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"
Okuhlukile kwe-NEED_VOTES kunquma ukuthi zingaki “izithupha” uMR okufanele abe nazo ukuze Ukuhlanganisa kutholakale. Inani elilingana nelilodwa lisho ukuthi wena ngokwakho ungavuma uMR wakho ngokuthi “uthande”.
kufaka phakathi isigaba sokuhlola, esihlola inombolo "yokuthandwa".
Ipayipi elilula lisebenzisa isibonelo se-myapp.gitlab-ci.yml
stages:
- build
- test
variables:
NEED_VOTES: 0
include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"
run-myapp:
stage: build
image: openjdk
script:
- echo CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
- java HelloWorld.java
Okuqukethwe hlola-approve.gitlab-ci.yml
ci-mr:
stage: test
script:
- echo ${CI_API_V4_URL}
- echo "CI_PROJECT_ID ${CI_PROJECT_ID}"
- echo "CI_COMMIT_SHA ${CI_COMMIT_SHA}"
- "export MR_ID=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .id else {} end" | grep --invert-match {})"
- "export MR_TITLE=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .title else {} end" | grep --invert-match {})"
- "export MR_WIP=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .work_in_progress else {} end" | grep --invert-match {})"
- "export MR_UPVOTES=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .upvotes else {} end" | grep --invert-match {})"
- "export MR_DOWNVOTES=$(curl --silent --request GET --header "PRIVATE-TOKEN: $GITLAB_TOKEN_FOR_CI" ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/merge_requests | jq ".[] | if .sha == \"${CI_COMMIT_SHA}\" then .downvotes else {} end" | grep --invert-match {})"
- MR_VOTES=$(expr ${MR_UPVOTES} - ${MR_DOWNVOTES})
- NEED_VOTES_REAL=${NEED_VOTES:-1}
- echo "MR_ID ${MR_ID} MR_TITLE ${MR_TITLE} MR_WIP ${MR_WIP} MR_UPVOTES ${MR_UPVOTES} MR_DOWNVOTES ${MR_DOWNVOTES}"
- echo "MR_VOTES ${MR_VOTES} Up vote = 1, down vote = -1, MR OK if votes >=${NEED_VOTES_REAL}"
- if [ "${MR_VOTES}" -ge "$(expr ${NEED_VOTES_REAL})" ];
then
echo "MR OK";
else
echo "MR ERROR Need more votes";
exit 1;
fi
image: laptevss/gitlab-api-util
rules:
- if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^release/.*$/'
Ulwazi olwengeziwe mayelana nokuthi kwenzekani ngesikhathi sokuqinisekisa:
- kunomkhawulo wokuthi isheke lizokwenziwa kuphela lapho kwakhiwa uMR egatsheni eliyinhloko noma lokukhulula/*
- sisebenzisa i-GitLab API, sithola inombolo “yokuthandwa” kanye “nokungathandwa”
- bala umehluko phakathi kwezimpendulo ezinhle nezingezinhle
- uma umehluko ungaphansi kwevelu esiyibeka ku-NEED_VOTES, lapho-ke sivimba ikhono lokuhlanganisa
5. Vimbela ukuzibophezela emagatsheni avikelwe
Sichaza amagatsha okumele siwenzele ukubuyekezwa kwamakhodi futhi sikhombise ukuthi angasetshenzwa kuphela ngoMnu.
Ukuze wenze lokhu, iya kokuthi Izilungiselelo → Indawo yokugcina → Amagatsha Avikelwe:
6. Hlola
Setha i-NEED_VOTES: 0
Senza uMR futhi sibeka "ukungathandi".
Ezingodweni zokwakha:
Manje faka okuthi “like” bese uqala ukuhlola futhi:
Source: www.habr.com