Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

Ny iray amin'ireo fiasa ilaina indrindra, izay tsy ao amin'ny GitLab maimaim-poana, dia ny fahafahana mifidy amin'ny fanafoanana ny fitehirizana sy ny fanaraha-maso ny fangatahana Merge (MR), amin'ny fampiasana ny famerenana kaody tsy maintsy atao.

Andeha isika hanao ny fampandehanana farany ambany indrindra - handrara ny Merge isika mandra-pahatongan'ny mpamorona maro hanome an'i MR ankihibe.

Nahoana no ilaina izany?

Afaka mividy lisansa GitLab mora foana ny fikambananay. Saingy, satria ny fampandrosoana dia tanterahana amin'ny loop mihidy tsy misy fidirana amin'ny Internet, ary misy drafitra hentitra momba ny teti-bola, ny fividianana fahazoan-dΓ lana mitantana tena miaraka amin'ny fiasa ilaina dia mety haharitra volana maromaro, fa ny asa dia mila atao izao.

Vokatr'izany dia tsy maintsy:

  • na mandrara tanteraka ny fampifangaroana amin'ny sampana arovana ho an'ny mpamorona sasany, fa avy eo ireo mpamorona manana zo hanambatra dia mahazo fifandirana rehefa manambatra ny MR an'ny olon-kafa ho tombony;
  • na omeo fahafahana hanao fampifangaroana tsy voafehy amin'ny sampana tompony tsy misy famerenana ny code, na dia i Junior aza, izay nokaramaina vao omaly.

Ny zavatra voalohany nataoko dia ny Google, nino fa nisy olona efa nanao zavatra mitovy amin'izany (tsy nanova ny kaody), saingy hita fa tsy mbola nisy fampiharana toy izany tao amin'ny dikan-tenin'ny vondrom-piarahamonina.

Rafitra ankapobeny ny asa

Ohatra, andeha hojerentsika ny fankatoavana ny fangatahana Merge amin'ny tahiry andrana myapp:

  1. Andao hamorona famantarana ho an'ny fidirana amin'ny GitLab API (amin'ny alalan'izany no hahazoantsika fampahalalana momba ny isan'ny vato "ho" sy "fanoherana")
  2. Andao ampidiro ao amin'ny fari-pitsipika GitLab ny famantarana
  3. Andeha hofoanana ny Merge raha sendra misy lesoka ao amin'ny fantsona (raha tsy ampy ny upvotes)
  4. Andao hametraka fanamarinana latsa-bato ao anatin'ny fantsona CI/CD
  5. RarΓ nay ny fanoloran-tena amin'ny sampana arovana; ny fanovana rehetra dia atao amin'ny alΓ lan'ny MR ihany
  6. Andeha hojerentsika izay nitranga tamin'ny farany

1. Mamorona famantarana hidirana amin'ny API

Mandehana any amin'ny mpampiasa Settings β†’ Access Token ary soraty ny famantarana:

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

Kaonty handraisana token
Ny fidirana amin'ny API dia ahafahanao manao saika na inona na inona amin'ny trano fitehirizanao, noho izany dia manoro hevitra ny hamorona kaonty Gitlab misaraka aho, manome zo kely indrindra amin'ny fitehirizanao (ohatra Reporter) ary mahazo marika ho an'io kaonty io.

2. Ampio ny mari-pamantarana amin'ny fari-pitsipika Gitlab

Ohatra, tamin'ny dingana teo aloha dia nahazo famantarana izahay QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Sokafy ny Settings β†’ CI/CD β†’ Variables β†’ Add variable β†’ GITLAB_TOKEN_FOR_CI

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

Vokatr'izany dia mahazo:

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

Azo atao izany na amin'ny tahiry iray na amin'ny vondron'olona.

3. Mametraka fandrarana ny Merge izahay raha tsy voaray ny fankatoavan'ny mpiara-miasa aorian'ny famerenana ny code.

Aminay, ny fandrarana amin'ny Merge dia ny famerenan'ny pipeline ny assemblΓ©e fahadisoana raha tsy ampy ny vato.

Mandehana any amin'ny Settings β†’ General β†’ Merge Requests β†’ Merge Checks ary avelao ny safidy Tsy maintsy vita soa aman-tsara ny tsipika fivoriambe.

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

4. Fametrahana ny fantsona

Raha mbola tsy namorona fantsona CI/CD ho an'ny fampiharanao ianao
Mamorona rakitra ao amin'ny fototry ny tahiry .gitlab-ci.yml miaraka amin'ny atiny tsotra indrindra:

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"

Trano fitehirizana misaraka ho an'ny fanamafisana CI/CD
Manoro hevitra aho ny hanao tahiry mitokana izay ilanao hamoronana rakitra myapp.gitlab-ci.yml hanamboarana ny fantsona. Amin'izany fomba izany dia azonao atao ny mifehy tsara kokoa ny fidirana amin'ireo mpandray anjara izay afaka manova ny fantsona fananganana ary mahazo marika fidirana.

Ny toerana misy ny fichier pipeline vaovao dia mila faritana amin'ny alΓ lan'ny fandehanana any amin'ny myapp repository - Settings - CI/CD - Assembly lines - Custom CI configuration route - mamaritra ny rakitra vaovao, oh. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Soso-kevitra: MampiasΓ  linter raha hanova ny rakitra GitLab CI
Na dia miasa irery aza ianao, dia ho fanampiana tsara ny miasa amin'ny MR, mampandeha ny fanovana rehetra ataonao amin'ny rakitra fantsona amin'ny alΓ lan'ny linter. Raha manao hadisoana ianao amin'ny syntax amin'ny rakitra YAML dia tsy hanapaka ny fantsona famokarana anao izany, fa hanakana ny Merge fotsiny.

Ohatra iray amin'ny kaontenera misy linters azonao amboarina ao anaty fantsona anao:

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

Ary ohatra iray amin'ny dingana fanamarinana:

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;

Mbola ilaina ny manampy masontsivana vitsivitsy amin'ny fantsonao mba hampahomby azy:

stages:
- test

variables:
NEED_VOTES: 1

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

Ny fari-piadidian'ny NEED_VOTES dia mamaritra hoe firy ny "ankiben-kendry" MR tsy maintsy ananany mba hahatongavana amin'ny Merge. Ny sanda mitovy amin'ny iray dia midika fa ny tenanao dia afaka mankasitraka ny MR anao amin'ny "tia" azy.

tafiditra ao anatin'izany ny dingana andrana, izay manamarina ny isan'ny "j'aime".

Ny fantsona tsotra indrindra mampiasa ny ohatry ny 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

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

Fanazavana fanampiny momba izay mitranga mandritra ny fanamarinana:

  • misy famerana fa rehefa mamorona MR ao amin'ny master na release/* branches ihany no hanaovana ny fisavana
  • amin'ny fampiasana ny GitLab API, mahazo ny isan'ny "tia" sy "tsy tia" isika
  • kajy ny fahasamihafana misy eo amin'ny valiny tsara sy ratsy
  • raha kely noho ny sanda napetrakay ao amin'ny NEED_VOTES ny fahasamihafana, dia sakanana ny fahafahana mitambatra

5. Mandrara ny fanoloran-tena amin'ny sampana arovana

Faritanay ireo sampana izay tsy maintsy anaovanay famerenana ny kaody ary manondro fa amin'ny alΓ lan'ny MR ihany no azo iasana azy ireo.

Mba hanaovana izany, mankanesa any amin'ny Settings β†’ Repository β†’ Protected Branches:

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

6. Jereo

Mametraha NEED_VOTES: 0

Manao MR izahay ary mametraka "tsy tia".

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

Ao amin'ny fananganana logs:

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

Asio "j'aime" izao ary manomboka manamarina indray:

Famerenana ny kaody ao amin'ny Gitlab CE: raha tsy misy fankatoavana ny fangatahana Merge, fa tena tiako izany

Source: www.habr.com

Add a comment