Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

Salah sahiji fungsi anu paling dipikabutuh, anu henteu aya dina versi gratis GitLab, nyaéta kamampuan pikeun milih ngalawan pembatalan gudang sareng ngontrol pamundut Merge (MR), nganggo ulasan kode wajib.

Hayu urang ngalakukeun pungsionalitas minimum sorangan - urang bakal ngalarang Merge dugi sababaraha pamekar masihan MR jempol.

Naha ieu malah diperlukeun?

Organisasi urang tiasa gampang mésér lisénsi GitLab. Tapi, saprak pangwangunan dilumangsungkeun dina loop katutup tanpa aksés Internet, sarta aya tata anggaran ketat, nu meuli lisensi timer junun kalawan pungsionalitas diperlukeun bisa nyered salila sababaraha bulan, tapi gawé kudu dipigawé ayeuna.

Hasilna anjeun kedah:

  • atawa sagemblengna nyaram Ngagabung dina cabang ditangtayungan pikeun sababaraha pamekar, tapi lajeng pamekar anu boga hak pikeun Gabung narima bentrok nalika merging MRs jalma séjén salaku bonus;
  • atanapi masihan kasempetan pikeun nyieun merges uncontrolled kalawan cabang master Anjeun tanpa review kode, sanajan éta Junior, anu hired ngan kamari.

Hal kahiji anu kuring lakukeun nyaéta buka Google, percanten yén batur pasti parantos ngalaksanakeun hal anu sami (tanpa ngarobih kodeu), tapi tétéla teu aya palaksanaan sapertos kitu dina versi komunitas.

Skéma umum gawé

Salaku conto, hayu urang ngonpigurasikeun persetujuan pamundut Gabung dina gudang tés myapp:

  1. Hayu urang ngadamel token pikeun aksés ka API GitLab (ngaliwatan éta kami bakal nampi inpormasi ngeunaan jumlah sora "kanggo" sareng "ngalawan")
  2. Hayu urang tambahkeun token kana variabel GitLab
  3. Hayu urang nganonaktipkeun Gabung upami aya kasalahan dina jalur pipa (upami teu cekap upvotes)
  4. Hayu urang nyetél verifikasi sora salaku bagian tina pipa CI/CD
  5. Kami ngalarang ngadamel komitmen ka cabang anu dilindungi; sadaya parobihan ngan ukur dilakukeun ku MR
  6. Hayu urang pariksa naon anu lumangsung dina tungtungna

1. Jieun token pikeun ngakses API

Pindah ka Setélan Pamaké → Token Aksés sareng tuliskeun tokenna:

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

Akun pikeun nampi token
Aksés API ngidinan Anjeun pikeun ngalakukeun ampir nanaon jeung repositories Anjeun, jadi kuring nyarankeun nyieun akun Gitlab misah, mere eta hak minimal ka repositories Anjeun (misalna Reporter) jeung meunangkeun token pikeun akun eta.

2. Tambahkeun token kana variabel Gitlab

Contona, dina hambalan saméméhna kami nampi token a QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Buka Setélan → CI/CD → Variabel → Tambah variabel → GITLAB_TOKEN_FOR_CI

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

Hasilna urang meunang:

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

Ieu tiasa dilakukeun dina hiji gudang atanapi dina grup repositori.

3. Urang nempatkeun larangan dina Ngagabung lamun persetujuan ti kolega teu narima sanggeus review kode.

Dina kasus urang, larangan dina Merge bakal yén pipa assembly bakal balik kasalahan lamun aya teu cukup sora.

Pindah ka Setélan → Umum → Gabungkeun Paménta → Gabungkeun Cék sareng aktipkeun pilihan Jalur Majelis kedah réngsé suksés.

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

4. Nyetel pipa

Upami anjeun henteu acan nyiptakeun pipa CI / CD pikeun aplikasi anjeun
Jieun file dina akar Repository nu .gitlab-ci.yml kalawan eusi pangbasajanna:

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"

Repository misah pikeun konfigurasi CI / CD
Abdi nyarankeun ngadamel gudang misah dimana anjeun kedah nyiptakeun file myapp.gitlab-ci.yml pikeun ngonpigurasikeun pipa. Ku cara ieu anjeun tiasa ngontrol aksés pamilon anu tiasa ngarobih pipa ngawangun sareng nampi token aksés.

Lokasi file pipeline anyar bakal perlu dieusian ku buka Repository myapp - Setélan - CI / CD - Majelis garis - Jalur konfigurasi custom CI - nangtukeun file anyar, misalna. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Tip: Anggo linter pikeun ngarobih file GitLab CI
Sanaos anjeun damel nyalira, damel ngalangkungan MR bakal janten pitulung anu saé, ngajalankeun sadaya parobihan anjeun kana file pipa ngalangkungan linter. Upami anjeun ngalakukeun kasalahan dina sintaksis file YAML, éta moal megatkeun jalur produksi anjeun, tapi ngan saukur bakal meungpeuk Merge.

Conto wadah kalayan linter anu anjeun tiasa ngawangun kana pipa anjeun:

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

Sareng conto tahap verifikasi:

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;

Tetep nambihan sababaraha parameter kana pipa anjeun supados tiasa dianggo:

stages:
- test

variables:
NEED_VOTES: 1

include:
- remote: "https://gitlab.com/gitlab-ce-mr-approvals/ci/-/raw/master/check-approve.gitlab-ci.yml"

Variabel NEED_VOTES nangtukeun sabaraha "jempol" MR kedah gaduh supados Merge sayogi. Nilai anu sami sareng hiji hartosna anjeun nyalira tiasa nyatujuan MR anjeun ku "resep" éta.

ngawengku ngawengku tahap tés, nu mariksa jumlah "resep".

Pipa pangbasajanna ngagunakeun conto 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

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

Inpormasi langkung seueur ngeunaan naon anu lumangsung salami verifikasi:

  • aya larangan anu dipariksa ngan bakal dilakukeun nalika nyieun MR di master atawa release / * cabang
  • ngagunakeun API GitLab, urang nampi jumlah "resep" sareng "teu resep"
  • ngitung bédana antara respon positif jeung négatif
  • lamun bédana kirang ti nilai kami disetel dina NEED_VOTES, lajeng urang meungpeuk kamampuhan pikeun ngahiji

5. Nyaram commits kana cabang ditangtayungan

Kami netepkeun cabang anu kami kedah ngalaksanakeun ulasan kode sareng nunjukkeun yén aranjeunna ngan ukur tiasa digarap ku MR.

Jang ngalampahkeun ieu, buka Setélan → Repository → Cabang Dilindungan:

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

6. Cék

Setel NEED_VOTES: 0

Urang ngadamel MR sareng nempatkeun "teu resep".

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

Dina log ngawangun:

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

Ayeuna nempatkeun "kawas" tur mimitian mariksa deui:

Ulasan kode di Gitlab CE: upami teu aya persetujuan pamundut Gabung, tapi kuring hoyong pisan

sumber: www.habr.com

Tambahkeun komentar