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
- Ngatigadzirei chiratidzo chekuwana iyo GitLab API (kuburikidza nayo isu tichawana ruzivo nezve nhamba yemavhoti "e" uye "anopesana").
- Ngatiwedzerei chiratidzo kune GitLab zvinosiyana
- Ngatiregei Kubatanidza kana paine zvikanganiso mupombi (kana pasina mavhoti akakwana)
- Ngatimisei yekuongorora mavhoti sechikamu cheCI/CD pombi
- Isu tinorambidza kuita zvisungo kumapazi akachengetedzwa; shanduko dzese dzinoitwa chete kuburikidza naMR
- Ngationgororei zvakaitika pakupedzisira
1. Gadzira chiratidzo kuti uwane iyo API
Enda kune Zvirongwa zveMushandisi β Svika Tokens uye nyora pasi chiratidzo:
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
Somugumisiro tinowana:
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.
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:
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:
6. Tarisa
Seta NEED_VOTES: 0
Isu tinoita MR uye tinoisa "kusada".
Mukugadzira matanda:
Zvino isa "like" uye tanga kutarisa zvakare:
Source: www.habr.com