Gitlab CE میں کوڈ کا جائزہ: اگر انضمام کی درخواست کی منظوری نہیں ہے، لیکن میں واقعی میں چاہتا ہوں۔

Gitlab CE میں کوڈ کا جائزہ: اگر انضمام کی درخواست کی منظوری نہیں ہے، لیکن میں واقعی میں چاہتا ہوں۔

سب سے زیادہ ضروری افعال میں سے ایک، جو GitLab کے مفت ورژن میں نہیں ہے، لازمی کوڈ کے جائزے کا استعمال کرتے ہوئے، ریپوزٹری کی منسوخی اور کنٹرول ضم کرنے کی درخواست (MR) کے خلاف ووٹ دینے کی صلاحیت ہے۔

آئیے کم از کم فعالیت خود کریں - ہم اس وقت تک ضم کرنے سے منع کریں گے جب تک کہ متعدد ڈویلپرز MR کو انگوٹھا نہ دیں۔

یہ بھی کیوں ضروری ہے؟

ہماری تنظیم آسانی سے GitLab لائسنس خرید سکتی ہے۔ لیکن، چونکہ ترقی انٹرنیٹ تک رسائی کے بغیر بند لوپ میں کی جاتی ہے، اور بجٹ کی سخت منصوبہ بندی ہوتی ہے، اس لیے ضروری فعالیت کے ساتھ خود سے منظم لائسنس کی خریداری کئی مہینوں تک چل سکتی ہے، لیکن ابھی کام کرنے کی ضرورت ہے۔

نتیجے کے طور پر آپ کو:

  • یا کچھ ڈویلپرز کے لیے محفوظ برانچوں میں ضم کرنے پر مکمل پابندی لگاتے ہیں، لیکن پھر جن ڈویلپرز کو ضم کرنے کا حق ہے وہ دوسرے لوگوں کے MRs کو بونس کے طور پر ضم کرتے وقت تنازعات کا سامنا کرتے ہیں۔
  • یا کوڈ کا جائزہ لیے بغیر اپنی ماسٹر برانچ کے ساتھ بے قابو انضمام کرنے کا موقع دیں، چاہے وہ جونیئر ہی کیوں نہ ہو، جسے کل ہی بھرتی کیا گیا تھا۔

پہلا کام جو میں نے کیا وہ گوگل تھا، یہ مانتے ہوئے کہ کسی نے یقینی طور پر پہلے ہی کچھ ایسا ہی کیا ہے (کوڈ میں ترمیم کیے بغیر)، لیکن معلوم ہوا کہ کمیونٹی ورژن میں ابھی تک ایسا کوئی عمل درآمد نہیں ہوا ہے۔

کام کی عمومی اسکیم

مثال کے طور پر، آئیے ٹیسٹ ریپوزٹری پر مرج کی درخواست کی منظوری کو ترتیب دیں۔ myapp:

  1. آئیے GitLab API تک رسائی کے لیے ایک ٹوکن بنائیں (اس کے ذریعے ہم "کے لیے" اور "خلاف" ووٹوں کی تعداد کے بارے میں معلومات حاصل کریں گے)
  2. آئیے ٹوکن کو GitLab متغیرات میں شامل کریں۔
  3. آئیے پائپ لائن میں غلطیوں کی صورت میں مرج کو غیر فعال کر دیں (اگر کافی ووٹ نہیں ہیں)
  4. آئیے CI/CD پائپ لائن کے حصے کے طور پر ووٹ کی تصدیق کو ترتیب دیں۔
  5. ہم محفوظ برانچوں سے کمٹ کرنے سے منع کرتے ہیں؛ تمام تبدیلیاں صرف MR کے ذریعے کی جاتی ہیں۔
  6. آئیے چیک کرتے ہیں کہ آخر کیا ہوا۔

1. API تک رسائی کے لیے ایک ٹوکن بنائیں

صارف کی ترتیبات → رسائی ٹوکن پر جائیں اور ٹوکن لکھیں:

Gitlab CE میں کوڈ کا جائزہ: اگر انضمام کی درخواست کی منظوری نہیں ہے، لیکن میں واقعی میں چاہتا ہوں۔

ٹوکن وصول کرنے کے لیے اکاؤنٹ
API تک رسائی آپ کو اپنے ذخیروں کے ساتھ تقریباً کچھ بھی کرنے کی اجازت دیتی ہے، اس لیے میں ایک علیحدہ Gitlab اکاؤنٹ بنانے کی تجویز کرتا ہوں، اسے آپ کے ذخیروں (مثلاً رپورٹر) کو کم سے کم حقوق دینے اور اس اکاؤنٹ کے لیے ٹوکن حاصل کرنے کی تجویز کرتا ہوں۔

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"

CI/CD کنفیگریشن کے لیے الگ ذخیرہ
میں ایک علیحدہ ذخیرہ بنانے کی تجویز کروں گا جس میں پائپ لائن کو ترتیب دینے کے لیے آپ کو myapp.gitlab-ci.yml فائل بنانے کی ضرورت ہے۔ اس طرح آپ ان شرکاء کی رسائی کو بہتر طریقے سے کنٹرول کر سکتے ہیں جو تعمیراتی پائپ لائن کو تبدیل کر سکتے ہیں اور ایک رسائی ٹوکن وصول کر سکتے ہیں۔

نئی پائپ لائن فائل کا مقام myapp ریپوزٹری - سیٹنگز - CI/CD - اسمبلی لائنز - کسٹم CI کنفیگریشن پاتھ - نئی فائل کی وضاحت کرنے کی ضرورت ہوگی، جیسے myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

ٹپ: GitLab CI فائلوں میں تبدیلیاں کرنے کے لیے لنٹر استعمال کریں۔
یہاں تک کہ اگر آپ اکیلے کام کرتے ہیں، MR کے ذریعے کام کرنا ایک اچھی مدد ہو گا، پائپ لائن فائلوں میں آپ کی تمام تبدیلیوں کو لنٹر کے ذریعے چلانا۔ اگر آپ YAML فائل کے نحو میں غلطی کرتے ہیں، تو یہ آپ کی پروڈکشن پائپ لائن کو نہیں توڑے گا، لیکن صرف مرج کو روک دے گا۔

لنٹر والے کنٹینرز کی ایک مثال جو آپ اپنی پائپ لائن میں بنا سکتے ہیں:

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"

NEED_VOTES متغیر اس بات کا تعین کرتا ہے کہ مرج دستیاب ہونے کے لیے MR کے پاس کتنے "تھمبس اپ" ہونے چاہئیں۔ ایک کے برابر قدر کا مطلب یہ ہے کہ آپ خود اپنے 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-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/.*$/'

تصدیق کے دوران کیا ہوتا ہے اس کے بارے میں مزید معلومات:

  • ایک پابندی ہے کہ چیک صرف اس وقت کیا جائے گا جب ماسٹر یا ریلیز/* برانچوں میں ایم آر بنائیں
  • GitLab API کا استعمال کرتے ہوئے، ہمیں "پسند" اور "ناپسندیدہ" کی تعداد ملتی ہے
  • مثبت اور منفی ردعمل کے درمیان فرق کا حساب لگائیں۔
  • اگر فرق اس قدر سے کم ہے جو ہم نے NEED_VOTES میں سیٹ کیا ہے، تو ہم انضمام کی صلاحیت کو روک دیتے ہیں

5. محفوظ شاخوں کے لیے پابندیاں

ہم ان شاخوں کی وضاحت کرتے ہیں جن کے لیے ہمیں ضابطوں کا جائزہ لینا چاہیے اور یہ بتانا چاہیے کہ ان کے ساتھ صرف MR کے ذریعے کام کیا جا سکتا ہے۔

ایسا کرنے کے لیے، سیٹنگز → ریپوزٹری → پروٹیکٹڈ برانچز پر جائیں:

Gitlab CE میں کوڈ کا جائزہ: اگر انضمام کی درخواست کی منظوری نہیں ہے، لیکن میں واقعی میں چاہتا ہوں۔

6. چیک کریں۔

NEED_VOTES سیٹ کریں: 0

ہم ایک MR بناتے ہیں اور "ناپسندیدگی" ڈالتے ہیں۔

Gitlab CE میں کوڈ کا جائزہ: اگر انضمام کی درخواست کی منظوری نہیں ہے، لیکن میں واقعی میں چاہتا ہوں۔

تعمیر نوشتہ جات میں:

Gitlab CE میں کوڈ کا جائزہ: اگر انضمام کی درخواست کی منظوری نہیں ہے، لیکن میں واقعی میں چاہتا ہوں۔

اب "like" ڈالیں اور دوبارہ چیک کرنا شروع کریں:

Gitlab CE میں کوڈ کا جائزہ: اگر انضمام کی درخواست کی منظوری نہیں ہے، لیکن میں واقعی میں چاہتا ہوں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں