Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

Mid ka mid ah hawlaha ugu muhiimsan, oo aan ku jirin nooca bilaashka ah ee GitLab, waa awooda lagu codeeyo ka-hortagga burinta kaydka iyo xakamaynta codsiga Isku-dhafka (MR) iyadoo la adeegsanayo dib-u-eegista koodka khasabka ah.

Aynu lafaheena samayno shaqada ugu yar - waxaanu mamnuuci doonaa isku-dhafka ilaa dhowr horumariye ay siiyaan MR suulka.

Maxay tani xitaa lagama maarmaan u tahay?

Ururkayagu wuxuu si fudud u awoodi karaa inuu iibsado shatiga GitLab. Laakiin, maadaama horumarinta lagu fuliyaa sixiran oo aan lahayn internet-ka, oo ay jirto qorshe miisaaniyadeed oo adag, iibsashada shatiyada is-maamulka leh ee shaqada lagama maarmaanka ah waxay soo jiidan kartaa bilo badan, laakiin shaqada ayaa loo baahan yahay in hadda la qabto.

Natiijo ahaan waa inaad:

  • ama gebi ahaanba mamnuuc in ay ku biiraan laamaha la ilaaliyo ee horumariyayaasha qaarkood, laakiin ka dib horumariyayaasha xaqa u leh in ay ku biiraan waxa ay helayaan khilaaf marka ay ku daraan MR-yada dadka kale gunno ahaan;
  • ama fursad sii inaad ku biirto laanta sayidkaaga iyada oo aan dib u eegis kood ah lahayn, xitaa haddii ay tahay Junior, oo la shaqaaleysiiyay shalay uun.

Waxa ugu horreeya ee aan sameeyo waxay ahayd Google, aniga oo aaminsan in qof uu si dhab ah u sameeyay wax la mid ah (iyaga oo aan wax ka beddelin koodka), laakiin waxaa soo baxday in weli aysan jirin hirgelinta noocaas ah nooca bulshada.

Nidaamka guud ee shaqada

Tusaale ahaan, aynu ku habeyno oggolaanshaha codsiga Isku-dhafka ee kaydka tijaabada myapp:

  1. Aan abuurno calaamad gelitaanka GitLab API (iyada oo la marayo waxaan ku heli doonaa macluumaadka ku saabsan tirada codadka "for" iyo "ka soo horjeeda")
  2. Aan kudarno calaamada doorsoomayaasha GitLab
  3. Aynu joojino Isku-dhafka haddii ay dhacdo khaladaad ka jira dhuumaha (haddii aysan jirin cod bixin ku filan)
  4. Aynu diyaarino xaqiijinta codbixinta oo qayb ka ah dhuumaha CI/CD
  5. Waxaan mamnuucnay samaynta ballanqaadyada laamaha la ilaaliyo; dhammaan isbeddellada waxaa lagu sameeyaa MR
  6. Aynu eegno waxa dhacay aakhirkii

1. Samee calaamad si aad u gasho API-ga

Tag Settings User → Access Tokens oo qor calaamadda:

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

Koontada si aad u hesho calaamad
Helitaanka API wuxuu kuu oggolaanayaa inaad wax kasta ku samayso kaydkaaga, marka waxaan ku talinayaa inaad abuurto akoon Gitlab gaar ah, siinta xuquuqaha ugu yar ee meelahaaga (tusaale wariyaha) iyo inaad calaamad u hesho akoonkaas.

2. Ku dar calaamada doorsoomayaasha Gitlab

Tusaale ahaan, tallaabadii hore waxaan helnay calaamad QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Fur Settings → CI/CD → Variables → Ku dar doorsoomiyaha → GITLAB_TOKEN_FOR_CI

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

Natiijo ahaan waxaan heleynaa:

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

Tan waxa lagu samayn karaa hal kayd ama koox kayd ah.

3. Waxaan mamnuucnay Isku-dhafka haddii oggolaanshaha asxaabta aan la helin ka dib dib-u-eegista xeerka.

Xaaladeena, mamnuucidda isku-dhafka waxay noqon doontaa in dhuunta golaha ay soo celiso khalad haddii aysan jirin codad ku filan.

Tag Settings → Guud → Codsiyada Isku-dhafka → Isku-darka hubinta oo awood u geli ikhtiyaarka khadadka Golaha waa inay si guul leh u dhammaystirmaan.

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

4. Dejinta dhuumaha

Haddii aadan weli u abuurin dhuumaha CI/CD codsigaaga
Ku samee fayl xididka kaydka .gitlab-ci.yml oo leh nuxurka ugu fudud:

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"

Meel gaar ah oo loogu talagalay qaabeynta CI/CD
Waxaan kugula talin lahaa samaynta kayd gooni ah oo aad u baahan tahay inaad ku abuurto faylka myapp.gitlab-ci.yml si aad u habayso dhuumaha. Sidan ayaad si fiican u xakamayn kartaa gelitaanka ka qaybgalayaasha kuwaas oo bedeli kara dhuumaha dhismaha oo heli kara calaamad gelitaanka.

Goobta feylka cusub ee dhuumaha ayaa u baahan doona in la cayimo iyadoo la aadayo kaydka myapp - Settings - CI/CD - khadadka golaha - Dariiqa habaynta CI ee gaarka ah - caddee faylka cusub, tusaale. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Talo: Isticmaal litir si aad isbeddel ugu samayso faylasha GitLab CI
Xitaa haddii aad kaligaa shaqeyso, ka shaqeynta MR waxay noqon doontaa caawinaad wanaagsan, inaad dhammaan isbeddelladaada ku socodsiiso faylalka dhuumaha iyadoo la marayo linter. Haddii aad khalad ka gasho hab-raacyada faylka YAML, ma jebin doono dhuumahaaga wax-soo-saarka, laakiin waxay si fudud u xannibi doontaa Isku-dhafka.

Tusaalaha weelasha leh daasadaha oo aad ku dhisi karto dhuumahaaga:

hub.docker.com/r/gaberoux/gitlab-ci-lint
hub.docker.com/r/sebiwi/gitlab-ci-validate

Iyo tusaale heerka xaqiijinta:

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;

Way hadhsan tahay inaad ku darto dhawrbeeg oo dhuumahaaga ah si ay u shaqeyso:

stages:
- test

variables:
NEED_VOTES: 1

include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

Doorsoomiyaha NEED_VOTES ayaa go'aamiya inta "suulka kor u kacaya" ee MR ay tahay inuu lahaado si isku-dhafka loo helo. Qiimo la mid ah mid macneheedu waa in adiga laftaadu aad ku ansixin karto MR-gaaga adiga oo "jeclaanaya"

waxaa ku jira marxaladda imtixaanka, kaas oo hubinaya tirada "jeceylka".

Dhuumaha ugu fudud iyadoo la adeegsanayo tusaalaha 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

Nuxurka hubi-ansixiyey.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/.*$/'

Macluumaad dheeraad ah oo ku saabsan waxa dhaca inta lagu jiro xaqiijinta:

  • Waxaa jira xaddidaad in jeegga la samayn doono oo keliya marka la abuurayo MR ee sayidkiisa ama la sii daayo/* laamaha
  • Adigoo isticmaalaya GitLab API, waxaan helnaa tirada "jeceylka" iyo "nacaybka"
  • xisaabi faraqa u dhexeeya jawaabaha togan iyo kuwa taban
  • haddii kala duwanaanshuhu uu ka yar yahay qiimaha aan ku dejinay NEED_VOTES, markaa waxaanu xannibnaa awoodda isku-dhafka

5. Mamnuuc ballamada laamaha la ilaaliyo

Waxaan qeexeynaa laamaha ay tahay inaan ku sameyno dib u eegis kood oo aan muujino in lala shaqeyn karo MR.

Si tan loo sameeyo, u tag Settings → Repository → Laamaha la ilaaliyo:

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

6. Hubi

Deji NEED_VOTES: 0

Waxaan sameynaa MR oo dhig "dislike".

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

Ku qor diiwaannada dhismaha:

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

Hadda dhig "like" oo bilow inaad mar kale hubiso:

Dib u eegista code ee Gitlab CE: haddii aysan jirin oggolaanshaha codsiga Midaynta, laakiin runtii waxaan rabaa

Source: www.habr.com

Add a comment