Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

Noma ungawathola kanjani amabheji amahle ephrojekthi yakho ngobusuku obubodwa bokubhala ngekhodi okukhululekile

Mhlawumbe, wonke umthuthukisi oneprojekthi okungenani eyodwa yesilwane ngesikhathi esithile unokuluma mayelana namabheji amahle anezimo, ukumbozwa kwekhodi, izinguqulo zephakheji ku-nuget ... Futhi lokhu kuluma kuholele ekutheni ngibhale lesi sihloko. Ngilungiselela ukuyibhala, ngithole lobu buhle kwenye yamaphrojekthi ami:

Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

Lesi sihloko sizohlanganisa ukusethwa okuyisisekelo kokuhlanganiswa okuqhubekayo nokulethwa kwephrojekthi yelabhulali yekilasi le-Net Core ku-GitLab, ukushicilela imibhalo kumakhasi e-GitLab kanye nokuthumela amaphakheji aqoqiwe kokuphakelayo okuyimfihlo ku-Azure DevOps.

Ikhodi ye-VS enesandiso isetshenziswe njengendawo yokuthuthukisa I-GitLab Workflow (ukuqinisekisa ifayela lezilungiselelo ngokuqondile endaweni yokuthuthukiswa).

Isingeniso esifushane

I-CD yilapho usanda kuphusha, kodwa iklayenti selilahlekelwe yikho konke?

Iyini i-CI/CD futhi kungani idingeka? Ungayi-google kalula. Thola imibhalo ephelele yokusetha amapayipi ku-GitLab futhi kulula. Lapha ngizochaza kafushane futhi, uma kungenzeka, ngaphandle kwamaphutha inqubo yohlelo ngokubuka iso lenyoni:

  • umthuthukisi uthumela isibopho endaweni yokugcina, udala isicelo sokuhlanganisa ngesayithi, noma ngenye indlela, iqala ngokusobala noma ngokungagunci,
  • kusukela ekucushweni, yonke imisebenzi ikhethiwe izimo zayo ezivumela ukuthi yethulwe esimweni esithile,
  • imisebenzi ihlelwa ngokwezigaba zayo,
  • izigaba zenziwa ngokushintshana - i.e. ukufana yonke imisebenzi yalesi sigaba isiqediwe,
  • uma isiteji sehluleka (okungukuthi, okungenani umsebenzi owodwa wesiteji wehluleka), ipayipi liyama (cishe njalo),
  • uma zonke izigaba ziqedwa ngempumelelo, ipayipi libhekwa njengeliyimpumelelo.

Ngakho, sine:

  • iphayiphi isethi yemisebenzi ehlelwe yaba izigaba lapho ungahlanganisa khona, uhlole, ikhodi yephakheji, uhambise umhlangano oqediwe kusevisi yefu, njll.
  • isigaba (isigaba) - iyunithi yenhlangano yamapayipi, iqukethe umsebenzi ongu-1+,
  • umsebenzi (Umsebenzi) iyunithi yomsebenzi osendleleni. Iqukethe iskripthi (isibopho), izimo zokuqalisa, izilungiselelo zokushicilela/ukugcinwa kwesikhashana kwezinto zobuciko, nokunye okuningi.

Kanjalo, umsebenzi lapho usetha i-CI/CD wehlela ekudaleni isethi yemisebenzi esebenzisa zonke izenzo ezidingekayo zokwakha, ukuhlola nokushicilela amakhodi nezinto zobuciko.

Ngaphambi kokuba siqale: kungani?

  • Kungani i-Gitlab?

Ngoba lapho kudingekile ukudala amaqoqo ayimfihlo amaphrojekthi wezilwane ezifuywayo, akhokhelwa ku-GitHub, futhi ngangihaha. Izinqolobane sezikhululekile, kodwa kuze kube manje lesi akusona isizathu esanele sokuthi ngithuthele e-GitHub.

  • Kungani kungenjalo i-Azure DevOps Pipelines?

Ngoba lapho ukulungiselelwa kuyisisekelo - ulwazi lomugqa womyalo aludingeki ngisho. Ukuhlanganiswa nabahlinzeki be-git bangaphandle - ngokuchofoza okumbalwa, ukungeniswa kokhiye be-SSH ukuthumela izibophezelo endaweni yokugcina - futhi, ipayipi lilungiswa kalula noma lingasuki kusifanekiso.

Isikhundla sokuqala: onakho nalokho okufunayo

Sine:

  • indawo yokugcina ku-GitLab.

Sifuna:

  • ukuhlanganisa okuzenzakalelayo nokuhlolwa kwesicelo ngasinye sokuhlanganisa,
  • ukwakha amaphakheji wesicelo ngasinye sokuhlanganisa nokuphusha ku-master, inqobo nje uma kunomugqa othile kumlayezo wokuzibophezela,
  • ukuthumela amaphakheji aqoqiwe kokuphakelayo okuyimfihlo ku-Azure DevOps,
  • ukuhlanganiswa kwemibhalo nokushicilelwa emakhasini e-GitLab,
  • amabheji!11

Izidingo ezichazwe ngokwemvelo ziwela kumodeli yamapayipi elandelayo:

  • Isigaba 1 - ukuhlanganisa
    • Siqoqa ikhodi, sishicilele amafayela okukhiphayo njengama-artifact
  • Isigaba 2 - ukuhlolwa
    • Sithola ama-artifact kusukela kusiteji sokwakha, senze izivivinyo, siqoqe idatha yokufakwa kwekhodi
  • Isigaba 3 - Thumela
    • Umsebenzi 1 - yakha iphakethe le-nuget bese ulithumela ku-Azure DevOps
    • Umsebenzi 2 - sihlanganisa isayithi kusuka ku-xmldoc kukhodi yomthombo bese siyishicilela emakhasini e-GitLab

Ake siqale!

Iqoqa ukumisa

Ilungiselela ama-akhawunti

  1. Dala i-akhawunti ku- I-Microsoft Azure

  2. Iya ku I-Azure DevOps

  3. Sakha iphrojekthi entsha

    1. Igama - noma yiliphi
    2. Ukubonakala - noma yikuphi
      Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

  4. Uma uchofoza inkinobho ethi Dala, iphrojekthi izokwakhiwa futhi uzoyiswa ekhasini layo. Kuleli khasi ungakhubaza izici ezingadingekile ngokuya kuzilungiselelo zamaphrojekthi (isixhumanisi esiphansi ohlwini olungakwesokunxele -> Uhlolojikelele -> Ibhulokhi Yezinsizakalo ze-Azure DevOps)
    Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

  5. Iya ku-Atrifacts, chofoza okuthi Dala okuphakelayo

    1. Faka igama lomthombo
    2. Khetha ukubonakala
    3. Susa ukumaka Faka amaphakheji asuka emithonjeni evamile yomphakathi, ukuze umthombo ungaphenduki ube i-nuget clone yokulahla
      Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

  6. Chofoza okuthi Xhuma ukuze uphakele, khetha Isitudiyo Esibonakalayo, kopisha Umthombo ebhulokhini Lokusethwa Komshini
    Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

  7. Iya kuzilungiselelo ze-akhawunti, khetha Ithokheni Yokufinyelela Komuntu Siqu
    Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

  8. Dala ithokheni yokufinyelela entsha

    1. Igama - ngokunganaki
    2. Inhlangano - yamanje
    3. Ivumeleke isikhathi esingangonyaka ongu-1
    4. Ububanzi - Ukupakisha/Funda & Bhala
      Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

  9. Kopisha ithokheni edaliwe - ngemuva kokuthi iwindi le-modal livaliwe, inani ngeke litholakale

  10. Iya kuzilungiselelo zenqolobane ku-GitLab, khetha izilungiselelo ze-CI/CD
    Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

  11. Nweba ibhulokhi Yokuguquguquka, engeza entsha

    1. Igama - noma yiziphi ezingenazo izikhala (lizotholakala kugobolondo lomyalo)
    2. Inani ithokheni yokufinyelela kusukela kusinyathelo 9
    3. Khetha i-Mask variable
      Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

Lokhu kuqeda ukumisa kwangaphambilini.

Ilungiselela uhlaka lokucushwa

Ngokuzenzakalelayo, ifayela elisetshenziselwa ukulungisa i-CI/CD ku-GitLab ngu .gitlab-ci.yml kusuka empandeni yenqolobane. Ungakwazi ukumisa indlela yangokwezifiso kuleli fayela kuzilungiselelo zokugcina, kodwa kulokhu akudingekile.

Njengoba kungabonakala esandisweni, ifayela liqukethe ukucushwa ngefomethi YAML. Imininingwane yemibhalo ukuthi yibaphi okhiye abangaqukethwa ezingeni eliphezulu lokucushwa, kanye nakuleveli ngayinye efakwe esidlekeni.

Okokuqala, ake sengeze isixhumanisi esithombeni se-docker efayeleni lokucushwa, lapho imisebenzi izokwenziwa khona. Ukwenza lokhu sithola Ikhasi lezithombe zeNet Core ku-Docker Hub. I GitHub Kukhona umhlahlandlela onemininingwane wokuthi yisiphi isithombe ongasikhetha semisebenzi eyahlukene. Isithombe esine-.Net Core 3.1 sifaneleka ukuba sisakhe, ngakho-ke zizwe ukhululekile ukusengeza njengomugqa wokuqala ekucushweni.

image: mcr.microsoft.com/dotnet/core/sdk:3.1

Manje, lapho ipayipi lethulwa endaweni yesithombe se-Microsoft, isithombe esishiwo sizolandwa, lapho yonke imisebenzi evela ekucushweni izokwenziwa.

Isinyathelo esilandelayo ukwengeza isigaba's. Ngokuzenzakalelayo, i-GitLab ichaza izigaba ezi-5:

  • .pre - kwenziwa kuzo zonke izigaba,
  • .post - eyenziwa ngemva kwazo zonke izigaba,
  • build - kuqala ngemva .pre isiteji,
  • test - isigaba sesibili,
  • deploy - isigaba sesithathu.

Nokho, akukho okukuvimbela ukuba uziveze ngokusobala. Ukulandelana kwezinyathelo ezifakwe kuhlu kuthinta indlela ezilandelwa ngayo. Ukuze siphelele, masingeze ekucushweni:

stages:
  - build
  - test
  - deploy

Ukuze kulungiswe iphutha, kunengqondo ukuthola ulwazi mayelana nendawo lapho imisebenzi eyenziwa khona. Ake sengeze isethi yemiyalo yomhlaba wonke ezokwenziwa ngaphambi komsebenzi ngamunye nge before_script:

before_script:
  - $PSVersionTable.PSVersion
  - dotnet --version
  - nuget help | select-string Version

Kusele ukungeza okungenani umsebenzi owodwa ukuze kuthi lapho kuthunyelwa ama-commissions, ipayipi liqale. Okwamanje, ake sengeze umsebenzi ongenalutho ozowubonisa:

dummy job:
  script:
    - echo ok

Siqala ukuqinisekiswa, sithola umlayezo wokuthi konke kuhamba kahle, siyazibophezela, siyaphusha, sibheka imiphumela kusayithi ... Futhi sithola iphutha lombhalo - bash: .PSVersion: command not found. I-WTF?

Konke kunengqondo - ngokuzenzakalelayo, abagijimi (abanomthwalo wemfanelo wokwenza imibhalo yemisebenzi futhi ehlinzekwa yi-GitLab) ukusetshenziswa bash ukwenza imiyalo. Ungakwazi ukukulungisa lokhu ngokubonisa ngokucacile encazelweni yomsebenzi ukuthi yimaphi amathegi umgijimi ophethe ipayipi okufanele abe nawo:

dummy job on windows:
  script:
    - echo ok
  tags:
    - windows

Kuhle! Ipayipi manje liyasebenza.

Umfundi olalelayo, esephindaphinde izinyathelo ezibonisiwe, uzoqaphela ukuthi umsebenzi uqediwe esiteji test, nakuba singasichazanga isiteji. Njengoba ungase ucabange, test isinyathelo esizenzakalelayo.

Masiqhubeke nokwakha uhlaka lwamathambo okucushwa ngokungeza yonke imisebenzi echazwe ngenhla:

build job:
  script:
    - echo "building..."
  tags:
    - windows
  stage: build

test and cover job:
  script:
    - echo "running tests and coverage analysis..."
  tags:
    - windows
  stage: test

pack and deploy job:
  script:
    - echo "packing and pushing to nuget..."
  tags:
    - windows
  stage: deploy

pages:
  script:
    - echo "creating docs..."
  tags:
    - windows
  stage: deploy

Sithole ipayipi elingasebenzi ngokukhethekile, kodwa nokho elilungile.

Ukusetha izibangeli

Ngenxa yokuthi azikho izihlungi ze-trigger ezishiwo kunoma yimiphi imisebenzi, ipayipi lizokwenza ngokugcwele kwenziwa ngaso sonke isikhathi lapho isivumelwano siphushwa endaweni yokugcina. Njengoba lokhu kungekona ukuziphatha okufiselekayo ngokuvamile, sizosetha izihlungi ze-trigger zemisebenzi.

Izihlungi zingahlelwa ngamafomethi amabili: kuphela/ngaphandle ΠΈ Imithetho. Kafushane, only/except ikuvumela ukuthi ulungiselele izihlungi ngama-trigger (merge_request, isibonelo - usetha umsebenzi okufanele wenziwe njalo lapho isicelo sokudonsa senziwa futhi ngaso sonke isikhathi izibophezelo zithunyelwa egatsheni elingumthombo wesicelo sokuhlanganisa) namagama amagatsha (okuhlanganisa nokusebenzisa izinkulumo ezivamile); rules ikuvumela ukuthi wenze ngokwezifiso isethi yemibandela futhi, ngokuzikhethela, uguqule isimo sokwenziwa komsebenzi kuye ngempumelelo yemisebenzi edlule (when ku-GitLab CI/CD).

Ake sikhumbule isethi yezidingo - ukuhlanganisa nokuhlola kuphela isicelo sokuhlanganisa, ukupakishwa nokuthumela kwa-Azure DevOps - ukuze uthole isicelo sokuhlanganisa futhi siphushele kunkosi, ukukhiqizwa kwemibhalo - ukuze kuphushelwe kunkosi.

Okokuqala, ake simise umsebenzi wokuhlanganisa ikhodi ngokwengeza umthetho wokucupha obangela kuphela isicelo sokuhlanganisa:

build job:
  # snip
  only:
    - merge_request

Manje ake simise umsebenzi wokupakisha ukuze uvule isicelo sokuhlanganisa futhi sengeze ukuzibophezela kumphathi:

pack and deploy job:
  # snip
  only:
    - merge_request
    - master

Njengoba ubona, yonke into ilula futhi iqondile.

Ungakwazi futhi ukusetha umsebenzi ukuthi uqhume kuphela uma isicelo sokuhlanganisa sidalwe ngenhloso ethile noma igatsha lomthombo:

  rules:
    - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"

Ngaphansi kwezimo, ungasebenzisa okuguquguqukayo okubalwe lapha; imithetho rules akuhambisani nemithetho only/except.

Ilungiselela Ukulondoloza I-Artifact

Ngesikhathi somsebenzi build job sizoba nama-artifact okwakha adaliwe angasetshenziswa kabusha emisebenzini elandelayo. Ukuze wenze lokhu, udinga ukwengeza izindlela ekucushweni komsebenzi, amafayela azodinga ukulondolozwa futhi asetshenziswe kabusha emisebenzini elandelayo, kukhiye. artifacts:

build job:
  # snip
  artifacts:
    paths:
      - path/to/build/artifacts
      - another/path
      - MyCoolLib.*/bin/Release/*

Izindlela zisekela amakhadi asendle, okwenza kube lula ukuwasetha.

Uma umsebenzi udala ama-artifact, khona-ke umsebenzi olandelayo olandelayo uzokwazi ukufinyelela kuwo - azotholakala ngezindlela ezifanayo ngokuhlobene nempande yenqolobane lapho aqoqwa khona kusukela kumsebenzi wokuqala. Izinto zobuciko nazo ziyatholakala ukuze zilandwe kuwebhusayithi.

Manje njengoba sesinohlaka lokumisa olulungile (futhi luhloliwe), singaqhubeka nokubhala imibhalo yemisebenzi.

Sibhala imibhalo

Mhlawumbe, ngesinye isikhathi, emthaleni kude, kude, amaphrojekthi wokwakha (kuhlanganise ne-.net) avela emgqeni womyalo kwaba ubuhlungu. Manje ungakha, uhlole futhi ushicilele iphrojekthi ngamaqembu angu-3:

dotnet build
dotnet test
dotnet pack

Ngokwemvelo, kukhona amanye ama-nuances ngenxa yokuthi sizofaka imiyalo kancane kancane.

  1. Sifuna ukwakhiwa kokukhishwa, hhayi ukwakhiwa kokususa iphutha, ngakho-ke sengeza kumyalo ngamunye -c Release
  2. Uma sihlola, sifuna ukuqoqa idatha yokufakwa kwekhodi, ngakho-ke sidinga ukufaka umhlaziyi wokuhlanganisa kumalabhulali wokuhlola:
    1. Engeza iphakheji kuwo wonke amalabhulali okuhlola coverlet.msbuild: dotnet add package coverlet.msbuild kusuka kufolda yephrojekthi
    2. Engeza kumyalo wokuqalisa wokuhlola /p:CollectCoverage=true
    3. Engeza ukhiye ekucushweni komsebenzi wokuhlola ukuze uthole imiphumela yekhava (bona ngezansi)
  3. Lapho upakisha ikhodi kumaphakheji we-nuget, setha uhla lwemibhalo lokuphumayo lwamaphakheji: -o .

Iqoqa idatha yokufakwa kwekhodi

Ngemva kokwenza ukuhlola, i-Coverlet ibonisa izibalo zokuqalisa kukhonsoli:

Calculating coverage result...
  Generating report 'C:Usersxxxsourcereposmy-projectmyProject.testscoverage.json'

+-------------+--------+--------+--------+
| Module      | Line   | Branch | Method |
+-------------+--------+--------+--------+
| project 1   | 83,24% | 66,66% | 92,1%  |
+-------------+--------+--------+--------+
| project 2   | 87,5%  | 50%    | 100%   |
+-------------+--------+--------+--------+
| project 3   | 100%   | 83,33% | 100%   |
+-------------+--------+--------+--------+

+---------+--------+--------+--------+
|         | Line   | Branch | Method |
+---------+--------+--------+--------+
| Total   | 84,27% | 65,76% | 92,94% |
+---------+--------+--------+--------+
| Average | 90,24% | 66,66% | 97,36% |
+---------+--------+--------+--------+

I-GitLab ikuvumela ukuthi ucacise isisho esivamile ukuze uthole izibalo, ezingase zitholwe ngendlela yebheji. Isisho esivamile sicaciswa kuzilungiselelo zomsebenzi ngokhiye coverage; isisho kufanele sibe neqembu lokuthwebula, inani lalo elizodluliselwa ebhejini:

test and cover job:
  # snip
  coverage: /|s*Totals*|s*(d+[,.]d+%)/

Lapha sithola izibalo emugqeni onesamba esiphelele somugqa.

Sishicilela amaphakheji kanye nemibhalo

Zombili lezi zenzo zihlelelwe isigaba sokugcina sepayipi - njengoba umhlangano nokuhlolwa sekuphumelele, singabelana ngentuthuko yethu nomhlaba.

Okokuqala, ake sibheke ukushicilela kumthombo wephakheji:

  1. Uma iphrojekthi ingenalo ifayela lokucushwa le-nuget (nuget.config), dala entsha: dotnet new nugetconfig

    Kwani: isithombe singase singabi nakho ukufinyelela kokubhala ekucushweni komhlaba jikelele (umsebenzisi nomshini). Ukuze singabambi amaphutha, simane sakhe ukucushwa kwasendaweni okusha futhi sisebenze ngakho.

  2. Ake sengeze umthombo wephakheji omusha ekucushweni kwendawo: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - Igama lomthombo wendawo, alibalulekile
    2. url - I-URL yomthombo kusukela esiteji "Ukulungiselela ama-akhawunti", ikhasi 6
    3. organization - Igama lenhlangano ku-Azure DevOps
    4. gitlab variable β€” igama lesiguquli esinethokheni yokungena engezwe ku-GitLab (β€œUkulungiselela ama-akhawunti”, ikhasi 11). Ngokwemvelo, ngefomethi $variableName
    5. -StorePasswordInClearText - ukugebenga ukudlula iphutha elinqatshelwe ukufinyelela (Angiqali ukunyathela leli reki)
    6. Esimeni samaphutha, kungase kube usizo ukungeza -verbosity detailed
  3. Ithumela iphakheji emthonjeni: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Sithumela wonke amaphakheji kusuka kuhla lwemibhalo lwamanje, ngakho *.nupkg.
    2. name - kusukela esinyathelweni esingenhla.
    3. key - yimuphi umugqa. Ku-Azure DevOps, ku-Connect to feed window, isibonelo sihlala siwumugqa az.
    4. -skipduplicate - uma uzama ukuthumela iphakheji ekhona kakade ngaphandle kwalo khiye, umthombo uzobuyisela iphutha 409 Conflict; ngokhiye, ukuthumela kuzokweqiwa.

Manje ake sisethe ukudalwa kwamadokhumenti:

  1. Okokuqala, endaweni yokugcina, egatsheni eliyinhloko, siqala iphrojekthi ye-docfx. Ukuze wenze lokhu, sebenzisa umyalo kusuka empandeni docfx init futhi usethe ngokuhlanganyela imingcele ebalulekile yokwakha imibhalo. Incazelo enemininingwane yobuncane bokusethwa kwephrojekthi lapha.
    1. Lapho usetha, kubalulekile ukucacisa uhla lwemibhalo lokuphumayo ..public - I-GitLab ngokuzenzakalelayo ithatha okuqukethwe kwefolda yomphakathi kuyimpande yenqolobane njengomthombo Wamakhasi. Ngoba iphrojekthi izotholakala kufolda ebekwe endaweni yokugcina - engeza okukhiphayo kuleveli ephezulu endleleni.
  2. Masiphushele izinguquko ku-GitLab.
  3. Engeza umsebenzi ekucushweni kwepayipi pages (igama eligodliwe lemisebenzi yokushicilela isayithi emakhasini e-GitLab):
    1. Iskriphthi:
      1. nuget install docfx.console -version 2.51.0 - faka i-docfx; inguqulo icacisiwe ukuze kuqinisekiswe ukuthi izindlela zokufaka iphakheji zilungile.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ukuqoqa imibhalo
    2. Ama-artifact e-Node:

pages:
  # snip
  artifacts:
    paths:
      - public

Ukwehla kwezwi mayelana ne-docfx

Ngaphambilini, lapho ngihlela iphrojekthi, ngacacisa umthombo wekhodi wemibhalo njengefayela lesixazululo. Ububi obukhulu ukuthi imibhalo ibuye yenzelwe amaphrojekthi wokuhlola. Uma kwenzeka lokhu kungenasidingo, ungasetha leli nani ku-node metadata.src:

{
  "metadata": [
    {
      "src": [
        {
          "src": "../",
          "files": [
            "**/*.csproj"
          ],
          "exclude":[
            "*.tests*/**"
          ]
        }
      ],
      // --- snip ---
    },
    // --- snip ---
  ],
  // --- snip ---
}

  1. metadata.src.src: "../" - sikhuphukela kwelinye izinga ngokuphathelene nendawo docfx.json, ngoba Ukusesha isihlahla sohla lwemibhalo akusebenzi ngamaphethini.
  2. metadata.src.files: ["**/*.csproj"] - iphethini yomhlaba wonke, siqoqa wonke amaphrojekthi we-C# kuzo zonke izinkomba.
  3. metadata.src.exclude: ["*.tests*/**"] - iphethini yomhlaba wonke, ungafaki yonke into kumafolda .tests Esihlokweni

Inani eliphelele

Ukucushwa okulula okunjalo kungadalwa ngesigamu sehora kanye nezinkomishi ezimbalwa zekhofi, okuzokuvumela ukuthi uhlole ukuthi ikhodi yakhiwe futhi izivivinyo ziyadlula, wakhe iphakheji elisha, ubuyekeze imibhalo futhi ujabulise iso ngokuhle. amabheji ku-README yephrojekthi nesicelo ngasinye sokuhlanganisa nokuthunyelwa kumphathi.

Okokugcina .gitlab-ci.yml

image: mcr.microsoft.com/dotnet/core/sdk:3.1

before_script:
  - $PSVersionTable.PSVersion
  - dotnet --version
  - nuget help | select-string Version

stages:
  - build
  - test
  - deploy

build job:
  stage: build
  script:
    - dotnet build -c Release
  tags:
    - windows
  only:
    - merge_requests
    - master
  artifacts:
    paths:
      - your/path/to/binaries

test and cover job:
  stage: test
  tags:
    - windows
  script:
    - dotnet test -c Release /p:CollectCoverage=true
  coverage: /|s*Totals*|s*(d+[,.]d+%)/
  only:
    - merge_requests
    - master

pack and deploy job:
  stage: deploy
  tags:
    - windows
  script:
    - dotnet pack -c Release -o .
    - dotnet new nugetconfig
    - nuget sources add -name feedName -source https://pkgs.dev.azure.com/your-organization/_packaging/your-feed/nuget/v3/index.json -username your-organization -password $nugetFeedToken -configfile nuget.config -StorePasswordInClearText
    - nuget push -source feedName -skipduplicate -apikey az *.nupkg
  only:
    - master

pages:
  tags:
    - windows
  stage: deploy
  script:
    - nuget install docfx.console -version 2.51.0
    - $env:path = "$env:path;$($(get-location).Path)"
    - .docfx.console.2.51.0toolsdocfx.exe .docfxdocfx.json
  artifacts:
    paths:
      - public
  only:
    - master

Ekhuluma ngamabheji

Ngenxa yabo, phela, konke kwaqalwa!

Amabheji anesimo samapayipi kanye nekhodi ayatholakala ku-GitLab kuzilungiselelo ze-CI/CD kubhulokhi yamapayipi e-Gtntral:

Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

Ngidale ibheji elinesixhumanisi sokuya kumadokhumenti endawenikazi Izihlangu.io - yonke into iqondile lapho, ungazakhela ibheji lakho futhi ulithole usebenzisa isicelo.

![ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Shields.io](https://img.shields.io/badge/custom-badge-blue)

Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

I-Azure DevOps Artifacts futhi ikuvumela ukuthi udale amabheji amaphakheji ngenguqulo yakamuva. Ukuze wenze lokhu, emthonjeni kuwebhusayithi ye-Azure DevOps, udinga ukuchofoza okuthi Dala ibheji lephakheji elikhethiwe bese ukopisha umaki wokumaka:

Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

Umhlahlandlela we-CI/CD ku-GitLab wabaqalayo (cishe) abaphelele

Ukwengeza ubuhle

Igqamisa Izingcezu Zokucushwa Ezivamile

Ngenkathi ngibhala ukumisa futhi ngicwaninga kumadokhumenti, ngihlangabezane nesici esijabulisayo se-YAML - ukusebenzisa kabusha izingcezwana.

Njengoba ubona kuzilungiselelo zomsebenzi, zonke zidinga ithegi windows kumgijimi, futhi icushwa lapho isicelo sokuhlanganisa sithunyelwa kumphathi/okudaliwe (ngaphandle kwemibhalo). Ake sengeze lokhu kucezu esizophinda silusebenzise:

.common_tags: &common_tags
  tags:
    - windows
.common_only: &common_only
  only:
    - merge_requests
    - master

Futhi manje sesingakwazi ukufaka ucezu olumenyezelwe ngaphambili encazelweni yomsebenzi:

build job:
  <<: *common_tags
  <<: *common_only

Amagama eziqephu kufanele aqale ngechashazi, ukuze angatolikwa njengomsebenzi.

Inguqulo yephakheji

Lapho udala iphakheji, umhlanganisi uhlola ukushintshwa komugqa womyalo, futhi lapho kungabikho, amafayela wephrojekthi; Ngemva kokuthola i-Node yenguqulo, kuthatha inani layo njengenguqulo yephakheji eyakhiwayo. Kuvela ukuthi ukuze wakhe iphakheji ngenguqulo entsha, udinga ukuyibuyekeza kufayela lephrojekthi noma uyidlulise njengengxabano yomugqa womyalo.

Ake sengeze olunye Uhlu Lwezifiso - vumela izinombolo ezimbili ezincane enguqulweni zibe unyaka futhi sakhe usuku lwephakheji, futhi sengeze izinguqulo ezikhishwe ngaphambilini. Yebo, ungakwazi ukwengeza le datha efayeleni lephrojekthi futhi uhlole ngaphambi kokuthunyelwa ngakunye - kodwa futhi ungakwenza ngokuqhubekayo, uqoqe inguqulo yephakheji kusuka kumongo futhi uyidlulise ku-agumenti yomugqa womyalo.

Masivume ukuthi uma umlayezo wokuzibophezela uqukethe umugqa onjengawo release (v./ver./version) <version number> (rev./revision <revision>)?, khona-ke sizothatha inguqulo yephakheji kulo mugqa, siyifake ngosuku lwamanje futhi siyidlulisele njengengxabano kumyalo dotnet pack. Uma ungekho ulayini, ngeke nje siqoqe iphakheji.

Umbhalo olandelayo uxazulula le nkinga:

# рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для поиска строки с вСрсиСй
$rx = "releases+(v.?|ver.?|version)s*(?<maj>d+)(?<min>.d+)?(?<rel>.d+)?s*((rev.?|revision)?s+(?<rev>[a-zA-Z0-9-_]+))?"
# ΠΈΡ‰Π΅ΠΌ строку Π² сообщСнии ΠΊΠΎΠΌΠΌΠΈΡ‚Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· прСдопрСдСляСмых GitLab'ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…
$found = $env:CI_COMMIT_MESSAGE -match $rx
# совпадСний Π½Π΅Ρ‚ - Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ
if (!$found) { Write-Output "no release info found, aborting"; exit }
# ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ ΠΌΠ°ΠΆΠΎΡ€Π½ΡƒΡŽ ΠΈ ΠΌΠΈΠ½ΠΎΡ€Π½ΡƒΡŽ вСрсии
$maj = $matches['maj']
$min = $matches['min']
# Ссли строка содСрТит Π½ΠΎΠΌΠ΅Ρ€ Ρ€Π΅Π»ΠΈΠ·Π° - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ, ΠΈΠ½Π°Ρ‡Π΅ - Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π³ΠΎΠ΄
if ($matches.ContainsKey('rel')) { $rel = $matches['rel'] } else { $rel = ".$(get-date -format "yyyy")" }
# Π² качСствС Π½ΠΎΠΌΠ΅Ρ€Π° сборки - Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ мСсяц ΠΈ дСнь
$bld = $(get-date -format "MMdd")
# Ссли Π΅ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ ΠΏΡ€Π΅Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠΉ вСрсии - Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΈΡ… Π² Π²Π΅Ρ€ΡΠΈΡŽ
if ($matches.ContainsKey('rev')) { $rev = "-$($matches['rev'])" } else { $rev = '' }
# собираСм Π΅Π΄ΠΈΠ½ΡƒΡŽ строку вСрсии
$version = "$maj$min$rel.$bld$rev"
# собираСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹
dotnet pack -c Release -o . /p:Version=$version

Ukwengeza iskripthi kumsebenzi pack and deploy job futhi ubheke ukuhlanganiswa kwamaphakheji ngokuqinile uma kunomugqa onikeziwe kumlayezo wokuzibophezela.

Inani

Ngemva kokuchitha cishe isigamu sehora ukuya ehoreni sibhala ukucushwa, ukulungisa iphutha ku-powershell yendawo futhi, ngokunokwenzeka, ukwethulwa okumbalwa okungaphumelelanga, sithole ukucushwa okulula kokuzenzakalela kwemisebenzi yenjwayelo.

Vele, i-GitLab CI/CD ibanzi kakhulu futhi inezici eziningi kunalokho engase ibonakale ngemva kokufunda lo mhlahlandlela - lokho akulona iqiniso nhlobo. Lapho futhi I-Auto DevOps yeboukuvumela

thola ngokuzenzakalelayo, wakhe, hlola, sebenzisa, futhi ugade izinhlelo zakho zokusebenza

Manje izinhlelo ziwukumisa ipayipi lokuthumela izinhlelo zokusebenza e-Azure, kusetshenziswa i-Pulumi futhi kunqunywe ngokuzenzakalelayo indawo okuhlosiwe, okuzohlanganiswa esihlokweni esilandelayo.

Source: www.habr.com

Engeza amazwana