ʻO kekahi o nā hiʻohiʻona pono loa ʻaʻole i loko o ka mana manuahi o GitLab ʻo ia ka hiki ke koho balota e kūʻē i ka zeroing ka waihona e hoʻomalu i ka noi Merge (MR) me ka hoʻohana ʻana i ka loiloi code mandatory.
E hana mākou i ka hana liʻiliʻi iā mākou iho - e hoʻopau mākou iā Merge a hiki i kekahi mau mea hoʻomohala hāʻawi i ka "kuʻi lima" iā MR.
No ke aha kēia?
Hiki i kā mākou hui ke kūʻai i ka laikini GitLab. Akā, no ka mea, ua hoʻokō ʻia ka hoʻomohala ʻana i loko o kahi puka paʻa ʻole me ka loaʻa ʻole o ka Pūnaewele, a aia kahi hoʻolālā kālā koʻikoʻi, ʻo ke kūʻai ʻana i nā laikini hoʻokele ponoʻī me nā hana pono e hiki ke lawe i nā mahina he nui, a pono ʻoe e hana i kēia manawa.
I ka hopena, pono ʻoe e:
- a i ʻole e pāpā loa i ka hui ʻana i nā lālā i mālama ʻia no kekahi mau mea hoʻomohala, a laila loaʻa i nā mea hoʻomohala i kuleana e hoʻohui i nā paio i ka hoʻohui ʻana i nā MR o nā poʻe ʻē aʻe ma ke ʻano he bonus;
- a i ʻole e ʻae iā ʻoe e hana i nā hui pū ʻole me kāu lālā kumu me ka nānā ʻole ʻana i ke code, ʻoiai ʻo ia he Junior i noho i nehinei.
ʻO ka mea mua aʻu i hana ai ʻo ia ka hele ʻana i google, me ka manaʻo ua hana kekahi i kahi mea like (me ka hoʻomaʻemaʻe ʻole ʻana i ke code), akā ua ʻike ʻia ʻaʻole i hoʻokō ʻia i ka mana kaiāulu.
Papahana nui o ka hana
E like me ka laʻana, e hoʻonohonoho kākou i nā ʻae noi e hoʻohui ʻia ma kahi waihona hoʻāʻo
- E hana mākou i hōʻailona no ke komo ʻana i ka GitLab API (ma ia mea e loaʻa iā mākou ka ʻike e pili ana i ka helu o nā balota no a kūʻē)
- Hoʻohui i kahi hōʻailona i nā hoʻololi GitLab
- Hoʻopau i ka hui ʻana inā loaʻa nā hewa i ka pipeline (inā ʻaʻole lawa nā koho "no")
- Hoʻonohonoho i ka hōʻoia koho ma ke ʻano he ʻāpana o ka paipu CI/CD
- E pāpā mākou i ka hana ʻana i nā lālā i mālama ʻia, hana mākou i nā loli āpau ma o MR wale nō
- E nānā kāua i ka hopena
1. E hana i hōʻailona no ke komo ʻana i ka API
E hele i nā mea hoʻohana → Access Token a kākau i ka hōʻailona:
Moʻokāki no ka loaʻa ʻana o ka hōʻailona
Hiki iā ʻoe ke hana i nā mea āpau me kāu mau waihona, no laila ke aʻo aku nei au iā ʻoe e hana i kahi moʻokāki Gitlab kaʻawale, hāʻawi iā ia i nā kuleana liʻiliʻi i kāu mau waihona (e like me ka Reporter) a loaʻa kahi hōʻailona no kēia moʻokāki.
2. E hoʻohui i ka hōʻailona i nā hoʻololi Gitlab
No ka laʻana, i ka pae mua, ua loaʻa iā mākou kahi hōʻailona QmN2Y0NOUFlfeXhvd21ZS01aQzgK
E wehe i nā ʻōkuhi → CI/CD → Nā mea hoʻololi → Hoʻohui i nā mea hoʻololi → GITLAB_TOKEN_FOR_CI
ʻO ka hopena, loaʻa iā mākou:
Hiki ke hana ʻia kēia ma ka waihona hoʻokahi a ma kahi pūʻulu o nā waihona.
3. Hoʻopaʻa mākou iā Merge inā ʻaʻole i loaʻa ka ʻae ʻana o nā hoa hana ma hope o ka loiloi code
I kā mākou hihia, ʻo ka pāpā ʻana iā Merge e hoʻihoʻi ka pipeline hui i kahi hewa inā ʻaʻole lawa nā balota.
E hele i ka Settings → General → Merge Requests → Merge Checks a hiki i ke koho E holo pono nā laina hui.
4. Hoʻonohonoho i ka pipeline
Inā ʻaʻole ʻoe i hana i kahi paipu CI/CD no kāu noi
E hana i kahi faila ma ke kumu o ka waihona .gitlab-ci.yml me ka maʻiʻo maʻalahi:
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"
Hoʻokaʻawale kahi waihona no ka hoʻonohonoho CI/CD
Manaʻo wau e hana i kahi waihona ʻokoʻa kahi e pono ai ʻoe e hana i kahi faila myapp.gitlab-ci.yml e hoʻonohonoho i ka pipeline. Ma kēia ala hiki iā ʻoe ke hoʻomalu maikaʻi i ke komo ʻana o nā mea kōkua e hiki ke hoʻololi i ka pipeline kūkulu a loaʻa i kahi hōʻailona komo.
Pono e kuhikuhi ʻia ka wahi o ka faila pipeline hou ma ka hele ʻana i ka waihona myapp - Nā ʻōkuhi - CI / CD - Nā laina hui - ʻO ke ala hoʻonohonoho CI maʻamau - kuhikuhi i kahi faila hou, no ka laʻana. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci
Manaʻo kōkua: E hoʻohana i kahi linter e hoʻololi i nā faila GitLab CI
ʻOiai inā ʻoe e hana hoʻokahi, ʻo ka hana ʻana ma o MR he mea kōkua maikaʻi ia, e holo ana i kāu mau hoʻololi āpau i nā faila pipeline ma o ka linter. Inā kuhi hewa ʻoe i ka syntax o ka faila YAML, ʻaʻole ia e ʻae iā ʻoe e wāwahi i ka pipeline hana, akā e ālai wale i ka Merge.
ʻO kahi laʻana o nā ipu me nā linters hiki iā ʻoe ke hoʻokomo i kāu pipeline:
A he laʻana o ka pae hōʻoia:
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;
Ke waiho nei i ka hoʻohui ʻana i kekahi mau ʻāpana i kāu pipeline e hana ia:
stages:
- test
variables:
NEED_VOTES: 1
include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"
Hoʻoholo ka mea hoʻololi NEED_VOTES i ka nui o nā "kumu lima" MR e loaʻa ai ka Merge. ʻO ka waiwai o kekahi, hiki iā ʻoe ke ʻae i kāu MR ma ka "makemake" iā ia.
komo pū me ka pae hoʻāʻo, e nānā i ka helu o nā "makemake".
ʻO ka pipeline maʻalahi e hoʻohana ana i myapp.gitlab-ci.yml ma ke ʻano he laʻana
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
Nā maʻiʻo o 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/.*$/'
E aʻo hou e pili ana i ka mea e hana ana i ka nānā ʻana:
- Ua hoʻonohonoho ʻia ka palena i ka wā e hana ai i kahi MR i ka haku a i ʻole e hoʻokuʻu i nā lālā /*
- me ka hoʻohana ʻana i ka GitLab API, e kiʻi i ka helu o nā "makemake" a "makemake ʻole"
- e helu i ka ʻokoʻa ma waena o nā pane maikaʻi a me ka maikaʻi ʻole
- inā ʻoi aku ka liʻiliʻi o ka ʻokoʻa ma mua o ka waiwai a mākou i hoʻonoho ai ma NEED_VOTES, a laila pale mākou i ka hiki ke hoʻohui
5. Hoʻopau i nā hana i nā lālā i mālama ʻia
Hoʻoholo mākou i nā lālā e hana ai mākou i ka loiloi code a hōʻike e hiki ke hana wale ʻia lākou ma o MR.
No ka hana ʻana i kēia, e hele i nā ʻōkuhi → Repository → Nā lālā palekana:
6. Nānā
E hoʻonoho i NEED_VOTES: 0
Hana mākou iā MR a kau i kahi "makemake".
I loko o nā moʻolelo kūkulu:
I kēia manawa e hoʻokomo i ka "like" a holo i ka nānā hou:
Source: www.habr.com