ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

ʻ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 myapp:

  1. 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ūʻē)
  2. Hoʻohui i kahi hōʻailona i nā hoʻololi GitLab
  3. Hoʻopau i ka hui ʻana inā loaʻa nā hewa i ka pipeline (inā ʻaʻole lawa nā koho "no")
  4. Hoʻonohonoho i ka hōʻoia koho ma ke ʻano he ʻāpana o ka paipu CI/CD
  5. 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ō
  6. 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:

ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

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 loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

ʻO ka hopena, loaʻa iā mākou:

ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

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.

ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

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:

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

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:

ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

6. Nānā

E hoʻonoho i NEED_VOTES: 0

Hana mākou iā MR a kau i kahi "makemake".

ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

I loko o nā moʻolelo kūkulu:

ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

I kēia manawa e hoʻokomo i ka "like" a holo i ka nānā hou:

ʻO ka loiloi code ma Gitlab CE: inā ʻaʻohe ʻae noi ʻia ʻo Merge, akā makemake wau

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka