Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

Is e aon de na feartan as motha a tha a dhìth nach eil anns an dreach an-asgaidh de GitLab an comas bhòtadh an-aghaidh neoni an ath-reic gus smachd a chumail air iarrtas Merge (MR) a ’cleachdadh an ath-sgrùdadh còd èigneachail.

Nì sinn an gnìomh as ìsle sinn fhìn - cuiridh sinn à comas Merge gus an toir grunn luchd-leasachaidh “òrdagan suas” do MR.

Carson a tha seo idir?

Is urrainn don bhuidheann againn cead GitLab a cheannach. Ach, leis gu bheil an leasachadh air a dhèanamh ann an lùb dùinte gun ruigsinneachd air an eadar-lìn, agus gu bheil dealbhadh buidseit teann ann, faodaidh ceannach ceadan fèin-riaghlaidh leis a’ ghnìomhachd riatanach grunn mhìosan a thoirt, agus feumaidh tu a bhith ag obair a-nis.

Mar thoradh air an sin, feumaidh tu:

  • no gu tur a’ toirmeasg Merge a-steach do mheuran dìon airson cuid de luchd-leasachaidh, ach an uairsin bidh luchd-leasachaidh aig a bheil còir air Merge a’ faighinn còmhstri nuair a thèid MRs dhaoine eile còmhla mar bhuannachd;
  • no leigeil leat co-aonaidhean neo-riaghlaichte a dhèanamh leis a’ phrìomh mheur agad gun ath-sgrùdadh còd, eadhon ged is e Òigridh a th’ ann a thuinich ann an-dè.

B ’e a’ chiad rud a rinn mi a dhol gu google, a ’creidsinn gu robh cuideigin air rudeigin coltach ris a dhèanamh mu thràth (gun a bhith ag ùrachadh a’ chòd), ach thionndaidh e a-mach nach robh a leithid de bhuileachadh anns an dreach coimhearsnachd fhathast.

Sgeama obrach coitcheann

Mar eisimpleir, leig dhuinn cead iarraidh Merge a stèidheachadh air stòr deuchainn myapp:

  1. Cruthaichidh sinn comharra airson faighinn chun API GitLab (troimhe gheibh sinn fiosrachadh mun àireamh de bhòtaichean airson agus na aghaidh)
  2. Cuir tòcan ri caochladairean GitLab
  3. Cuir à comas Merge ma tha mearachdan san loidhne-phìoban (mura h-eil gu leòr bhòtaichean “airson”)
  4. Stèidhich dearbhadh bhòtaidh mar phàirt den loidhne-phìoban CI/CD
  5. Bidh sinn a’ toirmeasg geallaidhean a dhèanamh do mheuran dìonta, bidh sinn a’ dèanamh a h-uile atharrachadh tro MR a-mhàin
  6. Feuch an dèan sinn sgrùdadh air na thachair aig a’ cheann thall

1. Cruthaich tòcan gus cothrom fhaighinn air an API

Rach gu Roghainnean Cleachdaiche → Comharran Ruigsinneachd agus sgrìobh sìos an tòcan:

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

Cunntas airson an tòcan fhaighinn
Leigidh ruigsinneachd API leat cha mhòr rud sam bith a dhèanamh leis na stòran agad, agus mar sin tha mi a’ moladh dhut cunntas Gitlab air leth a chruthachadh, glè bheag de chòraichean a thoirt dha na stòran agad (mar Neach-aithris) agus comharra fhaighinn airson a’ chunntas sin.

2. Cuir an tòcan gu caochladairean Gitlab

Mar eisimpleir, anns a 'cheum roimhe, fhuair sinn tòcan QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Fosgail roghainnean → CI/CD → Caochlaidhean → Cuir caochlaideach → ris GITLAB_TOKEN_FOR_CI

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

Mar thoradh air an sin, gheibh sinn:

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

Faodar seo a dhèanamh an dà chuid air aon ionad-tasgaidh agus air buidheann de thasgaidhean.

3. Chuir sinn casg air Merge mura faighear aonta co-obraichean às deidh an ath-sgrùdadh còd

Anns a’ chùis againn, is e an casg air Merge gun till loidhne-phìoban an t-seanaidh mearachd mura h-eil bhòtaichean gu leòr ann.

Rach gu Settings → Coitcheann → Cuir còmhla iarrtasan → Merge Checks agus cuir an comas an roghainn Feumaidh loidhnichean cruinneachaidh ruith gu soirbheachail.

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

4. Stèidhich an loidhne-phìoban

Mura h-eil thu air loidhne-phìoban CI/CD a dhèanamh airson an tagraidh agad fhathast
Cruthaich faidhle ann am freumh an stòrais .gitlab-ci.yml le susbaint shìmplidh:

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 air leth airson rèiteachadh CI/CD
Bhithinn a’ moladh stòr air leth a dhèanamh far am feum thu faidhle myapp.gitlab-ci.yml a chruthachadh gus an loidhne-phìoban a stèidheachadh. San dòigh seo faodaidh tu smachd nas fheàrr fhaighinn air ruigsinneachd luchd-tabhartais as urrainn an loidhne-phìoban togail atharrachadh agus comharra ruigsinneachd fhaighinn.

Feumar suidheachadh an fhaidhle loidhne-phìoban ùr a shònrachadh le bhith a’ dol gu stòr myapp - Roghainnean - CI / CD - loidhnichean cruinneachaidh - slighe rèiteachaidh Custom CI - sònraich faidhle ùr, mar eisimpleir myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Gliocas: Cleachd loidhne-lìn gus atharraichean a dhèanamh air faidhlichean GitLab CI
Fiù ma tha thu ag obair leat fhèin, bidh obair tro MR na neach-cuideachaidh math, a’ ruith na h-atharrachaidhean agad air na faidhlichean loidhne-phìoban tron ​​​​lòchran. Ma nì thu mearachd ann an co-chòrdadh faidhle YAML, cha leig seo leat an loidhne-phìoban obrach a bhriseadh, ach cuiridh e casg air Merge.

Eisimpleir de shoithichean le lòchrain as urrainn dhut a chuir a-steach don loidhne-phìoban agad:

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

Agus eisimpleir den ìre dearbhaidh:

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;

Tha e fhathast ri beagan pharaimearan a chur ris an loidhne-phìoban agad gus toirt air obrachadh:

stages:
- test

variables:
NEED_VOTES: 1

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

Bidh an caochladair NEED_VOTES a’ dearbhadh cia mheud “òrdag suas” a dh’fheumas a bhith aig MR gus am bi Merge ri fhaighinn. Tha luach aon a’ ciallachadh gun urrainn dhut fhèin do MR aontachadh le bhith “a’ còrdadh ris”.

gabhail a-steach a’ toirt a-steach an ìre deuchainn, a nì sgrùdadh air an àireamh de “likes”.

An loidhne-phìoban as sìmplidh a 'cleachdadh myapp.gitlab-ci.yml mar eisimpleir
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

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

Ionnsaich tuilleadh mu na thachras nuair a nì thu sgrùdadh:

  • tha an cuingealachadh air a shuidheachadh nach bi an t-seic ach nuair a chruthaicheas tu MR anns na meuran maighstir no leigeil ma sgaoil / *
  • a’ cleachdadh an GitLab API, faigh an àireamh de “likes” agus “nach toil leat”
  • obrachadh a-mach an diofar eadar freagairtean dearbhach agus àicheil
  • ma tha an eadar-dhealachadh nas lugha na an luach a shuidhich sinn ann an NEED_VOTES, cuiridh sinn casg air a’ chomas a dhol còmhla

5. Disable a 'gealltainn geugan dìon

Bidh sinn a’ dearbhadh na meuran air am bu chòir dhuinn ath-sgrùdadh còd a dhèanamh agus a’ nochdadh nach urrainnear obrachadh leotha ach tro MR.

Gus seo a dhèanamh, rachaibh gu Settings → Repository → Meuran Dìon:

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

6. Sgrùdadh

Suidhich NEED_VOTES: 0

Bidh sinn a’ dèanamh MR agus a’ cur “dislike”.

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

Anns na clàran togail:

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

A-nis cuir "like" agus ruith ath-sgrùdadh:

Lèirmheas còd ann an Gitlab CE: mura h-eil aonta iarrtas Merge ann, ach tha mi dha-rìribh ag iarraidh

Source: www.habr.com

Cuir beachd ann