Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

Yek ji fonksiyonên herî pêwîst, ku ne di guhertoya belaş a GitLab de ye, ew e ku meriv li dijî betalkirina depoyê deng bide û daxwaza Merge (MR) kontrol bike, bi karanîna vekolîna kodê ya mecbûrî.

Werin em bi xwe fonksiyona hindiktirîn bikin - em ê Merge qedexe bikin heya ku çend pêşdebiran tiliya xwe bidin MR.

Çima ev jî pêwîst e?

Rêxistina me bi hêsanî dikare destûrnameyek GitLab bikire. Lê, ji ber ku pêşkeftin di qonaxek girtî de bêyî gihîştina Internetnternetê tê meşandin, û plansaziya budceya hişk heye, kirîna lîsansên xwe-rêvebirî bi fonksiyona pêwîst dikare gelek mehan dirêj bike, lê pêdivî ye ku niha xebat were kirin.

Di encamê de divê hûn:

  • an bi tevahî Merge di şaxên parastî de ji bo hin pêşdebiran qedexe bike, lê dûv re pêşdebirên ku mafê wana Mergeyê heye dema ku MR-yên kesên din wekî bonus tevdigerin nakokiyan werdigirin;
  • an jî fersendê bidin ku hûn bêyî vekolîna kodê bi şaxa xweya masterê re hevgirtinên bêkontrol bikin, hetta ew Junior be, yê ku tenê duh hate kar kirin.

Yekem tiştê ku min kir Google bû, bawer kir ku kesek bê guman tiştek wusa kiriye (bêyî ku kodê biguhezîne), lê derket holê ku di guhertoya civatê de hîn pêkanînek wusa tune.

Plana giştî ya xebatê

Wek mînak, em erêkirina daxwaza Merge li ser depoyek ceribandinê mîheng bikin myapp:

  1. Ka em ji bo gihîştina API-ya GitLab tokenek çêbikin (bi riya wê em ê di derheqê hejmara dengên "li" û "dijî" de agahdarî bistînin)
  2. Ka em tokenê li guherbarên GitLab zêde bikin
  3. Ka em Merge-ê di haleta xeletiyên di lûleyê de neçalak bikin (heke dengên têra xwe nebin)
  4. Werin em verastkirina dengdanê wekî beşek ji xeta CI/CD saz bikin
  5. Em kirina peymanan ji şaxên parastî re qedexe dikin; hemî guhertin tenê bi MR têne çêkirin
  6. Werin em kontrol bikin ka di dawiyê de çi qewimî

1. Ji bo gihîştina API-ê nîşanek çêbikin

Herin Mîhengên Bikarhêner → Nîşaneyên Gihîştinê û tokenê binivîsin:

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

Hesab ji bo wergirtina nîşanek
Gihîştina API dihêle hûn hema hema her tiştî bi depoyên xwe re bikin, ji ber vê yekê ez pêşniyar dikim ku hesabek Gitlab-ê ya cihêreng biafirînin, mafên hindiktirîn bidin depoyên xwe (mînak Reporter) û ji bo wê hesabê tokenek bistînin.

2. Nîşanê li guherbarên Gitlab zêde bikin

Mînakî, di gava berê de me nîşanek wergirt QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Mîhengan vekin → CI/CD → Guherbar → Guherbar zêde bikin → GITLAB_TOKEN_FOR_CI

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

Di encamê de em distînin:

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

Ev dikare li ser yek depo an jî li ser komek depoyan were kirin.

3. Ger erêkirina hevkaran piştî vekolîna kodê neyê wergirtin, me qedexeyek danî ser Merge.

Di rewşa me de, qedexeya li ser Merge dê ev be ku ger dengên têr nebin dê xeta meclîsê xeletiyek vegerîne.

Herin Mîhengan → Giştî → Daxwazên Hevgirtinê → Kontrolên Hevgirtinê û vebijarka ku divê xetên meclîsê bi serfirazî biqedînin çalak bikin.

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

4. Sazkirina boriyê

Ger we hîn ji bo serlêdana xwe boriyek CI/CD neafirandiye
Di koka depoyê de pelek biafirînin .gitlab-ci.yml bi naveroka herî hêsan:

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"

Ji bo veavakirina CI/CD depoyek veqetandî
Ez ê pêşniyar bikim ku depoyek cihêreng çêbikin ku tê de hûn hewce ne ku pelek myapp.gitlab-ci.yml biafirînin da ku boriyê mîheng bikin. Bi vî rengî hûn dikarin baştir gihîştina beşdaran kontrol bikin ku dikarin lûleya çêkirinê biguhezînin û tokenek gihîştinê bistînin.

Pêdivî ye ku cîhê pelê boriyê ya nû bi çûna depoya myapp were destnîşan kirin - Mîheng - CI/CD - Xetên meclîsê - Rêça veavakirina CI-ya xwerû - pelê nû diyar bikin, mînak. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Serişte: Linterek bikar bînin da ku di pelên GitLab CI de guhertinan bikin
Tewra ku hûn bi tenê bixebitin, xebata bi MR-ê dê bibe alîkariyek baş, ku hemî guhertinên xwe li pelên lûleyê bi navgîniyek linter bimeşîne. Ger hûn di hevoksaziya pelê YAML de xeletiyek bikin, ew ê xeta hilberîna we neşikîne, lê dê tenê Merge asteng bike.

Nimûneyek ji konteynirên bi lûleyên ku hûn dikarin di lûleya xwe de ava bikin:

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

Û mînakek qonaxa verastkirinê:

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;

Dimîne ku hûn çend parameteran li lûleya xwe zêde bikin da ku ew bixebite:

stages:
- test

variables:
NEED_VOTES: 1

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

Guherbara NEED_VOTES diyar dike ku ji bo ku Merge peyda bibe divê MR çend "tiştan" hebe. Nirxek bi yek re tê vê wateyê ku hûn bixwe dikarin MR-ya xwe bi "hezkirin" bidin pejirandin.

di nav xwe de qonaxa ceribandinê vedihewîne, ku hejmara "ecibandinan" kontrol dike.

Xeta herî hêsan ku mînaka myapp.gitlab-ci.yml bikar tîne
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

Naverok check-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/.*$/'

Zêdetir agahdarî di derbarê tiştê ku di dema verastkirinê de diqewime:

  • sînorkirinek heye ku kontrol tenê di dema afirandina MR-ê de di şaxên master an berdan / * de were kirin
  • bi karanîna GitLab API-yê, em hejmara "hezkirin" û "nexwazin" digirin.
  • ferqa di navbera bersivên erênî û neyînî de hesab bikin
  • heke ferq ji nirxa ku me di NEED_VOTES de destnîşan kiriye kêmtir be, wê hingê em şiyana yekbûnê asteng dikin

5. Qedexekirina commits ji bo şaxên parastî

Em şaxên ku ji bo wan divê em vekolînên kodê bikin diyar dikin û destnîşan dikin ku ew tenê dikarin bi MR-ê bi wan re bixebitin.

Ji bo vê yekê, biçin Mîhengan → Depo → Şaxên Parastî:

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

6. Kontrol bikin

NEED_VOTES saz bike: 0

Em MR-ê çêdikin û "nehezkirinê" dikin.

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

Di qeydên avakirinê de:

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

Naha "wek" bixin û dîsa dest bi kontrolê bikin:

Vekolîna kodê li Gitlab CE: heke pejirandinên daxwaza Merge tune be, lê ez bi rastî dixwazim

Source: www.habr.com

Add a comment