Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

Chimodzi mwazinthu zofunika kwambiri, zomwe sizili mu mtundu waulere wa GitLab, ndikutha kuvota motsutsana ndi kuchotsedwa kwa malo ndikuwongolera pempho la Merge (MR), pogwiritsa ntchito kuwunikiranso kovomerezeka.

Tiyeni tichite zocheperako tokha - tidzaletsa Merge mpaka opanga angapo apatse MR chala chachikulu.

N’chifukwa chiyani zimenezi zili zofunika?

Bungwe lathu limatha kugula layisensi ya GitLab mosavuta. Koma, popeza chitukuko chikuchitika motsekedwa popanda intaneti, ndipo pali ndondomeko yokhazikika ya bajeti, kugula malayisensi odziyendetsa okha ndi ntchito yofunikira kumatha kupitilira kwa miyezi yambiri, koma ntchito iyenera kuchitika tsopano.

Chifukwa chake muyenera:

  • kapena kuletsa kwathunthu Phatikizani mu nthambi zotetezedwa kwa Madivelopa ena, koma Madivelopa amene ali ndi ufulu kuphatikiza kulandira mikangano pamene kuphatikiza MRs anthu ena monga bonasi;
  • либо давать возможность делать бесконтрольные слияния с вашей мастер-веткой без code review, даже если это Junior, устроившийся только вчера.

Chinthu choyamba chimene ndinachita chinali Google, ndikukhulupirira kuti wina anali atachita kale zofanana (popanda kusintha ndondomeko), koma zinapezeka kuti panalibe kukhazikitsidwa koteroko mumtundu wa anthu.

Общая схема работы

Mwachitsanzo, tiyeni tikonze zovomerezeka za Merge pa malo oyeserera myapp:

  1. Создадим токен для доступа к API GitLab (через него будем получать информацию о количестве голосов «за» и «против»)
  2. Tiyeni tiwonjezere chizindikiro pamitundu ya GitLab
  3. Tiyeni tiyimitse Merge pakachitika zolakwika pamapaipi (ngati palibe mavoti okwanira)
  4. Настроим проверку голосов как часть пайплайна CI/CD
  5. Timaletsa kudzipereka kunthambi zotetezedwa; zosintha zonse zimangochitika kudzera mwa MR
  6. Tiyeni tione zomwe zidachitika pomaliza

1. Pangani chizindikiro kuti mupeze API

Pitani ku Zikhazikiko za Ogwiritsa → Pezani Zizindikiro ndikulemba chizindikiro:

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

Akaunti kuti mulandire chizindikiro
Доступ к API позволяет делать практически все с вашими репозиториями, поэтому советую создать отдельную учетную запись Gitlab, дать ей минимальные права на ваши репозтории (например, Reporter) и получить токен для этой учетной записи.

2. Onjezani chizindikiro ku zosintha za Gitlab

Mwachitsanzo, mu sitepe yapitayi tinalandira chizindikiro Mtengo wa QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Tsegulani Zokonda → CI/CD → Zosintha → Onjezani zosinthika → GITLAB_TOKEN_FOR_CI

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

Chifukwa chake timapeza:

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

Izi zitha kuchitika pankhokwe imodzi kapena pagulu la nkhokwe.

3. Timaletsa kugwirizanitsa ngati chivomerezo cha ogwira nawo ntchito sichikulandiridwa pambuyo pa kubwereza kachidindo.

В нашем случае запретом на Merge будет являться то, что сборочный конвейер вернет ошибку при недостаточном количестве голосов.

Pitani ku Zikhazikiko → Zambiri → Gwirizanitsani Zofunsira → Phatikizani Macheke ndikuyatsa kuti mizere ya Msonkhanoyo iyenera kumaliza bwino.

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

4. Kukhazikitsa payipi

Ngati simunapange mapaipi a CI/CD pakugwiritsa ntchito kwanu
Создаем в корне репозитория файл .gitlab-ci.yml ndi zosavuta:

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"

Malo osiyana a CI/CD kasinthidwe
Ndikupangira kupanga malo osiyana momwe mungafunikire kupanga fayilo ya myapp.gitlab-ci.yml kuti mukonze mapaipi. Mwanjira iyi mutha kuwongolera bwino mwayi wa omwe akutenga nawo mbali omwe angasinthe payipi yomanga ndikulandila chizindikiro chofikira.

Malo a fayilo yatsopano yapaipi adzafunika kufotokozedwa popita kumalo osungirako myapp - Zokonda - CI/CD - Mizere ya Msonkhano - Njira yosinthira CI - tchulani fayilo yatsopano, mwachitsanzo. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Langizo: Gwiritsani ntchito linter kuti musinthe mafayilo a GitLab CI
Даже если вы работаете один, хорошим помощником выступит работа через MR, прогоняя все ваши изменения файлов пайплайна через линтер. Если вы ошибетесь в синтаксисе YAML-файла, это не даст вам сломать рабочий конвейер, а просто заблокирует Merge.

Chitsanzo cha zotengera zokhala ndi malita zomwe mungapange mupaipi yanu:

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

И пример стадии проверки:

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;

Осталось добавить в ваш пайплайн несколько параметров, чтобы все заработало:

stages:
- test

variables:
NEED_VOTES: 1

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

Kusintha kwa NEED_VOTES kumatsimikizira kuchuluka kwa "thumb up" MR ayenera kukhala ndi kuti Merge ikhalepo. Mtengo wofanana ndi umodzi umatanthauza kuti inu nokha mutha kuvomereza MR wanu mwa "kuwakonda".

include подключает стадию test, проверяющую количество «лайков».

Njira yosavuta kugwiritsa ntchito 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

Содержание 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/.*$/'

Подробнее о том, что происходит при проверке:

  • pali choletsa kuti chekecho chichitike popanga MR mu master kapena kumasula/* nthambi
  • pogwiritsa ntchito GitLab API, timapeza kuchuluka kwa "zokonda" ndi "zosakonda"
  • werengerani kusiyana pakati pa mayankho abwino ndi oyipa
  • ngati kusiyana kuli kochepa kuposa mtengo womwe takhazikitsa mu NEED_VOTES, ndiye kuti timaletsa kuphatikizika

5. Kuletsa kudzipereka ku nthambi zotetezedwa

Определяем ветки, для которых мы должны проводить code review и указываем, что работать с ними можно только через MR.

Kuti muchite izi, pitani ku Zikhazikiko → Repository → Nthambi Zotetezedwa:

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

6. Chongani

Khazikitsani NEED_VOTES: 0

Timapanga MR ndikuyika "kusakonda".

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

M'mabuku opangira:

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

Tsopano ikani "ngati" ndikuyamba kuyang'ananso:

Kuwunika kwa ma code mu Gitlab CE: ngati palibe kuvomereza pempho la Merge, koma ndikufuna kutero

Source: www.habr.com

Kuwonjezera ndemanga