Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

Usa sa labing gikinahanglan nga bahin nga wala sa libre nga bersyon sa GitLab mao ang abilidad sa pagboto batok sa pag-zero sa repository aron makontrol ang Merge request (MR) gamit ang mandatory code review.

Buhaton namo ang pinakagamay nga gamit sa among kaugalingon - among i-disable ang Merge hangtod ang pipila ka developers mohatag ug “thumbs up” kang MR.

Ngano man kini?

Ang among organisasyon makahimo sa pagpalit og lisensya sa GitLab. Apan, tungod kay ang pag-uswag gihimo sa usa ka sirado nga loop nga wala’y access sa Internet, ug adunay usa ka estrikto nga pagplano sa badyet, ang pagpalit sa mga lisensya nga gidumala sa kaugalingon nga adunay kinahanglan nga pag-andar mahimo’g daghang mga bulan, ug kinahanglan nimo nga magtrabaho karon.

Ingon usa ka sangputanan, kinahanglan nimo:

  • o hingpit nga gidid-an ang Merge ngadto sa giprotektahan nga mga sanga alang sa pipila ka mga developer, apan ang mga developers nga adunay katungod sa Paghiusa makadawat og mga panagbangi sa dihang i-merge ang mga MR sa ubang mga tawo isip bonus;
  • o tugotan ka sa pagbuhat sa dili makontrol nga paghiusa sa imong master branch nga walay code review, bisan kung kini usa ka Junior nga bag-o lang nakapuyo kagahapon.

Ang una nga butang nga akong gibuhat mao ang pag-google, nga nagtuo nga adunay usa nga nakahimo na sa usa ka butang nga susama (nga wala’y pagpino sa code), apan kini nahimo nga wala’y ingon nga pagpatuman sa bersyon sa komunidad.

Kinatibuk-ang laraw sa trabaho

Isip usa ka pananglitan, atong i-set up ang Merge request approvals sa usa ka test repository myapp:

  1. Maghimo kita og usa ka token para sa pag-access sa GitLab API (pinaagi niini makadawat kita og impormasyon mahitungod sa gidaghanon sa mga boto alang ug batok)
  2. Pagdugang usa ka timaan sa mga variable sa GitLab
  3. I-disable ang Merge kung adunay mga sayup sa pipeline (kung wala’y igo nga "para" nga mga boto)
  4. I-set up ang validation sa boto isip kabahin sa pipeline sa CI/CD
  5. Idili namo ang paghimo sa mga pasalig sa mga giprotektahan nga mga sanga, among gihimo ang tanan nga mga pagbag-o pinaagi lamang sa MR
  6. Atong susihon kung unsa ang nahitabo sa katapusan

1. Paghimo og token aron ma-access ang API

Adto sa Mga Setting sa Gumagamit → Pag-access sa mga Token ug isulat ang timaan:

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

Account aron makadawat sa token
Gitugotan ka sa pag-access sa API nga mahimo ang halos bisan unsang butang sa imong mga repositoryo, mao nga gitambagan ko ikaw nga maghimo usa ka lahi nga Gitlab account, hatagan kini gamay nga katungod sa imong mga repositoryo (pananglitan, Reporter) ug pagkuha usa ka timaan alang niini nga account.

2. Idugang ang token sa mga variable sa Gitlab

Pananglitan, sa miaging lakang, nakadawat kami usa ka timaan QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Ablihi ang Settings → CI/CD → Variables → Add Variable → GITLAB_TOKEN_FOR_CI

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

Ingon usa ka sangputanan, makuha namon:

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

Mahimo kini sa usa ka repository ug sa grupo sa mga repository.

3. Gidili namo ang Merge kung dili madawat ang pagtugot sa mga kauban pagkahuman sa pagrepaso sa code

Sa among kaso, ang pagdili sa Merge mao nga ang pipeline sa asembliya magbalik usa ka sayup kung wala’y igo nga mga boto.

Adto sa Settings → General → Merge Requests → Merge Checks ug i-enable ang opsyon Ang mga linya sa asembliya kinahanglang modagan nga malampuson.

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

4. I-set up ang pipeline

Kung wala ka pa makahimo ug CI/CD pipeline para sa imong aplikasyon
Paghimo og usa ka file sa gamut sa repository .gitlab-ci.yml sa yano nga sulod:

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"

Separado nga repository alang sa CI/CD configuration
Irekomendar nako ang paghimo og lahi nga repository diin kinahanglan ka maghimo og myapp.gitlab-ci.yml file aron ma-set up ang pipeline. Niining paagiha mas makontrol nimo ang pag-access sa mga kontribyutor nga makausab sa pipeline sa pagtukod ug makakuha og access token.

Ang lokasyon sa bag-ong pipeline file kinahanglan nga ipiho pinaagi sa pag-adto sa myapp repository - Mga Setting - CI / CD - Mga linya sa asembliya - Pasadya nga agianan sa pagsumpo sa CI - pagpiho usa ka bag-ong file, pananglitan myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Sugyot: Paggamit og linter aron makahimo og mga kausaban sa mga file sa GitLab CI
Bisan kung nagtrabaho ka nga nag-inusara, ang pagtrabaho pinaagi sa MR mahimong usa ka maayong katabang, nga nagpadagan sa tanan nimong mga pagbag-o sa mga file sa pipeline pinaagi sa linter. Kung masayop ka sa syntax sa YAML file, dili kini magtugot kanimo sa pagbungkag sa nagtrabaho nga pipeline, apan i-block lang ang Merge.

Usa ka pananglitan sa mga sudlanan nga adunay mga linter nga mahimo nimong i-embed sa imong pipeline:

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

Ug usa ka pananglitan sa yugto sa pag-validate:

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;

Nagpabilin kini nga pagdugang pipila ka mga parameter sa imong pipeline aron kini molihok:

stages:
- test

variables:
NEED_VOTES: 1

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

Ang NEED_VOTES nga variable nagtino kung pila ang kinahanglan nga "thumbs up" nga MR aron magamit ang Merge. Ang bili sa usa nagpasabot nga ikaw mismo makaaprobar sa imong MR pinaagi sa "paggusto" niini.

naglakip naglakip sa pagsulay nga yugto, nga nagsusi sa gidaghanon sa mga "gusto".

Ang pinakasimple nga pipeline gamit ang myapp.gitlab-ci.yml isip pananglitan
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

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

Pagkat-on og dugang mahitungod sa unsay mahitabo sa pagsusi:

  • ang pagdili gitakda nga ang tseke mahimo ra kung maghimo usa ka MR sa master o buhian /* nga mga sanga
  • gamit ang GitLab API, kuhaa ang gidaghanon sa "gusto" ug "dili gusto"
  • kuwentaha ang kalainan tali sa positibo ug negatibo nga mga tubag
  • kung ang kalainan gamay ra sa kantidad nga among gibutang sa NEED_VOTES, nan among gibabagan ang abilidad sa paghiusa

5. I-disable ang mga commit sa giprotektahan nga mga sanga

Among gitino ang mga sanga diin kinahanglan namong ipahigayon ang pagrepaso sa kodigo ug gipakita nga sila mahimo lamang nga magtrabaho pinaagi sa MR.

Aron mahimo kini, adto sa Settings → Repository → Protected Branches:

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

6. Pagsusi

Ibutang ang NEED_VOTES: 0

Nag MR mi ug nagbutang ug "dislike".

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

Sa mga log sa pagtukod:

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

Karon ibutang ang "like" ug padagana ang usa ka re-check:

Pagrepaso sa code sa Gitlab CE: kung wala’y pag-apruba sa hangyo sa Paghiusa, apan gusto gyud nako

Source: www.habr.com

Idugang sa usa ka comment