በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

በነጻው የ GitLab ስሪት ውስጥ ከሌሉ በጣም ከሚያስፈልጉት ባህሪያት አንዱ የግዴታ ኮድ ግምገማን በመጠቀም የውህደት ጥያቄን (MR) ለመቆጣጠር ማከማቻውን ዜሮ ማድረግ መቻል ነው።

እኛ እራሳችን ዝቅተኛውን ተግባር እንሰራለን - ብዙ ገንቢዎች ለMR “አውራ ጣት” እስኪሰጡ ድረስ ውህደትን እናሰናክላለን።

ይህ በፍፁም ለምንድነው?

ድርጅታችን የጊትላብ ፍቃድ መግዛት ይችላል። ነገር ግን ልማቱ ወደ በይነመረብ ሳይገባ በተዘጋ ዑደት ውስጥ ስለሚካሄድ እና ጥብቅ የበጀት እቅድ ስላለ, አስፈላጊ በሆኑ ተግባራት በራስ የሚተዳደር ፍቃዶችን መግዛት ብዙ ወራት ሊወስድ ይችላል, እና አሁን መስራት ያስፈልግዎታል.

በውጤቱም, የሚከተሉትን ማድረግ አለብዎት:

  • ወይም ሙሉ ለሙሉ ለአንዳንድ ገንቢዎች መቀላቀልን ይከለክላል፣ ነገር ግን የመዋሃድ መብት ያላቸው ገንቢዎች የሌሎች ሰዎችን ኤምአርኤስ እንደ ጉርሻ ሲያዋህዱ ግጭቶችን ይቀበላሉ።
  • ወይም ምንም እንኳን ትላንትና የሰፈረው ጁኒየር ቢሆንም ከዋናው ቅርንጫፍዎ ጋር ቁጥጥር ያልተደረገበት ውህደት እንዲያደርጉ ይፍቀዱ።

የመጀመሪያው ነገር አንድ ሰው ቀደም ሲል ተመሳሳይ የሆነ ነገር እንዳደረገ (ኮዱን ሳያሻሽል) በማመን ወደ google ሂድ ነበር, ነገር ግን እስካሁን ድረስ በማህበረሰብ ስሪት ውስጥ እንደዚህ አይነት ትግበራ የለም.

አጠቃላይ የሥራ መርሃ ግብር

እንደ ምሳሌ፣ በአንድ የሙከራ ማከማቻ ላይ የውህደት ጥያቄ ማጽደቆችን እናዋቅር myapp:

  1. የጊትላብ ኤፒአይን ለማግኘት ቶከን እንፍጠር (በእሱም ስለ ድምጽ ብዛት እና ተቃውሞ መረጃ እንቀበላለን)
  2. ማስመሰያ ወደ GitLab ተለዋዋጮች ያክሉ
  3. በቧንቧው ውስጥ ስህተቶች ካሉ ውህደትን ያሰናክሉ (በቂ "ለ" ድምጾች ከሌሉ)
  4. የድምጽ ማረጋገጫን እንደ የሲአይ/ሲዲ ቧንቧ መስመር አካል አድርገው ያዋቅሩ
  5. ጥበቃ በሚደረግላቸው ቅርንጫፎች ላይ ቃል መግባትን እንከለክላለን፣ ሁሉንም ለውጦች የምናደርገው በMR በኩል ብቻ ነው።
  6. በመጨረሻ የሆነውን ነገር እንፈትሽ

1. ኤፒአይን ለመድረስ ማስመሰያ ይፍጠሩ

ወደ የተጠቃሚ ቅንብሮች → የመዳረሻ ቶከኖች ይሂዱ እና ማስመሰያውን ይፃፉ፡-

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

ማስመሰያ ለመቀበል መለያ
የኤፒአይ መዳረሻ ማንኛውንም ነገር በማከማቻዎችዎ እንዲሰሩ ይፈቅድልዎታል፣ ስለዚህ የተለየ የጂትላብ መለያ እንዲፈጥሩ እመክርዎታለሁ፣ ለማከማቻዎችዎ አነስተኛ መብቶችን ይስጡት (ለምሳሌ ፣ ሪፖርተር) እና ለዚህ መለያ ማስመሰያ ያግኙ።

2. ማስመሰያውን ወደ Gitlab ተለዋዋጮች ያክሉ

ለምሳሌ, በቀድሞው ደረጃ, ቶከን ተቀብለናል QmN2Y0NOUFlfeXhvd21ZS01aQzgK

ቅንብሮችን ይክፈቱ → CI/CD → ተለዋዋጮች → ተለዋዋጭ ያክሉ → GITLAB_TOKEN_FOR_CI

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

በውጤቱም, እኛ እናገኛለን:

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

ይህ በሁለቱም በአንድ ማከማቻ እና በቡድን ማከማቻዎች ላይ ሊከናወን ይችላል።

3. ከኮድ ግምገማ በኋላ የባልደረባዎች ፈቃድ ካልተገኘ ውህደት ላይ እገዳ አደረግን

በእኛ ሁኔታ, በውህደት ላይ ያለው እገዳ በቂ ድምጽ ከሌለ የመገጣጠሚያ ቧንቧው ስህተትን ይመልሳል.

ወደ ቅንብሮች → አጠቃላይ → የውህደት ጥያቄዎች → አዋህድ ቼኮች ይሂዱ እና አማራጩን ያንቁ የመሰብሰቢያ መስመሮች በተሳካ ሁኔታ መሮጥ አለባቸው።

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

4. የቧንቧ መስመር ያዘጋጁ

ለማመልከቻዎ የ CI/CD ቧንቧ መስመር እስካሁን ካላደረጉት።
በማጠራቀሚያው ስር ፋይል ይፍጠሩ .gitlab-ci.yml ከቀላል ይዘት ጋር:

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"

ለሲአይ/ሲዲ ውቅር የተለየ ማከማቻ
የቧንቧ መስመርን ለማዘጋጀት myapp.gitlab-ci.yml ፋይል መፍጠር የሚያስፈልግህ የተለየ ማከማቻ እንድትሰራ እመክራለሁ። በዚህ መንገድ የግንባታ ቧንቧ መስመርን የሚቀይሩ እና የመድረሻ ቶከንን የሚያገኙ አስተዋፅዖ አበርካቾችን ተደራሽነት በተሻለ ሁኔታ መቆጣጠር ይችላሉ።

ወደ myapp ማከማቻ - መቼቶች - CI / ሲዲ - የመሰብሰቢያ መስመሮች - ብጁ CI ውቅር ዱካ - አዲሱን የቧንቧ መስመር ፋይል ቦታ - አዲስ ፋይል ይጥቀሱ ፣ ለምሳሌ myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/ci

ጠቃሚ ምክር፡ በ GitLab CI ፋይሎች ላይ ለውጦችን ለማድረግ ሊንተርን ይጠቀሙ
ምንም እንኳን ብቻዎን ቢሰሩም, በ MR በኩል መስራት ጥሩ ረዳት ይሆናል, ሁሉንም ለውጦችዎን በቧንቧ ፋይሎች ላይ በሊንተር ውስጥ ማካሄድ. በ YAML ፋይል አገባብ ላይ ስህተት ከሠሩ፣ ይህ የሚሠራውን የቧንቧ መስመር ለመስበር አይፈቅድልዎትም ነገር ግን በቀላሉ ውህደትን ይከለክላል።

በቧንቧ መስመርዎ ውስጥ ሊከተቷቸው የሚችሏቸው የእቃ ማስቀመጫዎች ምሳሌ፡-

hub.docker.com/r/gaberoux/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"

የNEED_VOTES ተለዋዋጭ ኤምአር ውህደት እንዲኖር ምን ያህል "አውራ ጣት" ሊኖረው እንደሚገባ ይወስናል። የአንዱ ዋጋ ማለት እርስዎ እራስዎ "ላይክ" በማድረግ የእርስዎን MR ማጽደቅ ይችላሉ ማለት ነው።

የ "መውደዶችን" ቁጥር የሚያረጋግጥ የሙከራ ደረጃን ያካትታል።

እንደ ምሳሌ 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-approv.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/.*$/'

ሲፈትሹ ስለሚሆነው ነገር የበለጠ ይረዱ፡

  • እገዳው የተቀመጠው ቼኩ በጌታው ውስጥ ኤምአር ሲፈጥሩ ወይም ሲለቁ /* ቅርንጫፎች ብቻ ይሆናል።
  • GitLab ኤፒአይን በመጠቀም የ"መውደዶች" እና "የማይወደዱ" ብዛት ያግኙ
  • በአዎንታዊ እና አሉታዊ ምላሾች መካከል ያለውን ልዩነት አስላ
  • ልዩነቱ በNEED_VOTES ውስጥ ካስቀመጥነው ዋጋ ያነሰ ከሆነ የመዋሃድ ችሎታን እንዘጋለን።

5. የተጠበቁ ቅርንጫፎችን ማሰናከል

ኮድ ክለሳ ማድረግ ያለብንን ቅርንጫፎች እንወስናለን እና በ MR በኩል ብቻ ሊሠሩ እንደሚችሉ እንጠቁማለን።

ይህንን ለማድረግ ወደ ቅንብሮች → ማከማቻ → የተጠበቁ ቅርንጫፎች ይሂዱ።

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

6. በመፈተሽ ላይ

NEED_VOTES አዘጋጅ፡ 0

እኛ MR እናደርጋለን እና "አለመውደድ" እናደርጋለን.

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

በግንባታ ምዝግብ ማስታወሻዎች ውስጥ;

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

አሁን "like" ያድርጉ እና እንደገና ያረጋግጡ፡-

በ Gitlab CE ውስጥ የኮድ ግምገማ፡ ምንም የማዋሃድ ጥያቄ ከሌለ፣ ግን በእውነት እፈልጋለሁ

ምንጭ: hab.com

አስተያየት ያክሉ