Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

Ọkan ninu awọn iṣẹ ti o ṣe pataki julọ, eyiti ko si ni ẹya ọfẹ ti GitLab, ni agbara lati dibo lodi si isọdọtun ibi ipamọ ati ibeere Isopọpọ (MR), ni lilo atunyẹwo koodu dandan.

Jẹ ki a ṣe iṣẹ ṣiṣe ti o kere ju funrara wa - a yoo ṣe idiwọ Isopọpọ titi ọpọlọpọ awọn oludasilẹ yoo fun MR ni atampako.

Kini idi ti eyi paapaa ṣe pataki?

Ile-iṣẹ wa le ni irọrun ni anfani lati ra iwe-aṣẹ GitLab kan. Ṣugbọn, niwọn igba ti a ti ṣe idagbasoke ni lupu pipade laisi iwọle Intanẹẹti, ati pe eto isuna ti o muna wa, rira awọn iwe-aṣẹ ti iṣakoso ti ara ẹni pẹlu iṣẹ ṣiṣe to wulo le fa fun ọpọlọpọ awọn oṣu, ṣugbọn iṣẹ nilo lati ṣee ni bayi.

Bi abajade, o ni lati:

  • tabi ni idinamọ idapọ patapata ni awọn ẹka ti o ni aabo fun diẹ ninu awọn olupilẹṣẹ, ṣugbọn lẹhinna awọn olupilẹṣẹ ti o ni ẹtọ lati Dapọ gba awọn ija nigba ti o ba dapọ awọn MR awọn eniyan miiran bi ẹbun;
  • tabi fun ni aye lati ṣe awọn idapọ ti ko ni iṣakoso pẹlu ẹka oluwa rẹ laisi atunyẹwo koodu, paapaa ti o ba jẹ Junior, ẹniti o yá ni ana.

Ohun akọkọ ti Mo ṣe ni lọ google, ni gbigbagbọ pe ẹnikan ti ṣe pato iru nkan kan (laisi iyipada koodu), ṣugbọn o wa ni pe ko si iru imuse ni ẹya agbegbe sibẹsibẹ.

Ilana gbogbogbo ti iṣẹ

Gẹgẹbi apẹẹrẹ, jẹ ki a tunto awọn ifọwọsi ibeere Ijọpọ lori ibi ipamọ idanwo kan myapp:

  1. Jẹ ki a ṣẹda aami kan fun iraye si GitLab API (nipasẹ rẹ a yoo gba alaye nipa nọmba awọn ibo “fun” ati “lodi si”)
  2. Jẹ ki a ṣafikun aami si awọn oniyipada GitLab
  3. Jẹ ki a mu Isopọpọ kuro ni ọran ti awọn aṣiṣe ninu opo gigun ti epo (ti ko ba si awọn idibo to to)
  4. Jẹ ki a ṣeto iṣeduro idibo gẹgẹbi apakan ti opo gigun ti epo CI/CD
  5. A ṣe idiwọ ṣiṣe awọn adehun si awọn ẹka ti o ni aabo;
  6. Jẹ ki a ṣayẹwo ohun ti o ṣẹlẹ ni ipari

1. Ṣẹda aami kan lati wọle si API

Lọ si Eto Olumulo → Awọn ami iraye si ki o kọ ami si isalẹ:

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

Account lati gba a àmi
Wiwọle API gba ọ laaye lati ṣe ohunkohun pẹlu awọn ibi ipamọ rẹ, nitorinaa Mo ṣeduro ṣiṣẹda akọọlẹ Gitlab lọtọ, fifun ni awọn ẹtọ to kere si awọn ibi ipamọ rẹ (fun apẹẹrẹ Onirohin) ati gbigba ami ami kan fun akọọlẹ yẹn.

2. Fi aami kun si awọn oniyipada Gitlab

Fun apẹẹrẹ, ni igbesẹ ti tẹlẹ a gba ami-ami kan QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Ṣii Eto → CI/CD → Awọn oniyipada → Fi oniyipada kun → GITLAB_TOKEN_FOR_CI

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

Bi abajade, a gba:

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

Eyi le ṣee ṣe boya lori ibi ipamọ kan tabi lori ẹgbẹ awọn ibi ipamọ.

3. A fi idinamọ si Ijọpọ ti a ko ba gba ifọwọsi ti awọn ẹlẹgbẹ lẹhin atunyẹwo koodu.

Ninu ọran wa, idinamọ lori Merge yoo jẹ pe opo gigun ti epo yoo da aṣiṣe pada ti ko ba si awọn ibo to.

Lọ si Eto → Gbogbogbo → Awọn ibeere Ijọpọ → Awọn sọwedowo dapọ ati mu aṣayan awọn laini Apejọ gbọdọ pari ni aṣeyọri.

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

4. Ṣiṣeto opo gigun ti epo

Ti o ko ba ti ṣẹda opo gigun ti epo CI/CD fun ohun elo rẹ
Ṣẹda faili ni gbongbo ti ibi ipamọ naa .gitlab-ci.yml pẹlu akoonu ti o rọrun julọ:

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"

Ibi ipamọ lọtọ fun iṣeto CI/CD
Emi yoo ṣeduro ṣiṣe ibi ipamọ lọtọ ninu eyiti o nilo lati ṣẹda faili myapp.gitlab-ci.yml lati tunto opo gigun ti epo. Ni ọna yii o le ṣakoso iṣakoso dara julọ iraye si awọn olukopa ti o le yi opo gigun ti epo kọ ati gba ami-iwọle iwọle.

Ipo ti faili opo gigun ti epo tuntun yoo nilo lati sọ pato nipa lilọ si ibi ipamọ myapp - Eto - CI/CD - Awọn laini Apejọ - Ọna iṣeto CI Aṣa - pato faili tuntun, fun apẹẹrẹ. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Imọran: Lo linter lati ṣe awọn ayipada si awọn faili GitLab CI
Paapa ti o ba ṣiṣẹ nikan, ṣiṣe nipasẹ MR yoo jẹ iranlọwọ ti o dara, ṣiṣe gbogbo awọn iyipada rẹ si awọn faili opo gigun ti epo nipasẹ linter kan. Ti o ba ṣe aṣiṣe kan ninu sintasi ti faili YAML, kii yoo fọ opo gigun ti epo iṣelọpọ rẹ, ṣugbọn yoo kan dina Merge.

Apeere ti awọn apoti pẹlu awọn linters ti o le kọ sinu opo gigun ti epo rẹ:

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

Ati apẹẹrẹ ti ipele ijẹrisi:

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;

O wa lati ṣafikun awọn paramita diẹ si opo gigun ti epo rẹ lati jẹ ki o ṣiṣẹ:

stages:
- test

awọn iyatọ:
NILO_IBO: 1

ni:
- latọna jijin: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

Oniyipada NEED_VOTES pinnu iye “awọn atampako soke” MR gbọdọ ni lati jẹ ki Ajọpọ le wa. Iye kan ti o dọgba si ọkan tumọ si pe iwọ funrararẹ le fọwọsi MR rẹ nipa “fẹran” rẹ.

pẹlu pẹlu ipele idanwo, eyiti o ṣayẹwo nọmba awọn “fẹran”.

Opo gigun ti o rọrun julọ ni lilo apẹẹrẹ myapp.gitlab-ci.yml
stages:
- build
- test

awọn iyatọ:
NILO_IBO: 0

ni:
- latọna jijin: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

run-myapp:
ipele: kọ
aworan: openjdk
iwe afọwọkọ:
- iwo CI_MERGE_REQUEST_TARGET_BRANCH_NAME $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
- java HelloWorld.java

Awọn akoonu 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/.*$/'

Alaye diẹ sii nipa ohun ti o ṣẹlẹ lakoko ijẹrisi:

  • ihamọ wa pe ayẹwo yoo ṣee ṣe nikan nigbati o ṣẹda MR ninu oluwa tabi awọn ẹka itusilẹ / *
  • lilo GitLab API, a gba nọmba ti “awọn ti o fẹran” ati “awọn ikorira”
  • ṣe iṣiro iyatọ laarin awọn idahun rere ati odi
  • ti iyatọ ba kere si iye ti a ṣeto ni NEED_VOTES, lẹhinna a dènà agbara lati dapọ

5. Fàyègba awọn adehun si awọn ẹka ti o ni aabo

A ṣalaye awọn ẹka fun eyiti a gbọdọ ṣe awọn atunyẹwo koodu ati tọka pe wọn le ṣiṣẹ pẹlu nipasẹ MR.

Lati ṣe eyi, lọ si Eto → Ibi ipamọ → Awọn ẹka Idaabobo:

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

6. Ṣiṣayẹwo

Ṣeto NEED_VOTES: 0

A ṣe MR ati fi "ikorira".

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

Ninu awọn akọọlẹ kikọ:

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

Bayi fi “bii” ki o bẹrẹ si ṣayẹwo lẹẹkansi:

Atunwo koodu ni Gitlab CE: ti ko ba si awọn ifọwọsi ibeere Ijọpọ, ṣugbọn Mo fẹ gaan lati

orisun: www.habr.com

Ra alejo gbigba igbẹkẹle fun awọn aaye pẹlu aabo DDoS, awọn olupin VPS VDS 🔥 Ra gbigbalejo oju opo wẹẹbu ti o gbẹkẹle pẹlu aabo DDoS, awọn olupin VPS VDS | ProHoster