E 'ngoe ea mesebetsi e hlokahalang haholo, e seng ka har'a mofuta oa mahala oa GitLab, ke bokhoni ba ho vouta khahlano le ho felisoa ha polokelo le taolo ea kopo ea Kopanya (MR), o sebelisa tlhahlobo ea khoutu e tlamang.
Ha re etseng tšebetso e fokolang ka borona - re tla thibela Merge ho fihlela bahlahisi ba 'maloa ba fa MR menoana ea matsoho.
Ke hobane'ng ha see se boetse se hlokahala?
Mokhatlo oa rona o ka khona ho reka laesense ea GitLab habonolo. Empa, kaha nts'etsopele e etsoa ka mokhoa o koetsoeng ntle le ho kena Inthaneteng, 'me ho na le moralo o tiileng oa tekanyetso, ho reka li-license tse ikemetseng tse nang le ts'ebetso e hlokahalang li ka hula ka likhoeli tse ngata, empa mosebetsi o lokela ho etsoa hona joale.
Ka lebaka leo, o tlameha ho:
- kapa ho thibela ka ho feletseng Kopanya makala a sirelelitsoeng bakeng sa bahlahisi ba bang, empa joale baetsi ba nang le tokelo ea ho Kopanya ba fumana likhohlano ha ba kopanya MRs ea batho ba bang e le bonase;
- kapa u fane ka monyetla oa ho etsa likamano tse sa laoleheng le lekala la hau la master ntle le tlhahlobo ea khoutu, leha e le Junior, ea hiriloeng maobane maobane.
Ntho ea pele eo ke e entseng e ne e le Google, ke lumela hore motho e mong o se a ntse a entse ntho e tšoanang (ntle le ho fetola khoutu), empa ho ile ha fumaneha hore ho ne ho se na ts'ebetsong e joalo molemong oa sechaba.
Sekema se akaretsang sa mosebetsi
Mohlala, ha re lokiseng litumello tsa kopo ea Merge sebakeng sa polokelo ea liteko
- Ha re theheng lets'oao la ho fihlella GitLab API (ka eona re tla fumana leseli mabapi le palo ea likhetho "bakeng sa" le "khahlanong le").
- Ha re kenyelle letšoao ho mefuta e fapaneng ea GitLab
- Ha re tima Merge haeba ho na le liphoso tse hlahang lipeiping (haeba ho se na likhetho tse lekaneng)
- Ha re theheng netefatso ea likhetho joalo ka karolo ea lipeipi tsa CI/CD
- Re thibela ho itlama ho makala a sirelelitsoeng; liphetoho tsohle li etsoa feela ka Monghali
- A re hlahlobeng se ileng sa etsahala qetellong
1. Etsa letšoao ho fihlella API
Eya ho Litlhophiso tsa Basebelisi → Fumana Tokens ebe u ngola lets'oao:
Akhaonto ea ho amohela letšoao
Phihlello ea API e u lumella ho etsa eng kapa eng ka polokelo ea hau, ka hona, ke khothaletsa ho theha ak'haonte e fapaneng ea Gitlab, ho e fa litokelo tse nyane ho polokelo ea hau (mohlala, Reporter) le ho fumana letšoao bakeng sa ak'haonte eo.
2. Kenya letšoao ho mefuta-futa ea Gitlab
Ka mohlala, mohatong o fetileng re fumane letšoao QmN2Y0NOUFlfeXhvd21ZS01aQzgK
Bula Litlhophiso → CI/CD → Liphetoho → Eketsa phapang → GITLAB_TOKEN_FOR_CI
Ka lebaka leo, re fumana:
Sena se ka etsoa sebakeng sa polokelo e le 'ngoe kapa sehlopheng sa polokelo.
3. Re beha thibelo ho Kopanya haeba tumello ea basebetsi-'moho e sa amoheloe ka mor'a tlhahlobo ea khoutu.
Tabeng ea rona, thibelo ea Merge e tla ba hore pipeline ea kopano e tla khutlisa phoso haeba ho se na likhetho tse lekaneng.
Eya ho Litlhophiso → Kakaretso → Kopanya Likopo → Kopanya Licheke 'me u lumelle khetho Mehala ea Kopano e tlameha ho phethela ka katleho.
4. Ho theha pipeline
Haeba ha o so thehe pipeline ea CI/CD bakeng sa kopo ea hau
Theha faele motso oa polokelo .gitlab-ci.yml ka litaba tse bonolo:
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"
Sebaka se arohaneng bakeng sa tlhophiso ea CI/CD
Ke khothaletsa ho etsa polokelo e arohaneng eo ho eona o hlokang ho theha faele ea myapp.gitlab-ci.yml ho lokisa lipeipi. Ka tsela ena o ka laola hamolemo phihlello ea barupeluoa ba ka fetolang phaephe ea kaho mme ba amohela tokene ea phihlello.
Sebaka sa faele e ncha ea lipeipi se tla hloka ho hlalosoa ka ho ea polokelong ea myapp - Litlhophiso - CI/CD - Mehala ea Kopano - Tsela ea Custom CI - hlalosa faele e ncha, mohlala. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci
Keletso: Sebelisa linter ho etsa liphetoho lifaeleng tsa GitLab CI
Leha o sebetsa o le mong, ho sebetsa ka MR ho tla ba thuso e ntle, ho tsamaisa liphetoho tsohle tsa hau ho lifaele tsa liphaephe ka lehare. Haeba u etsa phoso syntax ea faele ea YAML, e ke ke ea senya phaephe ea hau ea tlhahiso, empa e tla thibela Merge feela.
Mohlala oa lijana tse nang le lithara tseo u ka li hahang liphaepheng tsa hau:
'Me mohlala oa mohato oa ho netefatsa:
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;
E sala e le ho eketsa liparamente tse 'maloa ho phaephe ea hau ho e etsa hore e sebetse:
stages:
- test
variables:
NEED_VOTES: 1
include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"
Phapang ea NEED_VOTES e etsa qeto ea hore na MR o tlameha ho ba le "li-thumb up" tse kae hore Merge e fumanehe. Boleng bo lekanang le bo le bong bo bolela hore uena ka bouena u ka amohela MR oa hau ka ho "rata".
kenyeletsa ho kenyeletsa sethaleng sa teko, se hlahlobang palo ea "likes".
Tsela e bonolo ka ho fetisisa e sebelisang mohlala oa 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
Likahare 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/.*$/'
Lintlha tse ling mabapi le se etsahalang nakong ea netefatso:
- ho na le thibelo ea hore cheke e tla etsoa feela ha ho theoa MR ho master kapa ho lokolla/* makala
- re sebelisa GitLab API, re fumana palo ea "lintho tseo re li ratang" le "tse sa li rateng"
- bala phapang pakeng tsa likarabo tse ntle le tse mpe
- haeba phapang e le tlase ho boleng boo re bo behileng ho NEED_VOTES, re thibela bokhoni ba ho kopanya
5. Thibela boitlamo ho makala a sirelelitsoeng
Re hlalosa makala ao re tlamehang ho etsa li- code reviews ‘me re bonts’e hore a ka sebetsoa feela ka Monghali.
Ho etsa sena, ea ho Litlhophiso → Sebaka sa polokelo → Makala a Sirelelitsoeng:
6. Hlahloba
Beha NEED_VOTES: 0
Re etsa MR mme re beha "ho se rate".
Ka har'a li-log logs:
Joale beha "like" 'me u qale ho hlahloba hape:
Source: www.habr.com