Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

E 'ngoe ea mesebetsi e hlokahalang haholo, e seng ka har'a mofuta oa mahala oa GitLab, ke bokhoni ba ho vouta khahlano le ho felisoa ha polokelo le taolo ea kopo ea Kopanya (MR), o sebelisa tlhahlobo ea khoutu e tlamang.

Ha re etseng tšebetso e fokolang ka borona - re tla thibela Merge ho fihlela bahlahisi ba 'maloa ba fa MR menoana ea matsoho.

Ke hobane'ng ha see se boetse se hlokahala?

Mokhatlo oa rona o ka khona ho reka laesense ea GitLab habonolo. Empa, kaha nts'etsopele e etsoa ka mokhoa o koetsoeng ntle le ho kena Inthaneteng, 'me ho na le moralo o tiileng oa tekanyetso, ho reka li-license tse ikemetseng tse nang le ts'ebetso e hlokahalang li ka hula ka likhoeli tse ngata, empa mosebetsi o lokela ho etsoa hona joale.

Ka lebaka leo, o tlameha ho:

  • kapa ho thibela ka ho feletseng Kopanya makala a sirelelitsoeng bakeng sa bahlahisi ba bang, empa joale baetsi ba nang le tokelo ea ho Kopanya ba fumana likhohlano ha ba kopanya MRs ea batho ba bang e le bonase;
  • kapa u fane ka monyetla oa ho etsa likamano tse sa laoleheng le lekala la hau la master ntle le tlhahlobo ea khoutu, leha e le Junior, ea hiriloeng maobane maobane.

Ntho ea pele eo ke e entseng e ne e le Google, ke lumela hore motho e mong o se a ntse a entse ntho e tšoanang (ntle le ho fetola khoutu), empa ho ile ha fumaneha hore ho ne ho se na ts'ebetsong e joalo molemong oa sechaba.

Sekema se akaretsang sa mosebetsi

Mohlala, ha re lokiseng litumello tsa kopo ea Merge sebakeng sa polokelo ea liteko myapp:

  1. Ha re theheng lets'oao la ho fihlella GitLab API (ka eona re tla fumana leseli mabapi le palo ea likhetho "bakeng sa" le "khahlanong le").
  2. Ha re kenyelle letšoao ho mefuta e fapaneng ea GitLab
  3. Ha re tima Merge haeba ho na le liphoso tse hlahang lipeiping (haeba ho se na likhetho tse lekaneng)
  4. Ha re theheng netefatso ea likhetho joalo ka karolo ea lipeipi tsa CI/CD
  5. Re thibela ho itlama ho makala a sirelelitsoeng; liphetoho tsohle li etsoa feela ka Monghali
  6. A re hlahlobeng se ileng sa etsahala qetellong

1. Etsa letšoao ho fihlella API

Eya ho Litlhophiso tsa Basebelisi → Fumana Tokens ebe u ngola lets'oao:

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

Akhaonto ea ho amohela letšoao
Phihlello ea API e u lumella ho etsa eng kapa eng ka polokelo ea hau, ka hona, ke khothaletsa ho theha ak'haonte e fapaneng ea Gitlab, ho e fa litokelo tse nyane ho polokelo ea hau (mohlala, Reporter) le ho fumana letšoao bakeng sa ak'haonte eo.

2. Kenya letšoao ho mefuta-futa ea Gitlab

Ka mohlala, mohatong o fetileng re fumane letšoao QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Bula Litlhophiso → CI/CD → Liphetoho → Eketsa phapang → GITLAB_TOKEN_FOR_CI

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

Ka lebaka leo, re fumana:

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

Sena se ka etsoa sebakeng sa polokelo e le 'ngoe kapa sehlopheng sa polokelo.

3. Re beha thibelo ho Kopanya haeba tumello ea basebetsi-'moho e sa amoheloe ka mor'a tlhahlobo ea khoutu.

Tabeng ea rona, thibelo ea Merge e tla ba hore pipeline ea kopano e tla khutlisa phoso haeba ho se na likhetho tse lekaneng.

Eya ho Litlhophiso → Kakaretso → Kopanya Likopo → Kopanya Licheke 'me u lumelle khetho Mehala ea Kopano e tlameha ho phethela ka katleho.

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

4. Ho theha pipeline

Haeba ha o so thehe pipeline ea CI/CD bakeng sa kopo ea hau
Theha faele motso oa polokelo .gitlab-ci.yml ka litaba tse bonolo:

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"

Sebaka se arohaneng bakeng sa tlhophiso ea CI/CD
Ke khothaletsa ho etsa polokelo e arohaneng eo ho eona o hlokang ho theha faele ea myapp.gitlab-ci.yml ho lokisa lipeipi. Ka tsela ena o ka laola hamolemo phihlello ea barupeluoa ba ka fetolang phaephe ea kaho mme ba amohela tokene ea phihlello.

Sebaka sa faele e ncha ea lipeipi se tla hloka ho hlalosoa ka ho ea polokelong ea myapp - Litlhophiso - CI/CD - Mehala ea Kopano - Tsela ea Custom CI - hlalosa faele e ncha, mohlala. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Keletso: Sebelisa linter ho etsa liphetoho lifaeleng tsa GitLab CI
Leha o sebetsa o le mong, ho sebetsa ka MR ho tla ba thuso e ntle, ho tsamaisa liphetoho tsohle tsa hau ho lifaele tsa liphaephe ka lehare. Haeba u etsa phoso syntax ea faele ea YAML, e ke ke ea senya phaephe ea hau ea tlhahiso, empa e tla thibela Merge feela.

Mohlala oa lijana tse nang le lithara tseo u ka li hahang liphaepheng tsa hau:

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

'Me mohlala oa mohato oa ho netefatsa:

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;

E sala e le ho eketsa liparamente tse 'maloa ho phaephe ea hau ho e etsa hore e sebetse:

stages:
- test

variables:
NEED_VOTES: 1

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

Phapang ea NEED_VOTES e etsa qeto ea hore na MR o tlameha ho ba le "li-thumb up" tse kae hore Merge e fumanehe. Boleng bo lekanang le bo le bong bo bolela hore uena ka bouena u ka amohela MR oa hau ka ho "rata".

kenyeletsa ho kenyeletsa sethaleng sa teko, se hlahlobang palo ea "likes".

Tsela e bonolo ka ho fetisisa e sebelisang mohlala oa 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

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

Lintlha tse ling mabapi le se etsahalang nakong ea netefatso:

  • ho na le thibelo ea hore cheke e tla etsoa feela ha ho theoa MR ho master kapa ho lokolla/* makala
  • re sebelisa GitLab API, re fumana palo ea "lintho tseo re li ratang" le "tse sa li rateng"
  • bala phapang pakeng tsa likarabo tse ntle le tse mpe
  • haeba phapang e le tlase ho boleng boo re bo behileng ho NEED_VOTES, re thibela bokhoni ba ho kopanya

5. Thibela boitlamo ho makala a sirelelitsoeng

Re hlalosa makala ao re tlamehang ho etsa li- code reviews ‘me re bonts’e hore a ka sebetsoa feela ka Monghali.

Ho etsa sena, ea ho Litlhophiso → Sebaka sa polokelo → Makala a Sirelelitsoeng:

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

6. Hlahloba

Beha NEED_VOTES: 0

Re etsa MR mme re beha "ho se rate".

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

Ka har'a li-log logs:

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

Joale beha "like" 'me u qale ho hlahloba hape:

Tlhahlobo ea khoutu ho Gitlab CE: haeba ho se na tumello ea kopo ea Kopanya, empa ke hlile ke batla ho etsa joalo

Source: www.habr.com

Eketsa ka tlhaloso