Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

Un o'r nodweddion sydd ei angen fwyaf nad yw yn y fersiwn am ddim o GitLab yw'r gallu i bleidleisio yn erbyn sero'r ystorfa i reoli'r cais Uno (MR) gan ddefnyddio'r adolygiad cod gorfodol.

Byddwn yn gwneud yr ymarferoldeb lleiaf ein hunain - byddwn yn analluogi Cyfuno nes bod sawl datblygwr yn rhoi “bawd i fyny” i MR.

Pam mae hyn o gwbl?

Gall ein sefydliad fforddio prynu trwydded GitLab. Ond, gan fod y datblygiad yn cael ei wneud mewn dolen gaeedig heb fynediad i'r Rhyngrwyd, a bod cynllunio cyllideb llym, gall prynu trwyddedau hunan-reoli gyda'r swyddogaeth angenrheidiol gymryd misoedd lawer, ac mae angen i chi weithio nawr.

O ganlyniad, mae'n rhaid i chi:

  • neu wahardd yn gyfan gwbl Cyfuno i ganghennau gwarchodedig ar gyfer rhai datblygwyr, ond yna datblygwyr sydd â'r hawl i Uno yn derbyn gwrthdaro wrth uno MRs pobl eraill fel bonws;
  • neu ganiatáu i chi wneud uno afreolus gyda'ch cangen meistr heb adolygu cod, hyd yn oed os yw'n Iau sydd newydd ymgartrefu ddoe.

Y peth cyntaf wnes i oedd mynd google, gan gredu bod rhywun eisoes wedi gwneud rhywbeth tebyg (heb fireinio'r cod), ond daeth i'r amlwg nad oedd gweithrediad o'r fath yn y fersiwn gymunedol eto.

Cynllun gwaith cyffredinol

Er enghraifft, gadewch i ni sefydlu cais Cyfuno cymeradwyaethau ar ystorfa brawf myapp:

  1. Gadewch i ni greu tocyn ar gyfer cyrchu API GitLab (drwyddo byddwn yn derbyn gwybodaeth am nifer y pleidleisiau o blaid ac yn erbyn)
  2. Ychwanegu tocyn at newidynnau GitLab
  3. Analluogi Cyfuno os oes gwallau ar y gweill (os nad oes digon o bleidleisiau “o blaid”)
  4. Sefydlu dilysu pleidlais fel rhan o'r biblinell CI/CD
  5. Byddwn yn gwahardd ymrwymo i ganghennau gwarchodedig, dim ond drwy MR y byddwn yn gwneud pob newid
  6. Gadewch i ni wirio beth ddigwyddodd yn y diwedd

1. Creu tocyn i gael mynediad i'r API

Ewch i Gosodiadau Defnyddiwr → Tocynnau Mynediad ac ysgrifennwch y tocyn:

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

Cyfrif i dderbyn y tocyn
Mae mynediad API yn caniatáu ichi wneud bron unrhyw beth gyda'ch storfeydd, felly rwy'n awgrymu eich bod chi'n creu cyfrif Gitlab ar wahân, yn rhoi'r hawliau lleiaf posibl iddo i'ch storfeydd (fel Gohebydd) a chael tocyn ar gyfer y cyfrif hwnnw.

2. Ychwanegwch y tocyn at newidynnau Gitlab

Er enghraifft, yn y cam blaenorol, cawsom docyn QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Agor Gosodiadau → CI/CD → Newidynnau → Ychwanegu Newidyn → GITLAB_TOKEN_FOR_CI

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

O ganlyniad, rydym yn cael:

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

Gellir gwneud hyn ar un gadwrfa ac ar grŵp o gadwrfeydd.

3. Rydym yn rhoi gwaharddiad ar Cyfuno os na cheir cymeradwyaeth cydweithwyr ar ôl yr adolygiad cod

Yn ein hachos ni, y gwaharddiad ar Uno fydd y bydd piblinell y cynulliad yn dychwelyd gwall os nad oes digon o bleidleisiau.

Ewch i Gosodiadau → Cyffredinol → Cyfuno Ceisiadau → Cyfuno Gwiriadau a galluogi'r opsiwn Rhaid i linellau Cynulliad redeg yn llwyddiannus.

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

4. Gosodwch y biblinell

Os nad ydych wedi gwneud piblinell CI/CD ar gyfer eich cais eto
Creu ffeil yng ngwraidd yr ystorfa .gitlab-ci.yml gyda chynnwys syml:

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"

Ystorfa ar wahân ar gyfer cyfluniad CI/CD
Byddwn yn argymell gwneud ystorfa ar wahân lle mae angen i chi greu ffeil myapp.gitlab-ci.yml i sefydlu'r biblinell. Fel hyn gallwch reoli mynediad cyfranwyr yn well a all newid y bibell adeiladu a chael tocyn mynediad.

Bydd angen nodi lleoliad y ffeil piblinell newydd trwy fynd i'r gadwrfa myapp - Gosodiadau - CI / CD - Llinellau Cynulliad - Llwybr cyfluniad CI Custom - nodwch ffeil newydd, er enghraifft myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Awgrym: Defnyddiwch linyn i wneud newidiadau i ffeiliau CI GitLab
Hyd yn oed os ydych chi'n gweithio ar eich pen eich hun, bydd gweithio trwy MR yn gynorthwyydd da, gan redeg eich holl newidiadau i'r ffeiliau piblinell trwy'r linter. Os gwnewch gamgymeriad yng nghystrawen y ffeil YAML, ni fydd hyn yn caniatáu ichi dorri'r biblinell weithio, ond yn syml bydd yn rhwystro Cyfuno.

Enghraifft o gynwysyddion gyda linters y gallwch eu hymgorffori yn eich piblinell:

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

Ac enghraifft o'r cam dilysu:

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;

Mae angen ychwanegu ychydig o baramedrau at eich piblinell o hyd i wneud iddo weithio:

stages:
- test

variables:
NEED_VOTES: 1

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

Mae'r newidyn NEED_VOTES yn pennu faint o MR "bawd i fyny" sy'n rhaid ei gael er mwyn i Merge fod ar gael. Mae gwerth un yn golygu y gallwch chi eich hun gymeradwyo'ch MR trwy ei "hoffi".

cynnwys yn cynnwys y cam prawf, sy'n gwirio nifer y "hoffi".

Y biblinell symlaf gan ddefnyddio myapp.gitlab-ci.yml fel enghraifft
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

Cynnwys siec-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/.*$/'

Dysgwch fwy am yr hyn sy'n digwydd wrth wirio:

  • gosodir y cyfyngiad mai dim ond wrth greu MR yn y canghennau meistr neu ryddhau /* y bydd y gwiriad
  • gan ddefnyddio'r API GitLab, mynnwch nifer y "hoffau" a'r "casau"
  • cyfrifo'r gwahaniaeth rhwng ymatebion cadarnhaol a negyddol
  • os yw'r gwahaniaeth yn llai na'r gwerth a osodwyd gennym yn NEED_VOTES, yna rydym yn rhwystro'r gallu i uno

5. Disable yn ymrwymo i ganghennau gwarchodedig

Rydym yn pennu'r canghennau y dylem gynnal adolygiad cod ar eu cyfer ac yn nodi mai dim ond trwy MR y gellir gweithio â nhw.

I wneud hyn, ewch i Gosodiadau → Cadwrfa → Canghennau Gwarchodedig:

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

6. Gwirio

Gosod NEED_VOTES: 0

Rydyn ni'n gwneud MR ac yn rhoi "dislike".

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

Yn y logiau adeiladu:

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

Nawr rhowch "like" a rhedeg ailwiriad:

Adolygiad cod yn Gitlab CE: os nad oes cais am gymeradwyaeth uno, ond rydw i wir eisiau

Ffynhonnell: hab.com

Ychwanegu sylw