Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

Ko tetahi o nga mahi e tika ana, kaore i roto i te putanga kore utu o GitLab, ko te kaha ki te pooti ki te whakakore i te rehitatanga me te whakahaere tono Hanumi (MR), ma te whakamahi i te arotake waehere whakahau.

Ma tatou ano e mahi nga mahi iti rawa - ka aukatia te Hanumi tae noa ki etahi kaiwhakawhanake e tuku koromatua ki a MR.

He aha i tika ai tenei?

Ka taea e ta maatau whakahaere te hoko raihana GitLab. Engari, i te mea ka whakahaerehia te whakawhanaketanga i roto i te katinga kaore he uru Ipurangi, a he tino whakamahere tahua, ko te hoko o nga raihana whakahaere-whaiaro me nga mahi e tika ana ka toia mo nga marama maha, engari me mahi inaianei.

Ko te mutunga, me:

  • ka aukati rawa ranei i te Hanumi i roto i nga peka parea mo etahi kaiwhakawhanake, engari katahi ka whiwhi nga kaiwhakawhanake e whai mana ana ki te Hanumi i te wa e hanumi ai nga MR o etahi atu hei bonus;
  • hoatu ranei te whai waahi ki te hanga hanumi kore whakahaere me to peka matua kaore he arotakenga waehere, ahakoa ko Junior, nonanahi noa nei i utua ai.

Ko te mea tuatahi i mahia e au ko Google, me te whakapono kua tino mahia e tetahi tetahi mea penei (kaore i whakarereke i te waehere), engari i puta mai kaore ano he whakatinanatanga penei i te waahanga hapori.

Te kaupapa mahi whanui

Hei tauira, me whirihora tatou i nga whakaaetanga tono Hanumi i runga i te putunga whakamatautau myapp:

  1. Me hanga he tohu mo te uru ki te GitLab API (ma roto i taua mea ka whiwhi korero mo te maha o nga pooti "mo" me "ki")
  2. Me taapiri te tohu ki nga taurangi GitLab
  3. Me whakakorea te Hanumi inaa he hapa kei roto i te paipa (mehemea kaore i te nui nga pooti whakatika)
  4. Me whakarite te manatoko pooti hei wahanga o te paipa CI/CD
  5. Ka aukatihia e matou te hanga here ki nga manga kua tiakina; ko nga huringa katoa ka mahia ma MR anake
  6. Kia tirohia te mea i tupu i te mutunga

1. Waihangahia he tohu hei uru atu ki te API

Haere ki te Tautuhinga Kaiwhakamahi → Tohu Whakauru ka tuhia te tohu:

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

Kaute hei whiwhi tohu
Ko te urunga API ka taea e koe te mahi tata ki o putunga, no reira ka tūtohu ahau kia hanga he putea Gitlab motuhake, ka hoatu he mana iti ki o whare putunga (hei tauira, Kairipoata) me te whiwhi tohu mo taua kaute.

2. Tāpirihia te tohu ki nga taurangi Gitlab

Hei tauira, i te taahiraa o mua i whiwhi matou i tetahi tohu QmN2Y0NOUFlfeXhvd21ZS01aQzgK

Tuwhera Tautuhinga → CI/CD → Taurangi → Tāpiri taurangi → GITLAB_TOKEN_FOR_CI

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

Ko te hua ka whiwhi tatou:

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

Ka taea te mahi i runga i tetahi putunga putunga ranei i runga i te roopu putunga.

3. Ka whakakorehia e matou te Hanumi ki te kore te whakaaetanga a nga hoa mahi i muri i te arotake waehere.

I roto i a maatau, ko te aukati i te Hanumi ka hoki mai he hapa o te paipa hui ki te kore e nui nga pooti.

Haere ki Tautuhinga → Whānui → Tono Hanumi → Hanumi Taki ka taea te kōwhiringa Me whakaoti pai nga raina Huihuinga.

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

4. Te whakarite i te paipa

Mena kaore ano koe i hanga he paipa CI/CD mo to tono
Waihangahia he konae ki te putake o te putunga .gitlab-ci.yml me nga mea tino ngawari:

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"

Pupuri wehe mo te whirihoranga CI/CD
Ka tūtohu ahau kia hanga he putunga motuhake ka hiahia koe ki te hanga i tetahi konae myapp.gitlab-ci.yml hei whirihora i te paipa. Ma tenei ka taea e koe te whakahaere pai ake i te urunga o nga kaiuru ka taea te whakarereke i te paipa hanga me te whiwhi tohu urunga.

Ko te waahi o te konae pipeline hou me tohu ma te haere ki te rehitatanga myapp - Tautuhinga - CI/CD - Raina Runanga - Ara whirihoranga CI Ritenga - tohua te konae hou, hei tauira. myapp.gitlab-ci.yml@gitlab-ce-mr-approvals/Ci

Aki: Whakamahia he riipene hei whakarereke i nga konae GitLab CI
Ahakoa ka mahi ko koe anake, he awhina pai te mahi i roto i te MR, me te whakahaere i o huringa katoa ki nga konae paipa ma roto i te riipene. Mena ka pohehe koe i te wetereo o te konae YAML, kare e pakaru to paipa whakaputa, engari ka aukati noa i te Hanumi.

He tauira o nga ipu me nga raima ka taea e koe te hanga ki roto i to paipa:

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

Me tetahi tauira o te wahanga manatoko:

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;

Ka noho tonu ki te taapiri i etahi tawhā ki to paipa kia pai ai te mahi:

stages:
- test

variables:
NEED_VOTES: 1

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

Ko te taurangi NEED_VOTES e whakatau ana e hia nga "koromatua" MR kia taea ai te Hanumi. Ko te uara e rite ana ki te kotahi te tikanga ka taea e koe te whakaae to MR ma te "pai" ki a ia.

Kei roto ko te waahi whakamatautau, e tirotiro ana i te maha o nga "pai".

Ko te paipa ngawari ma te whakamahi i te tauira 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

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

He korero ano mo nga mea ka tupu i te wa e whakamanahia ana:

  • he herenga ka mahia anake te haki i te wa e hanga ana te MR i roto i te rangatira, te tuku ranei/* manga
  • ma te whakamahi i te API GitLab, ka whiwhi tatou i te maha o nga "pai" me "kaore e pai"
  • tātaihia te rerekētanga i waenga i ngā whakautu pai me te kino
  • Mena he iti ake te rereketanga i te uara kua whakaritea e matou ki NEED_VOTES, ka aukatihia te kaha ki te hanumi

5. Te aukati i nga mahi ki nga manga kua tiakina

Ka tautuhia e matou nga peka me whakahaere e matou nga arotake waehere me te tohu ka taea anake te mahi ma MR.

Ki te mahi i tenei, haere ki Tautuhinga → Putaka → Nga Peka Tiaki:

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

6. Takitaki

Tautuhi NEED_VOTES: 0

Ka mahia e matou he MR ka hoatu he "kaore e pai".

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

I roto i nga raarangi hanga:

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

Inaianei tuhia te "rite" ka timata ki te tirotiro ano:

Te arotake i te Waehere i Gitlab CE: mena kaore he whakaaetanga tono Hanumi, engari ka tino hiahia ahau

Source: will.com

Tāpiri i te kōrero