Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

Rimwe remabasa anonyanya kudiwa, risiri muyemahara vhezheni yeGitLab, kugona kuvhota uchipokana nerepository nullification uye kutonga Merge chikumbiro (MR), uchishandisa inosungirwa kodhi ongororo.

Ngatiite hushoma kushanda isu pachedu - ticharambidza Merge kudzamara vagadziri vakati wandei vapa MR chigunwe kumusoro.

Nei izvi zvichitodiwa?

Sangano redu rinokwanisa kutenga rezinesi reGitLab zviri nyore. Asi, sezvo budiriro inoitwa yakavharwa loop pasina Internet kuwana, uye kune yakasimba kuronga bhajeti, kutenga marezinesi anozvitarisira ane basa rinodiwa anogona kukwevera mberi kwemwedzi yakawanda, asi basa rinofanirwa kuitwa ikozvino.

Nekuda kweizvozvo iwe unofanirwa:

  • kana kurambidza zvachose Kubatanidza mumapazi akadzivirirwa kune vamwe vanogadzira, asi ipapo vagadziri vane kodzero yeKubatanidza vanogamuchira kukakavara pakubatanidza MRs dzevamwe sebhonasi;
  • kana kupa mukana wekuita kusingadzoreki kusanganisa nebazi rako tenzi pasina ongororo yekodhi, kunyangwe ari Junior, akapihwa basa nezuro.

Chinhu chekutanga chandakaita chaiva Google, ndichitenda kuti mumwe munhu akanga atoita chimwe chinhu chakafanana (pasina kugadzirisa kodhi), asi zvakazoitika kuti pakanga pasina kushandiswa kwakadaro munharaunda yemunharaunda.

General chirongwa chebasa

Semuenzaniso, ngatigadzirisei Merge chikumbiro chemvumo pane yebvunzo repository myapp:

  1. Ngatigadzirei chiratidzo chekuwana iyo GitLab API (kuburikidza nayo isu tichawana ruzivo nezve nhamba yemavhoti "e" uye "anopesana").
  2. Ngatiwedzerei chiratidzo kune GitLab zvinosiyana
  3. Ngatiregei Kubatanidza kana paine zvikanganiso mupombi (kana pasina mavhoti akakwana)
  4. Ngatimisei yekuongorora mavhoti sechikamu cheCI/CD pombi
  5. Isu tinorambidza kuita zvisungo kumapazi akachengetedzwa; shanduko dzese dzinoitwa chete kuburikidza naMR
  6. Ngationgororei zvakaitika pakupedzisira

1. Gadzira chiratidzo kuti uwane iyo API

Enda kune Zvirongwa zveMushandisi β†’ Svika Tokens uye nyora pasi chiratidzo:

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

Akaunti yekugamuchira chiratidzo
API yekuwana inobvumidza iwe kuti uite chero chinhu nemarepositories ako, saka ini ndinokurudzira kugadzira yakaparadzana Gitlab account, ichipa kodzero shoma kune ako repositori (semuenzaniso Reporter) uye kuwana chiratidzo cheiyo account.

2. Wedzera chiratidzo kune zvinyorwa zveGitlab

Semuenzaniso, munhanho yapfuura takagamuchira chiratidzo QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Vhura Settings β†’ CI/CD β†’ Variables β†’ Wedzera shanduko β†’ GITLAB_TOKEN_FOR_CI

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

Somugumisiro tinowana:

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

Izvi zvinogona kuitwa pane imwe repository kana pane boka rezvinyorwa.

3. Isu tinoisa kurambidzwa kweKubatanidza kana kubvumidzwa kwevatinoshanda navo kusingagamuchirwi mushure mekuongorora kwekodhi.

Kwatiri, kurambidzwa kweKubatanidza kuchave kwekuti pombi yegungano ichadzosera kukanganisa kana pasina mavhoti akakwana.

Enda kune Zvirongwa β†’ Zvakawanda β†’ Unganidza Zvikumbiro β†’ Unganidza Macheki uye gonesa iyo sarudzo mitsara yeGungano inofanira kupedzisa zvinobudirira.

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

4. Kuisa pombi

Kana usati wagadzira pombi yeCI/CD yechishandiso chako
Gadzira faira mumudzi we repository .gitlab-ci.yml nezviri nyore zvirimo:

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"

Separate repository yeCI/CD kumisikidzwa
Ndingakurudzira kugadzira imwe nzvimbo yaunoda kugadzira myapp.gitlab-ci.yml faira kugadzirisa pombi. Nenzira iyi iwe unogona kudzora zvirinani kuwanikwa kwevatori vechikamu vanogona kushandura pombi yekuvaka uye kugamuchira chiratidzo chekuwana.

Nzvimbo yefaira repombi itsva ichada kutaurwa nekuenda kune myapp repository - Zvirongwa - CI/CD - Mitsetse yeGungano - Tsika CI yekumisikidza nzira - tsanangura faira idzva, semuenzaniso. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Zano: Shandisa linter kuita shanduko kumafaira eGitLab CI
Kunyangwe ukashanda wega, kushanda kuburikidza neMR kuchave rubatsiro rwakanaka, uchimhanyisa shanduko dzako dzese kumafaira epombi kuburikidza ne linter. Kana iwe ukakanganisa mu syntax yeYAML faira, haizotyora pombi yako yekugadzira, asi inongovhara Merge.

Muenzaniso wemidziyo ine linter iyo iwe yaunogona kuvaka mupombi yako:

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

Uye muenzaniso wedanho rekusimbisa:

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;

Izvo zvinosara kuwedzera mashoma ma paramita kune yako pombi kuti iite kuti ishande:

stages:
- test

variables:
NEED_VOTES: 1

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

Iyo NEED_VOTES musiyano inosarudza kuti vangani "zvigunwe kumusoro" MR vanofanira kuve nazvo kuitira kuti Merge iwanikwe. Kukosha kwakaenzana kune imwe kunoreva kuti iwe pachako unogona kubvumidza MR wako ne "kuifarira".

sanganisira zvinosanganisira danho rekuyedza, iro rinotarisa nhamba ye "kuda".

Iyo pombi yakapusa uchishandisa muenzaniso we 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

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

Ruzivo rwakawanda pamusoro pezvinoitika panguva yekusimbisa:

  • pane kurambidzwa kuti cheki ichaitwa chete pakugadzira MR mune tenzi kana kuburitsa / * matavi
  • tichishandisa GitLab API, tinowana nhamba ye "kuda" uye "kusafarira"
  • verenga musiyano pakati pemhinduro dzakanaka nedzakaipa
  • kana mutsauko uri mudiki pane kukosha kwatakaseta muNEED_VOTES, tobva tavhara kugona kubatana

5. Kurambidza kuzvipira kumapazi akachengetedzwa

Isu tinotsanangura mapazi atinofanira kuitisa ongororo yekodhi uye tinoratidza kuti anogona chete kushanda nawo kuburikidza naMR.

Kuti uite izvi, enda kuZvirongwa β†’ Repository β†’ Mapazi Akachengetedzwa:

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

6. Tarisa

Seta NEED_VOTES: 0

Isu tinoita MR uye tinoisa "kusada".

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

Mukugadzira matanda:

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

Zvino isa "like" uye tanga kutarisa zvakare:

Code wongororo muGitlab CE: kana pasina Merge chikumbiro chemvumo, asi ini ndinoda chaizvo

Source: www.habr.com

Voeg