Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

Mojawapo ya vitendaji muhimu zaidi, ambavyo haviko katika toleo lisilolipishwa la GitLab, ni uwezo wa kupiga kura dhidi ya kubatilisha hazina na kudhibiti ombi la Kuunganisha (MR), kwa kutumia ukaguzi wa lazima wa msimbo.

Wacha tufanye utendakazi wa chini wenyewe - tutakataza Unganisha hadi watengenezaji kadhaa wampe MR dole gumba.

Kwa nini hii ni muhimu hata?

Shirika letu linaweza kumudu kwa urahisi kununua leseni ya GitLab. Lakini, kwa kuwa maendeleo yanafanywa kwa kitanzi kilichofungwa bila upatikanaji wa mtandao, na kuna mipango madhubuti ya bajeti, ununuzi wa leseni za kujitegemea na utendaji muhimu unaweza kuvuta kwa miezi mingi, lakini kazi inahitaji kufanywa sasa.

Kama matokeo, unapaswa:

  • au kukataza kabisa Kuunganisha katika matawi yaliyolindwa kwa baadhi ya wasanidi programu, lakini wasanidi programu ambao wana haki ya Kuunganisha hupokea mizozo wakati wa kuunganisha MR za watu wengine kama bonasi;
  • au toa fursa ya kuunganisha bila kudhibitiwa na tawi lako kuu bila ukaguzi wa msimbo, hata ikiwa ni Junior, ambaye aliajiriwa jana.

Jambo la kwanza nililofanya ni Google, nikiamini kwamba mtu alikuwa tayari amefanya kitu sawa (bila kurekebisha kanuni), lakini ikawa kwamba hakukuwa na utekelezaji kama huo katika toleo la jumuiya bado.

Mpango wa jumla wa kazi

Kama mfano, hebu tusanidi uidhinishaji wa ombi la Unganisha kwenye hazina ya majaribio myapp:

  1. Wacha tuunde tokeni ya ufikiaji wa API ya GitLab (kupitia hiyo tutapokea habari kuhusu idadi ya kura "za" na "dhidi").
  2. Wacha tuongeze ishara kwenye anuwai za GitLab
  3. Wacha tuzime Kuunganisha ikiwa kuna makosa kwenye bomba (ikiwa hakuna kura za kutosha)
  4. Hebu tuweke uthibitishaji wa kura kama sehemu ya bomba la CI/CD
  5. Tunakataza kufanya ahadi kwa matawi yaliyolindwa; mabadiliko yote yanafanywa kupitia MR pekee
  6. Wacha tuangalie kilichotokea mwishoni

1. Unda ishara ili kufikia API

Nenda kwa Mipangilio ya Mtumiaji → Ishara za Ufikiaji na uandike ishara:

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

Akaunti ya kupokea tokeni
Ufikiaji wa API hukuruhusu kufanya karibu kila kitu na hazina zako, kwa hivyo ninapendekeza kuunda akaunti tofauti ya Gitlab, kuipa haki ndogo kwa hazina zako (km Ripota) na kupata tokeni ya akaunti hiyo.

2. Ongeza ishara kwa vigeuzo vya Gitlab

Kwa mfano, katika hatua ya awali tulipokea ishara QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Fungua Mipangilio → CI/CD → Vigezo → Ongeza kigeu → GITLAB_TOKEN_FOR_CI

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

Kama matokeo, tunapata:

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

Hii inaweza kufanywa ama kwenye hazina moja au kwenye kikundi cha hazina.

3. Tunaweka marufuku ya Kuunganisha ikiwa kibali cha wenzetu hakipokelewi baada ya ukaguzi wa msimbo.

Kwa upande wetu, katazo la Kuunganisha litakuwa kwamba bomba la kusanyiko litarudisha hitilafu ikiwa hakuna kura za kutosha.

Nenda kwa Mipangilio → Jumla → Unganisha Maombi → Unganisha Hundi na uwashe chaguo Mistari ya Mkutano lazima ikamilike kwa mafanikio.

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

4. Kuweka bomba

Ikiwa bado haujaunda bomba la CI/CD kwa programu yako
Unda faili kwenye mzizi wa hazina .gitlab-ci.yml na yaliyomo rahisi zaidi:

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"

Hifadhi tofauti kwa usanidi wa CI/CD
Ningependekeza kutengeneza hazina tofauti ambayo unahitaji kuunda faili ya myapp.gitlab-ci.yml ili kusanidi bomba. Kwa njia hii unaweza kudhibiti vyema ufikiaji wa washiriki ambao wanaweza kubadilisha bomba la ujenzi na kupokea tokeni ya ufikiaji.

Mahali pa faili mpya ya bomba itahitaji kubainishwa kwa kwenda kwenye hazina ya myapp - Mipangilio - CI/CD - Mistari ya Kusanyiko - Njia ya usanidi ya CI Maalum - bainisha faili mpya, k.m. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Kidokezo: Tumia linter kufanya mabadiliko kwenye faili za GitLab CI
Hata ikiwa unafanya kazi peke yako, kufanya kazi kupitia MR itakuwa msaada mzuri, kuendesha mabadiliko yako yote kwa faili za bomba kupitia linter. Ukikosea katika sintaksia ya faili ya YAML, haitavunja bomba lako la utayarishaji, lakini itazuia tu Kuunganisha.

Mfano wa kontena zilizo na linter ambazo unaweza kujenga kwenye bomba lako:

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

Na mfano wa hatua ya uthibitishaji:

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;

Inabakia kuongeza vigezo vichache kwenye bomba lako ili kuifanya ifanye kazi:

stages:
- test

vigezo:
INAHITAJI_KURA: 1

pamoja na:
- kijijini: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

Tofauti ya NEED_VOTES huamua ni "dole gumba" ngapi ambazo MR lazima awe nazo ili Kuunganisha kupatikane. Thamani sawa na moja inamaanisha kuwa wewe mwenyewe unaweza kuidhinisha MR wako kwa "kuipenda".

inajumuisha ni pamoja na hatua ya majaribio, ambayo hukagua idadi ya "zinazopendwa".

Bomba rahisi zaidi kwa kutumia mfano wa myapp.gitlab-ci.yml
stages:
- build
- test

vigezo:
INAHITAJI_KURA: 0

pamoja na:
- kijijini: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

run-myapp:
hatua: kujenga
picha: openjdk
hati:
- mwangwi CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
- java HelloWorld.java

Yaliyomo 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/.*$/'

Maelezo zaidi kuhusu kile kinachotokea wakati wa uthibitishaji:

  • kuna kizuizi ambacho hundi itafanywa tu wakati wa kuunda MR katika matawi makuu au kutolewa/*
  • kwa kutumia API ya GitLab, tunapata idadi ya "zinazopendwa" na "zisizopenda"
  • kuhesabu tofauti kati ya majibu chanya na hasi
  • ikiwa tofauti ni chini ya thamani tuliyoweka katika NEED_VOTES, basi tunazuia uwezo wa kuunganisha

5. Kataza ahadi kwa matawi yaliyolindwa

Tunafafanua matawi ambayo tunapaswa kufanya ukaguzi wa kanuni na kuonyesha kwamba yanaweza tu kufanyiwa kazi kupitia MR.

Ili kufanya hivyo, nenda kwa Mipangilio → Hifadhi → Matawi Yanayolindwa:

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

6. Angalia

Weka NEED_VOTES: 0

Tunafanya MR na kuweka "kutopenda".

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

Katika magogo ya ujenzi:

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

Sasa weka "like" na uanze kuangalia tena:

Uhakiki wa nambari katika Gitlab CE: ikiwa hakuna idhini ya ombi la Unganisha, lakini ninataka sana

Chanzo: mapenzi.com

Nunua upangishaji wa kuaminika wa tovuti zilizo na ulinzi wa DDoS, seva za VPS VDS 🔥 Nunua upangishaji wa tovuti unaoaminika kwa ulinzi wa DDoS, seva za VPS VDS | ProHoster