Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

Ceann de na feidhmeanna is gá, nach bhfuil sa leagan saor in aisce de GitLab, is ea an cumas chun vótáil i gcoinne neamhniú stór agus iarratas Cumaisc rialaithe (MR), ag baint úsáide as an athbhreithniú cód éigeantach.

Déanaimis an fheidhmiúlacht íosta sinn féin - cuirfimid cosc ​​​​ar Chumasc go dtí go dtabharfaidh roinnt forbróirí ordóg do MR.

Cén fáth é seo ar chor ar bith?

Tá sé d’acmhainn ag ár n-eagraíocht ceadúnas GitLab a cheannach go héasca. Ach, ós rud é go ndéantar an fhorbairt i lúb dúnta gan rochtain ar an Idirlíon, agus go bhfuil pleanáil bhuiséid dhian ann, is féidir le ceannach ceadúnais féin-bhainistithe leis an bhfeidhmiúlacht riachtanach tarraingt ar feadh míonna fada, ach ní mór obair a dhéanamh anois.

Mar thoradh air sin caithfidh tú:

  • nó a thoirmeasc go hiomlán Cumaisc i mbrainsí cosanta do roinnt forbróirí, ach ansin forbróirí a bhfuil an ceart chun Cumaisc a fháil coinbhleachtaí nuair a chumasc daoine eile MRs mar bhónas;
  • nó tabhair an deis cumaisc neamhrialaithe a dhéanamh le do mháistir-bhrainse gan athbhreithniú cód, fiú más rud é gur Sóisearach é, a fostaíodh inné.

Ba é an chéad rud a rinne mé ná Google, ag creidiúint go raibh rud éigin den chineál céanna déanta ag duine éigin cheana féin (gan an cód a mhodhnú), ach d'éirigh sé amach nach raibh aon chur i bhfeidhm den sórt sin sa leagan pobail fós.

Scéim ghinearálta oibre

Mar shampla, déanaimis ceaduithe iarratais Cumaisc a chumrú ar stór tástála miapp:

  1. Cruthaímid comhartha le haghaidh rochtana ar an GitLab API (tríd seo gheobhaimid faisnéis faoi líon na vótaí "ar son" agus "ina choinne")
  2. Cuirimis an comhartha leis na hathróga GitLab
  3. Díchumasaimis Merge i gcás earráidí ar an bpíblíne (mura bhfuil go leor upvótaí ann)
  4. Cuirfimid fíorú vóta ar bun mar chuid den phíblíne CI/CD
  5. Cuirimid cosc ​​ar ghealltanais a dhéanamh do bhrainsí cosanta; ní dhéantar gach athrú ach trí MR
  6. Déanaimis seiceáil cad a tharla sa deireadh

1. Cruthaigh comhartha chun rochtain a fháil ar an API

Téigh go Socruithe Úsáideora → Comharthaí Rochtana agus scríobh síos an comhartha:

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

Cuntas chun comhartha a fháil
Ligeann rochtain API duit beagnach rud ar bith a dhéanamh le do stórtha, mar sin molaim cuntas Gitlab ar leith a chruthú, ag tabhairt cearta íosta do do stórtha (m.sh. Tuairisceoir) agus ag fáil comhartha don chuntas sin.

2. Cuir an comhartha leis na hathróga Gitlab

Mar shampla, sa chéim roimhe seo fuaireamar comhartha QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Oscail Socruithe → CI/CD → Athróga → Cuir athróg → Leis GITLAB_TOKEN_FOR_CI

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

Mar thoradh air sin, faighimid:

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

Is féidir é seo a dhéanamh ar stór amháin nó ar ghrúpa stórtha.

3. Chuireamar cosc ​​ar Chumasc mura bhfaightear formheas comhghleacaithe tar éis athbhreithniú an chóid.

Is é ár gcás, is é an toirmeasc ar Merge go dtabharfaidh an píblíne tionóil earráid ar ais mura bhfuil go leor vótaí ann.

Téigh go Socruithe → Ginearálta → Cumaisc Iarratais → Cumaisc Seiceálacha agus cumasaigh an rogha Ní mór línte cóimeála a chomhlánú go rathúil.

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

4. An píblíne a shocrú

Mura bhfuil píblíne CI/CD cruthaithe agat do d’iarratas
Cruthaigh comhad i bhfréamh an taisclann .gitlab-ci.yml leis an ábhar is simplí:

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"

Stór ar leith do chumraíocht CI/CD
Mholfainn stór ar leith a dhéanamh ina gcaithfidh tú comhad myapp.gitlab-ci.yml a chruthú chun an phíblíne a chumrú. Ar an mbealach seo is féidir leat rochtain na rannpháirtithe a rialú níos fearr ar féidir leo an píblíne tógála a athrú agus comhartha rochtana a fháil.

Ní mór suíomh an chomhaid píblíne nua a shonrú ach dul go dtí an stór myapp - Socruithe - CI/CD - Línte cóimeála - Cosán cumraíochta CI saincheaptha - sonraigh an comhad nua, m.sh. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Leid: Bain úsáid as línéar chun athruithe a dhéanamh ar chomhaid CI GitLab
Fiú má oibríonn tú i d’aonar, beidh oibriú trí MR ina chuidiú maith, ag rith do chuid athruithe go léir ar chomhaid píblíne trí línéar. Má dhéanann tú botún i gcomhréir an chomhaid YAML, ní bhrisfidh sé do phíblíne táirgthe, ach cuirfidh sé bac ar Merge.

Sampla de choimeádáin le lintéir is féidir leat a chur isteach i do phíblíne:

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

Agus sampla den chéim fíoraithe:

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;

Tá sé fós le roinnt paraiméadair a chur le do phíblíne le go n-oibreoidh sé:

stages:
- test

variables:
NEED_VOTES: 1

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

Cinneann an athróg NEED_VOTES cé mhéad “ordóg suas” MR a chaithfidh a bheith ann le go mbeidh Merge ar fáil. Ciallaíonn luach atá comhionann le luach amháin gur féidir leat féin do MR a cheadú trí “thaitníonn” leis.

Áirítear san áireamh an chéim tástála, a sheiceálann an líon “is maith liom”.

An phíblíne is simplí ag baint úsáide as an sampla de 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

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

Tuilleadh eolais faoina dtarlaíonn le linn fíoraithe:

  • tá srian ann nach ndéanfar an tseiceáil ach amháin nuair a chruthaítear MR sna brainsí máistir nó scaoileadh/*
  • ag baint úsáide as an API GitLab, faighimid an líon “is maith liom” agus “is maith liom”
  • ríomh an difríocht idir freagraí dearfacha agus diúltacha
  • má tá an difríocht níos lú ná an luach a shocraigh muid i NEED_VOTES, ansin cuirimid bac ar chumas cumasc

5. Toirmeasc ar bhrainsí cosanta

Sainmhínímid na brainsí nach mór dúinn athbhreithnithe cód a dhéanamh ina leith agus cuirimid in iúl nach féidir oibriú leo ach trí MR.

Chun seo a dhéanamh, téigh go Socruithe → Stór → Brainsí Cosanta:

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

6. Seiceáil

Socraigh NEED_VOTES: 0

Déanaimid MR agus cuirimid “nach dtaitníonn”.

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

Sna logaí tógála:

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

Anois cuir “like” agus tosaigh ag seiceáil arís:

Athbhreithniú cód in Gitlab CE: mura bhfuil ceaduithe iarratais Merge ann, ach ba mhaith liom é sin a dhéanamh

Foinse: will.com

Add a comment