Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

Ɗaya daga cikin mafi mahimmancin ayyuka, wanda baya cikin sigar GitLab kyauta, shine ikon jefa ƙuri'a akan ɓata ma'auni da buƙatun haɗin kai (MR), ta amfani da bitar lambar dole.

Bari mu yi mafi ƙarancin ayyuka da kanmu - za mu hana Haɗuwa har sai yawancin masu haɓakawa sun ba MR babban yatsa.

Me yasa wannan ma ya zama dole?

Ƙungiyarmu za ta iya samun sauƙin siyan lasisin GitLab. Amma, tun da ana aiwatar da ci gaba a cikin rufaffiyar madauki ba tare da samun damar Intanet ba, kuma akwai tsauraran tsarin kasafin kuɗi, siyan lasisin sarrafa kansa tare da aikin da ya dace na iya ɗaukar watanni da yawa, amma ana buƙatar yin aiki a yanzu.

A sakamakon haka dole ne ku:

  • ko haramtattun hanzarta hade cikin rassan kariya na kariya ga wasu masu haɓaka, amma sannan masu haɓakawa waɗanda suke da 'yancin haɗuwa da abubuwan da suka haifar da su a matsayin kari;
  • ko kuma ku ba da damar yin haɗin gwiwa tare da reshen maigidanku ba tare da sake duba lambar ba, koda kuwa Junior ne, wanda aka ɗauke shi aiki jiya.

Abu na farko da na yi shi ne Google, yana gaskanta cewa wani ya riga ya yi wani abu makamancin haka (ba tare da canza lambar ba), amma ya nuna cewa har yanzu ba a aiwatar da irin wannan a cikin sigar al'umma ba tukuna.

Janar tsarin aiki

A matsayin misali, bari mu saita yardan buƙatun haɗa kan ma'ajiyar gwaji myapp:

  1. Bari mu ƙirƙiri alama don samun dama ga GitLab API (ta wurinsa za mu sami bayani game da adadin kuri'un "don" da "a gaba")
  2. Bari mu ƙara alamar zuwa masu canjin GitLab
  3. Bari mu kashe Haɗa idan akwai kurakurai a cikin bututun (idan babu isassun kuri'u)
  4. Bari mu saita tabbatar da ƙuri'a a matsayin wani ɓangare na bututun CI/CD
  5. Mun hana yin alkawari ga rassan da aka karewa; duk canje-canje ana yin su ta hanyar MR
  6. Mu duba abin da ya faru a karshe

1. Ƙirƙiri alamar don samun damar API

Je zuwa Saitunan Mai amfani → Samun dama ga Token kuma rubuta alamar:

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

Asusu don karɓar alama
Samun API yana ba ku damar yin kusan komai tare da ma'ajiyar ku, don haka ina ba da shawarar ƙirƙirar asusun Gitlab daban, ba shi ƙaramin hakki ga ma'ajiyar ku (misali Mai ba da rahoto) da samun alamar wannan asusun.

2. Ƙara alamar zuwa masu canji na Gitlab

Misali, a mataki na baya mun sami alama QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Buɗe Saituna → CI/CD → Maɓalli → Ƙara m → GITLAB_TOKEN_FOR_CI

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

A sakamakon haka muna samun:

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

Ana iya yin wannan ko dai a kan ma'ajiyar ajiya ɗaya ko kuma a rukunin wuraren ajiya.

3. Mun sanya haramci kan Haɗuwa idan ba a karɓi amincewar abokan aiki ba bayan sake duba lambar.

A cikin yanayinmu, haramcin akan haɗakarwa zai kasance cewa bututun taron zai dawo da kuskure idan babu isassun kuri'u.

Je zuwa Saituna → Gabaɗaya → Buƙatun Haɗa → Haɗa Dubawa kuma ba da damar zaɓin Layukan Majalisar dole su cika cikin nasara.

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

4. Kafa bututun mai

Idan har yanzu ba ku ƙirƙiri bututun CI/CD don aikace-aikacenku ba
Ƙirƙiri fayil a tushen ma'ajiyar .gitlab-ci.yml tare da mafi sauƙin abun ciki:

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"

Wurin ajiya daban don daidaitawar CI/CD
Zan ba da shawarar yin wurin ajiya daban wanda a ciki kuke buƙatar ƙirƙirar fayil myapp.gitlab-ci.yml don saita bututun. Ta wannan hanyar za ku iya sarrafa damar shiga mahalarta waɗanda za su iya canza bututun ginawa kuma su karɓi alamar shiga.

Ana buƙatar ƙayyadadden wurin sabon fayil ɗin bututun ta zuwa wurin ajiyar myapp - Saituna - CI/CD - Layukan majalisa - Hanyar daidaitawa ta CI - ƙayyadadden sabon fayil ɗin, misali. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Tukwici: Yi amfani da linter don yin canje-canje ga fayilolin GitLab CI
Ko da kuna aiki kadai, yin aiki ta hanyar MR zai zama taimako mai kyau, gudanar da duk canje-canjenku zuwa fayilolin bututu ta hanyar linter. Idan kun yi kuskure a cikin tsarin tsarin fayil ɗin YAML, ba zai karya bututun samar da ku ba, amma zai toshe haɗin gwiwa kawai.

Misalin kwantena masu linters waɗanda zaku iya ginawa cikin bututunku:

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

Kuma misalin matakin tabbatarwa:

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;

Ya rage don ƙara ƴan sigogi zuwa bututun ku don yin aiki:

stages:
- test

variables:
NEED_VOTES: 1

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

Madaidaicin NEED_VOTES yana ƙayyade adadin "yatsa sama" MR dole ne ya kasance yana da su don samun haɗin kai. Ƙimar daidai da ɗaya tana nufin cewa ku da kanku za ku iya amincewa da MR ta hanyar "liking" ta.

sun haɗa da matakin gwaji, wanda ke bincika adadin "likes".

Mafi sauƙin bututu ta amfani da misalin 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

Abun ciki duba-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/.*$/'

Ƙarin bayani game da abin da ke faruwa yayin tabbatarwa:

  • akwai ƙuntatawa cewa rajistan za a yi kawai lokacin ƙirƙirar MR a cikin master ko saki / * rassan
  • ta amfani da GitLab API, muna samun adadin "ƙauna" da "ƙi"
  • lissafta bambanci tsakanin amsa mai kyau da mara kyau
  • idan bambancin bai kai darajar da muka saita a cikin NEED_VOTES ba, to muna toshe ikon haɗuwa

5. Haramta aikata ga rassa masu kariya

Mun ayyana rassan da dole ne mu gudanar da bita na lamba kuma mu nuna cewa za a iya yin aiki da su ta hanyar MR.

Don yin wannan, je zuwa Saituna → Ma'ajiyar → Rassan Tsaro:

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

6. Duba

Saita NEED_VOTES: 0

Muna yin MR kuma mu sanya "ƙi".

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

A cikin rajistan ayyukan gini:

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

Yanzu sanya "like" kuma fara dubawa kuma:

Bita na lamba a Gitlab CE: idan babu amincewar buƙatun Haɗa, amma ina so da gaske

source: www.habr.com

Add a comment