GitLab యొక్క ఉచిత సంస్కరణలో లేని అత్యంత అవసరమైన ఫంక్షన్లలో ఒకటి, తప్పనిసరి కోడ్ సమీక్షను ఉపయోగించి రిపోజిటరీ శూన్యతకు వ్యతిరేకంగా ఓటు వేయడం మరియు విలీన అభ్యర్థన (MR)ని నియంత్రించడం.
కనీస కార్యాచరణను మనమే చేద్దాం - అనేక మంది డెవలపర్లు MRకి థంబ్స్ అప్ ఇచ్చే వరకు మేము విలీనం చేయడాన్ని నిషేధిస్తాము.
ఇది కూడా ఎందుకు అవసరం?
మా సంస్థ GitLab లైసెన్స్ను సులభంగా కొనుగోలు చేయగలదు. కానీ, ఇంటర్నెట్ సదుపాయం లేకుండా క్లోజ్డ్ లూప్లో అభివృద్ధి జరుగుతుంది మరియు కఠినమైన బడ్జెట్ ప్రణాళిక ఉన్నందున, అవసరమైన కార్యాచరణతో స్వీయ-నిర్వహణ లైసెన్స్ల కొనుగోలు చాలా నెలలు లాగవచ్చు, అయితే ఇప్పుడు పని చేయాల్సిన అవసరం ఉంది.
ఫలితంగా మీరు వీటిని చేయాలి:
- లేదా కొంత మంది డెవలపర్ల కోసం రక్షిత శాఖలలో విలీనం చేయడాన్ని పూర్తిగా నిషేధించండి, కానీ ఇతర వ్యక్తుల MRలను బోనస్గా విలీనం చేసేటప్పుడు విలీనానికి హక్కు ఉన్న డెవలపర్లు వైరుధ్యాలను స్వీకరిస్తారు;
- లేదా నిన్ననే నియమించబడిన జూనియర్ అయినప్పటికీ కోడ్ సమీక్ష లేకుండా మీ మాస్టర్ బ్రాంచ్తో అనియంత్రిత విలీనాలను చేసే అవకాశాన్ని ఇవ్వండి.
నేను చేసిన మొదటి పని Google, ఎవరైనా ఖచ్చితంగా ఇప్పటికే ఇలాంటిదే (కోడ్ను సవరించకుండా) చేశారని నమ్ముతున్నాను, కానీ సంఘం సంస్కరణలో ఇంకా అలాంటి అమలు లేదని తేలింది.
పని యొక్క సాధారణ పథకం
ఉదాహరణగా, పరీక్ష రిపోజిటరీలో విలీన అభ్యర్థన ఆమోదాలను కాన్ఫిగర్ చేద్దాం
- GitLab APIకి యాక్సెస్ కోసం ఒక టోకెన్ని క్రియేట్ చేద్దాం (దాని ద్వారా "కోసం" మరియు "వ్యతిరేకంగా" ఓట్ల సంఖ్య గురించి సమాచారాన్ని అందుకుంటాము)
- GitLab వేరియబుల్స్కు టోకెన్ని జోడిద్దాం
- పైప్లైన్లో లోపాలు ఏర్పడితే (తగినంత అప్వోట్లు లేకుంటే) విలీనాన్ని నిలిపివేద్దాం
- CI/CD పైప్లైన్లో భాగంగా ఓటు ధృవీకరణను సెటప్ చేద్దాం
- మేము రక్షిత శాఖలకు కట్టుబడి ఉండడాన్ని నిషేధించాము; అన్ని మార్పులు MR ద్వారా మాత్రమే చేయబడతాయి
- చివరికి ఏం జరిగిందో చూద్దాం
1. APIని యాక్సెస్ చేయడానికి టోకెన్ను సృష్టించండి
వినియోగదారు సెట్టింగ్లు → యాక్సెస్ టోకెన్లకు వెళ్లి, టోకెన్ను వ్రాయండి:
టోకెన్ స్వీకరించడానికి ఖాతా
API యాక్సెస్ మీ రిపోజిటరీలతో దాదాపు ఏదైనా చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, కాబట్టి నేను ప్రత్యేక గిట్లాబ్ ఖాతాను సృష్టించాలని సిఫార్సు చేస్తున్నాను, మీ రిపోజిటరీలకు (ఉదా రిపోర్టర్) కనీస హక్కులను ఇచ్చి ఆ ఖాతా కోసం టోకెన్ను పొందాలని నేను సిఫార్సు చేస్తున్నాను.
2. Gitlab వేరియబుల్స్కు టోకెన్ని జోడించండి
ఉదాహరణకు, మునుపటి దశలో మేము టోకెన్ను అందుకున్నాము QmN2Y0NOUFlfeXhvd21ZS01aQzgK
సెట్టింగ్లను తెరవండి → CI/CD → వేరియబుల్స్ → వేరియబుల్ జోడించండి → GITLAB_TOKEN_FOR_CI
ఫలితంగా మనకు లభిస్తుంది:
ఇది ఒక రిపోజిటరీలో లేదా రిపోజిటరీల సమూహంలో చేయవచ్చు.
3. కోడ్ సమీక్ష తర్వాత సహోద్యోగుల ఆమోదం పొందకపోతే మేము విలీనంపై నిషేధాన్ని ఉంచుతాము.
మా విషయంలో, విలీనంపై నిషేధం ఏమిటంటే, తగినంత ఓట్లు లేనట్లయితే అసెంబ్లీ పైప్లైన్ లోపాన్ని తిరిగి ఇస్తుంది.
సెట్టింగ్లు → జనరల్ → విలీన అభ్యర్థనలు → తనిఖీలను విలీనం చేయండి మరియు ఎంపికను ప్రారంభించండి అసెంబ్లీ లైన్లు విజయవంతంగా పూర్తి చేయాలి.
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 ఫైల్ యొక్క సింటాక్స్లో పొరపాటు చేస్తే, అది మీ ఉత్పత్తి పైప్లైన్ను విచ్ఛిన్నం చేయదు, కానీ విలీనాన్ని బ్లాక్ చేస్తుంది.
మీరు మీ పైప్లైన్లో నిర్మించగల లింటర్లు ఉన్న కంటైనర్ల ఉదాహరణ:
మరియు ధృవీకరణ దశకు ఉదాహరణ:
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
కంటెంట్లను చెక్-అప్రూవ్.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/.*$/'
ధృవీకరణ సమయంలో ఏమి జరుగుతుందనే దాని గురించి మరింత సమాచారం:
- మాస్టర్ లేదా రిలీజ్/* బ్రాంచ్లలో MRని క్రియేట్ చేస్తున్నప్పుడు మాత్రమే చెక్ చేయబడుతుంది అనే పరిమితి ఉంది
- GitLab APIని ఉపయోగించి, మేము "ఇష్టాలు" మరియు "అయిష్టాలు" సంఖ్యను పొందుతాము
- సానుకూల మరియు ప్రతికూల ప్రతిస్పందనల మధ్య వ్యత్యాసాన్ని లెక్కించండి
- తేడా మేము NEED_VOTESలో సెట్ చేసిన విలువ కంటే తక్కువగా ఉంటే, మేము విలీనం చేసే సామర్థ్యాన్ని బ్లాక్ చేస్తాము
5. రక్షిత శాఖలను నిషేధించడం
మేము కోడ్ సమీక్షలను నిర్వహించాల్సిన శాఖలను నిర్వచించాము మరియు అవి MR ద్వారా మాత్రమే పని చేయవచ్చని సూచిస్తాము.
దీన్ని చేయడానికి, సెట్టింగ్లు → రిపోజిటరీ → రక్షిత శాఖలకు వెళ్లండి:
6. తనిఖీ చేయండి
NEED_VOTESని సెట్ చేయండి: 0
మేము MR తయారు చేస్తాము మరియు "అయిష్టం" ఉంచుతాము.
బిల్డ్ లాగ్లలో:
ఇప్పుడు "ఇష్టం" ఉంచండి మరియు మళ్లీ తనిఖీ చేయడం ప్రారంభించండి:
మూలం: www.habr.com