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
- Gadewch i ni greu tocyn ar gyfer cyrchu API GitLab (drwyddo byddwn yn derbyn gwybodaeth am nifer y pleidleisiau o blaid ac yn erbyn)
- Ychwanegu tocyn at newidynnau GitLab
- Analluogi Cyfuno os oes gwallau ar y gweill (os nad oes digon o bleidleisiau “o blaid”)
- Sefydlu dilysu pleidlais fel rhan o'r biblinell CI/CD
- Byddwn yn gwahardd ymrwymo i ganghennau gwarchodedig, dim ond drwy MR y byddwn yn gwneud pob newid
- 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:
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
O ganlyniad, rydym yn cael:
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.
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:
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:
6. Gwirio
Gosod NEED_VOTES: 0
Rydyn ni'n gwneud MR ac yn rhoi "dislike".
Yn y logiau adeiladu:
Nawr rhowch "like" a rhedeg ailwiriad:
Ffynhonnell: hab.com