Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

Okanye ungazifumana njani iibheji ezintle zeprojekthi yakho ngobusuku obunye bokubhala ikhowudi

Mhlawumbi, wonke umthuthukisi onayo iprojekthi enye yesilwanyana sasekhaya ngexesha elithile unomdla malunga neebheji ezintle ezinamazinga, ukugubungela ikhowudi, iinguqulelo zephakheji kwi-nuget ... Kwaye le itch ibangele ukuba ndibhale eli nqaku. Ukulungiselela ukuyibhala, ndifumene obu buhle kwenye yeeprojekthi zam:

Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

Eli nqaku liza kukuhamba ngoseto olusisiseko lokudityaniswa okuqhubekayo kunye nokuhanjiswa kweprojekthi yethala leencwadi leklasi ye-.Net Core kwi-GitLab, ukupapasha amaxwebhu kuMaphepha e-GitLab, kunye nokutyhalela iipakethe ezakhiweyo kwifidi yabucala kwi-Azure DevOps.

IKhowudi ye-VS yasetyenziswa njengendawo yophuhliso kunye nolwandiso GitLab Workflow (ukuqinisekisa ifayile yemimiselo ngokuthe ngqo kwindawo yophuhliso).

Intshayelelo emfutshane

I-CD - ngaba xa utyhala nje, kwaye yonke into sele iwele kumxhasi?

Yintoni i-CI / CD kwaye kutheni uyifuna-unokuyisebenzisa kugoogle ngokulula. Fumana uxwebhu olupheleleyo kuqwalaselo lwemibhobho kwi-GitLab kwakhona kulula. Apha ndiza kuthi ngokufutshane kwaye, ukuba kunokwenzeka, ngaphandle kweziphene ndichaze inkqubo yenkqubo kwiliso lentaka:

  • umphuhlisi uthumela isibophelelo kwindawo yokugcina, wenza isicelo sokudibanisa kwisiza, okanye ngenye indlela, ngokucacileyo okanye ngokungafihliyo iqala umbhobho,
  • yonke imisebenzi ikhethiwe kuqwalaselo, iimeko ezibavumela ukuba baqaliswe kumxholo onikiweyo,
  • imisebenzi icwangciswa ngokwezigaba zayo,
  • izigaba zenziwa ngokulandelelana - okt. ukufana yonke imisebenzi yesi sigaba igqityiwe,
  • ukuba inqanaba liyasilela (oko kukuthi, umsebenzi omnye weqonga uyasilela), umbhobho uyayeka (phantse qho),
  • ukuba zonke izigaba zigqitywe ngempumelelo, umbhobho uthathwa njengempumelelo.

Ngaloo ndlela, sine:

  • umbhobho - isethi yemisebenzi ehlelwe ngokwezigaba apho unokwakha khona, uvavanyo, ikhowudi yephakheji, ukuhambisa isakhiwo esigqityiweyo kwinkonzo yefu, njl.
  • iqonga (uqeqesho) - iyunithi yombutho wombhobho, iqulethe 1+ umsebenzi,
  • umsebenzi (umsebenzi) yiyunithi yomsebenzi kumbhobho. Iqulethe iscript (isinyanzelo), iimeko zokuqaliswa, izicwangciso zokupapasha / i-caching artifics, kunye nokunye okuninzi.

Ngokufanelekileyo, umsebenzi xa ubeka i-CI / iCD yehla ekudaleni isethi yemisebenzi eyenza zonke izenzo eziyimfuneko zokwakha, ukuvavanya kunye nokushicilela ikhowudi kunye nezinto zakudala.

Ngaphambi kokuba uqale: kutheni?

  • Kutheni iGitlab?

Kuba xa kuye kwafuneka ukuba kwenziwe iindawo zokugcina zabucala zeeprojekthi zezilwanyana zasekhaya, zahlawulwa kwi-GitHub, kwaye ndandibawa. Iindawo zokugcina zikhululekile, kodwa ukuza kuthi ga ngoku esi ayisosizathu saneleyo sokuba ndiye eGitHub.

  • Kutheni le nto i-Azure DevOps Pipelines?

Kuba apho useto lusisiseko - ulwazi lomgca womyalelo alufuneki nokufunwa. Ukudityaniswa nababoneleli be-git bangaphandle - kunqakrazo olubini, ukungeniswa kwezitshixo ze-SSH ukuthumela ukuzinikela kwindawo yokugcina - kwakhona, umbhobho uqwalaselwe ngokulula nokuba hayi kwitemplate.

Indawo yokuqala: into onayo kunye nento oyifunayo

Si:

  • indawo yokugcina kwiGitLab.

Sifuna:

  • indibano ezenzekelayo kunye novavanyo kwisicelo ngasinye sokudibanisa,
  • iiphakheji zokwakha zesicelo ngasinye sokudibanisa kunye nokutyhala kwinkosi, ngaphandle kokuba kukho umgca othile kumyalezo wokuzibophelela,
  • ukuthumela iipakethe ezakhiweyo kwisondlo sabucala kwi-Azure DevOps,
  • indibano yamaxwebhu kunye nopapasho kumaphepha eGitLab,
  • iibheji!11

Iimfuno ezichaziweyo ziwela kwimodeli yombhobho ilandelayo:

  • Inqanaba 1 - indibano
    • Siqokelela ikhowudi, sipapashe iifayile zemveliso njengezinto zakudala
  • Inqanaba 2 - uvavanyo
    • Sifumana izinto zakudala ukusuka kwinqanaba lokwakha, qhuba iimvavanyo, uqokelele idatha yokugubungela ikhowudi
  • Inqanaba lesi-3 - Ngenisa
    • Umsebenzi 1 - yakha iphakheji ye-nuget kwaye uyithumele kwi-Azure DevOps
    • Umsebenzi wesi-2 - siqokelela isayithi kwi-xmldoc kwikhowudi yomthombo kwaye siyipapashe kumaphepha eGitLab

Masiqalise!

Ukuqokelela ubumbeko

Ukulungiselela iiakhawunti

  1. Yenza iakhawunti kwi Microsoft Azure

  2. Yiya e Yenza i-DevOps

  3. Senza iprojekthi entsha

    1. Igama - nayiphi na
    2. Ukubonakala - nayiphi na
      Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

  4. Xa ucofa kwi Yenza iqhosha, iprojekthi iya kwenziwa kwaye uya kuhanjiswa kwiphepha layo. Kweli phepha, unokukhubaza izinto ezingeyomfuneko ngokuya kuseto lweprojekthi (ikhonkco elisezantsi kuluhlu olusekhohlo -> Umboniso -> Iinkonzo ze-Azure DevOps block)
    Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

  5. Yiya kwi-Atrifacts, cofa Yenza ifidi

    1. Ngenisa igama lomthombo
    2. Khetha ukubonakala
    3. Susa uqwalaselo Bandakanya iipakethe ezivela kwimithombo yoluntu eqhelekileyo, ukuze umthombo ungajiki ube yi-dump nuget clone
      Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

  6. Cofa uQhagamshela ukondla, khetha Isitudiyo esiBonakalayo, khuphela uMthombo kwibhloko yokuSeta umatshini
    Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

  7. Yiya kwiisetingi zeakhawunti, khetha iToken yoFikelelo loBuqu
    Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

  8. Yenza ithokheni entsha yokufikelela

    1. Igama - ngokungenasizathu
    2. Umbutho - Ngoku
    3. Ivumeleke ubuninzi bonyaka om-1
    4. Ububanzi - Ukupakishwa/Funda & Bhala
      Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

  9. Khuphela umqondiso owenziweyo - emva kokuba ifestile yemodal ivaliwe, ixabiso aliyi kufumaneka

  10. Yiya kwindawo yokugcina kwi-GitLab, khetha useto lweCI / CD
    Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

  11. Yandisa ibhloko yeeGuquguquko, yongeza entsha

    1. Igama - nayiphi na ngaphandle kwezithuba (iya kufumaneka kwiqokobhe lomyalelo)
    2. Ixabiso - ithokheni yokufikelela kumhlathi we-9
    3. Khetha ukwahluka kweMaski
      Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

Oku kugqiba uqwalaselo lwangaphambili.

Ukulungisa isakhelo soqwalaselo

Ngokungagqibekanga, ubumbeko lweCI/CD kwiGitLab isebenzisa ifayile .gitlab-ci.yml ukusuka kwingcambu yendawo yokugcina. Ungacwangcisa umendo ongekho mthethweni kule fayile kwizicwangciso zokugcina, kodwa kulo mzekelo akukho mfuneko.

Njengoko unokubona kwisandiso, ifayile iqulethe uqwalaselo kwifomathi YAML. Amaxwebhu aneenkcukacha zeziphi izitshixo ezinokuqulathwa kumgangatho ophezulu woqwalaselo, nakwinqanaba ngalinye elibekwe kwindlwane.

Okokuqala, masenze ikhonkco kumfanekiso wedoki kwifayile yoqwalaselo, apho kuya kwenziwa khona imisebenzi. Kule nto siyifumana .Iphepha lemifanekiso yeNet Core kwiDocker Hub. Ku GitHub kukho isikhokelo esineenkcukacha malunga nokuba ngowuphi umfanekiso ongawukhetha kwimisebenzi eyahlukeneyo. Umfanekiso one-.Net Core 3.1 ifanelekile ukuba siwakhe, ngoko zive ukhululekile ukongeza umgca wokuqala kuqwalaselo.

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

Ngoku, xa umbhobho uqaliswa ukusuka kwindawo yokugcina imifanekiso yeMicrosoft, umfanekiso ochaziweyo uya kukhutshelwa, apho yonke imisebenzi esuka kuqwalaselo iya kuphunyezwa.

Isinyathelo esilandelayo kukongeza uqeqesho's. Ngokungagqibekanga, iGitLab ichaza izigaba ezi-5:

  • .pre - yenziwe kuwo onke amanqanaba,
  • .post -yenziwe emva kwazo zonke izigaba,
  • build - kuqala emva .pre iqonga,
  • test - isigaba sesibini,
  • deploy - inqanaba lesithathu.

Akukho nto ikuthintelayo ukuba uzichaze ngokucacileyo, nangona kunjalo. Indlela amanyathelo adweliswe ngayo ichaphazela indlela enziwa ngayo. Ukugqibelela, masongeze kuqwalaselo:

stages:
  - build
  - test
  - deploy

Ukulungisa ingxaki, kuyavakala ukufumana ulwazi malunga nokusingqongileyo apho imisebenzi yenziwa khona. Masidibanise uluhlu lwemiyalelo yehlabathi eya kwenziwa phambi komsebenzi ngamnye nge before_script:

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

Kuhlala ukongeza ubuncinane umsebenzi omnye ukwenzela ukuba xa ukuthunyelwa kuthunyelwe, umbhobho uya kuqala. Okwangoku, masidibanise umsebenzi ongenanto ukubonisa:

dummy job:
  script:
    - echo ok

Siqala ukuqinisekiswa, sifumana umyalezo wokuba yonke into ilungile, siyazibophelela, sityhala, sijonge iziphumo kwisayithi ... Kwaye sifumana impazamo yeskripthi - bash: .PSVersion: command not found. wtf?

Yonke into isengqiqweni-ngokungagqibekanga, iimbaleki (zinoxanduva lokuphumeza izikripthi zomsebenzi kwaye zibonelelwe yiGitLab) sebenzisa bash ukwenza imiyalelo. Ungalungisa oku ngokuchaza ngokucacileyo kwinkcazo yomsebenzi ukuba zeziphi iithegi umgijimi osebenzayo wombhobho afanele ukuba nazo:

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

Kakhulu! Umbhobho uyasebenza ngoku.

Umfundi onomdla, emva kokuphindaphinda amanyathelo abonakalisiweyo, uya kuqaphela ukuba umsebenzi ugqityiwe kwinqanaba test, nangona singasichazanga iqonga. Njengoko unokuthelekelela test linyathelo elimiselweyo.

Masiqhubeke nokwenza uqwalaselo lwamathambo ngokongeza yonke imisebenzi echazwe ngasentla:

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

Sinendlela engasebenziyo ngokukodwa, kodwa nangona kunjalo umbhobho ochanekileyo.

Ukuseta izichukumisi

Ngenxa yokuba akukho zihluzi ze-trigger zichaziweyo kuyo nayiphi na imisebenzi, umbhobho uya kwenza ngokupheleleyo senziwa ngalo lonke ixesha isibophelelo sityhalelwa kwindawo yokugcina. Ukusukela oku ingeyiyo indlela yokuziphatha enqwenelekayo ngokubanzi, sizakucwangcisa izihluzi zemisebenzi.

Izihluzi zinokumiselwa kwiifomathi ezimbini: kuphela/ngaphandle ΠΈ Mithetho. Ngokufutshane, only/except ikuvumela ukuba uqwalasele izihluzi ngezitshisi (merge_request, umzekelo - ubeka umsebenzi oza kuphunyezwa ngalo lonke ixesha isicelo sokutsalwa sisenziwa kwaye lonke ixesha ukuzinikela kuthunyelwa kwisebe elingumthombo kwisicelo sokudibanisa) kunye namagama esebe (kubandakanywa nokusetyenziswa kweentetho eziqhelekileyo); rules ikuvumela ukuba wenze uluhlu lweemeko kwaye, ngokukhetha, utshintshe imeko yokwenziwa komsebenzi ngokuxhomekeke kwimpumelelo yemisebenzi yangaphambili (when kwiGitLab CI/CD).

Masikhumbule isethi yeemfuno - ukudibanisa kunye nokuvavanya kuphela isicelo sokudibanisa, ukupakishwa kunye nokuthumela kwi-Azure DevOps - ukudibanisa isicelo kunye nokutyhala kwinkosi, ukuveliswa kwamaxwebhu - ukutyhala kwinkosi.

Okokuqala, makhe simise umsebenzi wokwakha ikhowudi ngokongeza umthetho otshisa kuphela kwisicelo sokudibanisa:

build job:
  # snip
  only:
    - merge_request

Ngoku makhe sisete umsebenzi wokupakisha umlilo kwisicelo sokudibanisa kwaye songeze ukuzinikela kwinkosi:

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

Njengoko ubona, yonke into ilula kwaye ithe ngqo.

Unokuseta umsebenzi ukuba utshise kuphela ukuba isicelo sokudibanisa senziwa kunye nethagethi ethile okanye isebe lomthombo:

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

Ngaphantsi kweemeko, ungasebenzisa ezahlukeneyo ezidweliswe apha; imithetho rules ayihambelani nemithetho only/except.

Ukuqwalasela ukugcinwa kweArtifact

Ngexesha lomsebenzi build job siya kuba nezinto zokwakha ezinokuphinda zisetyenziswe kwimisebenzi elandelayo. Ukwenza oku, kufuneka udibanise umendo kuqwalaselo lomsebenzi, iifayile oya kuzifuna ukugcina nokusebenzisa kwakhona kule misebenzi ilandelayo, kwisitshixo. artifacts:

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

Iindlela zixhasa amakhadi asendle, nto leyo eyenza kube lula ukuseta.

Ukuba umsebenzi udala ii-artifacts, ngoko umsebenzi ngamnye olandelayo uya kukwazi ukufikelela kuzo - ziya kubekwa ecaleni kwendlela efanayo ngokunxulumene nengcambu yogcino oluqokelelwe kumsebenzi wokuqala. Ii-artifacts nazo ziyafumaneka ukuze zikhutshelwe kwisiza.

Ngoku ukuba sinesakhelo soqwalaselo silungile (kwaye sivavanyiwe), sinokuqhubeka sibhale ngokwenene izikripthi zemisebenzi.

Sibhala imibhalo

Mhlawumbi, kanye ngexesha, kwi-galaxy ekude, ekude, iiprojekthi zokwakha (kubandakanywa ne-.net) ukusuka kumgca womyalelo wawubuhlungu. Ngoku unokwakha, uvavanye kwaye upapashe iprojekthi kumaqela ama-3:

dotnet build
dotnet test
dotnet pack

Ngokwemvelo, kukho ezinye ii-nuances ngenxa yokuba siya kuyenza nzima imiyalelo ngandlel 'ithile.

  1. Sifuna ukukhululwa kokwakhiwa, kungekhona ukwakhiwa kwe-debug, ngoko songeza kumyalelo ngamnye -c Release
  2. Xa sivavanya, sifuna ukuqokelela idatha yokugubungela ikhowudi, ngoko ke kufuneka sibandakanye umhlalutyi wokugubungela kumathala eencwadi ovavanyo:
    1. Yongeza ipakethe kuzo zonke iilayibrari zovavanyo coverlet.msbuild: dotnet add package coverlet.msbuild ukusuka kwifolda yeprojekthi
    2. Yongeza kumyalelo wokuqhuba uvavanyo /p:CollectCoverage=true
    3. Yongeza isitshixo kuqwalaselo lomsebenzi wovavanyo ukufumana iziphumo zokhuselo (jonga ngezantsi)
  3. Xa upakisha ikhowudi kwiipakethe ze-nuget, seta isilawuli semveliso yeepakethe: -o .

Ukuqokelela idatha yekhowudi

Emva kokuqhuba iimvavanyo, ushicilelo lwe-Coverlet luqhuba izibalo kwikhonsoli:

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 ukuba uchaze intetho eqhelekileyo ukufumana izibalo, ezinokufunyanwa ngokohlobo lwebheji. Intetho eqhelekileyo ichaziwe kwizicwangciso zomsebenzi ngeqhosha coverage; intetho mayiqulathe iqela lokubamba, ixabiso eliya kudluliselwa kwibheji:

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

Apha sifumana iinkcukacha-manani ukusuka kumgca onobubanzi obupheleleyo.

Papasha iipakethe kunye namaxwebhu

Zombini ezi zenzo zicwangciselwe inqanaba lokugqibela lombhobho - ekubeni indibano kunye neemvavanyo zidlulile, sinokwabelana ngophuhliso lwethu nehlabathi.

Okokuqala, qwalasela ukupapasha kumthombo wephakheji:

  1. Ukuba iprojekthi ayinayo ifayile yoqwalaselo ye-nuget (nuget.config), yenza entsha: dotnet new nugetconfig

    Yantoni: umfanekiso unganakho ukufikelela ekubhaleni kuqwalaselo lwehlabathi (umsebenzisi kunye nomatshini). Ukuze singabambi iimpazamo, senza nje uqwalaselo olutsha lwasekhaya kwaye sisebenze nalo.

  2. Masidibanise umthombo omtsha wephakheji kuqwalaselo lwasekhaya: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - Igama lomthombo wengingqi, alibalulekanga
    2. url -I-URL yomthombo ukusuka kwinqanaba elithi "Ukulungiselela ii-akhawunti", iphe
    3. organization - igama lombutho kwi-Azure DevOps
    4. gitlab variable - igama lenguqu kunye nethokheni yokufikelela eyongeziweyo kwi-GitLab ("Ukulungiselela ii-akhawunti", iphe. 11). Ngokwemvelo, kwifomathi $variableName
    5. -StorePasswordInClearText - i-hack yokugqitha impazamo eyaliwe yokufikelela (Andiqali ukunyathela le rakhi)
    6. Kwimeko yeempazamo, kunokuba luncedo ukongeza -verbosity detailed
  3. Ukuthumela ipakethe kumthombo: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Sithumela zonke iipakethe kuluhlu lwangoku, ngoko *.nupkg.
    2. name - ukusuka kwinqanaba eliphezulu.
    3. key - nawuphi na umgca. Kwi-Azure DevOps, kwi-Connect to feed window, umzekelo uhlala umgca az.
    4. -skipduplicate - xa uzama ukuthumela iphakheji esele ikhona ngaphandle kwesi sitshixo, umthombo uya kubuyisela impazamo 409 Conflict; ngesitshixo, ukuthumela kuya kutsitywa.

Ngoku makhe sisete ukuyilwa kwamaxwebhu:

  1. Okokuqala, kwindawo yokugcina, kwisebe elikhulu, siqalisa iprojekthi ye-docFX. Ukwenza oku, sebenzisa umyalelo osuka kwingcambu docfx init kunye nokuseta ngokudibeneyo iiparamitha eziphambili zokwakhiwa kwamaxwebhu. Inkcazo eneenkcukacha yobuncinci bokusekwa kweprojekthi apha.
    1. Xa uqwalasela, kubalulekile ukukhankanya uvimba weefayili wemveliso ..public - I-GitLab ngokungagqibekanga ithatha imixholo yesiqulathi seefayili sikawonke-wonke kwingcambu yendawo yokugcina njengomthombo waMaphepha. Ngokuba iprojekthi iya kubekwa kwifolda ebekwe kwindawo yokugcina - yongeza imveliso kwinqanaba phezulu kwindlela.
  2. Masityhale utshintsho kwiGitLab.
  3. Yongeza umsebenzi kuqwalaselo lombhobho pages (igama eligciniweyo lemisebenzi yokupapasha indawo kumaphepha eGitLab):
    1. Ushicilelo:
      1. nuget install docfx.console -version 2.51.0 -fakela i-docfx; uguqulelo luxeliwe ukuqinisekisa ukuba iindlela zofakelo lwempahla zichanekile.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ukuqokelela amaxwebhu
    2. Ii-artifacts zeNode:

pages:
  # snip
  artifacts:
    paths:
      - public

Uqhawulo lweengoma malunga ne-docx

Ngaphambili, xa ndiseta iprojekthi, ndachaza umthombo wekhowudi yamaxwebhu njengefayile yesisombululo. Eyona nto ingalunganga kukuba uxwebhu lwenziwe kwiiprojekthi zovavanyo. Kwimeko apho oku akuyomfuneko, ungabeka eli xabiso kwindawo metadata.src:

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

  1. metadata.src.src: "../" - sihamba kwinqanaba elinye ukuya kwindawo docfx.json, ngokuba kwiipateni, ukukhangela umthi wolawulo akusebenzi.
  2. metadata.src.files: ["**/*.csproj"] - ipateni yehlabathi, siqokelela zonke iiprojekthi ze-C # kuzo zonke iirejista.
  3. metadata.src.exclude: ["*.tests*/**"] -ipateni yehlabathi, ungabandakanyi yonke into kwiifolda ezine .tests Kwisihloko

Ixabiso lilonke

Ulungelelwaniso olulula olunjalo lunokwenziwa kwisiqingatha seyure kunye neekomityi ezimbalwa zekofu, eziza kukuvumela ukuba ukhangele ukuba ikhowudi yakhiwe kwaye iimvavanyo zidlula, ukwakha iphakheji entsha, ukuhlaziya uxwebhu kwaye ukholise iliso ngobuhle. iibheji kwi-README yeprojekthi kunye nesicelo sokudibanisa ngasinye kunye nokuthumela kumphathi.

Okokugqibela .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

Ukuthetha ngeebheji

Ngenxa yabo, emva koko, yonke into yaqalwa!

Iibheji ezinesimo semibhobho kunye nekhowudi egqunyiweyo ziyafumaneka kwi-GitLab kwiisetingi ze-CI/CD kwibhloko yemibhobho ye-Gtntral:

Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

Ndenze ibheji enekhonkco kumaxwebhu eqongeni Izihlangu.io -yonke into ithe ngqo apho, unokwenza ibheji yakho kwaye uyifumane usebenzisa isicelo.

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

Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

I-Azure DevOps Artifacts ikwakuvumela ukuba wenze iibheji zeepakethi ezinohlobo lwamva nje. Ukwenza oku, kumthombo kwindawo ye-Azure DevOps, kufuneka ucofe kwi-Yenza ibheji yephakheji ekhethiweyo kwaye ukope uphawu lokuphawula:

Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

Isikhokelo kwi-CI/CD kwi-GitLab yomqali (phantse) ogqibeleleyo

Ukongeza ubuhle

Ukuqaqambisa amaqhekeza oLungiselelo oluqhelekileyo

Ngelixa ndibhala uqwalaselo kunye nokukhangela kuxwebhu, ndifumene into enomdla ye-YAML- iphinda isebenzise amaqhekeza.

Njengoko unokubona kwiisetingi zomsebenzi, zonke zifuna ithegi windows kwimbaleki, kwaye ziqhutywa xa isicelo sokudibanisa sithunyelwa kumphathi/owenziweyo (ngaphandle kwamaxwebhu). Makhe songeze oku kwisiqwenga esiya kuphinda sisebenzise:

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

Kwaye ngoku sinokufaka isiqwenga esichazwe ngaphambili kwinkcazo yomsebenzi:

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

Amagama amaqhekeza kufuneka aqale ngechaphaza, ukuze angatolikwa njengomsebenzi.

Uguqulelo lwepakethi

Xa udala ipakethe, umqokeleli uhlola umgca womyalelo wokutshintsha, kwaye ngokungabikho kwabo, iifayile zeprojekthi; xa ifumana indawo yoguqulelo, ithatha ixabiso layo njengoguqulelo lwempahla eyakhiwayo. Kuyavela ukuba ukuze wakhe ipakethe ngenguqulelo entsha, kufuneka uyihlaziye kwifayile yeprojekthi okanye uyidlulise njengengxoxo yomgca womyalelo.

Makhe songeze olunye uluhlu lomnqweno yimfumba - vumela amanani amabini amancinci kuguqulelo abe ngunyaka kwaye sakhe umhla wephakheji, kwaye wongeze iinguqulelo zangaphambili. Ngokuqinisekileyo, unokongeza le datha kwifayile yeprojekthi kwaye ukhangele phambi kokungeniswa ngalunye - kodwa ungayenza kwakhona kumbhobho, ukuqokelela inguqulo yephakheji ukusuka kumxholo kwaye uyidlulise kwingxabano yomgca womyalelo.

Masivume ukuba ukuba umyalezo wokuzibophelela uqulethe umgca onje release (v./ver./version) <version number> (rev./revision <revision>)?, emva koko siya kuthatha uguqulelo lwepakethe kulo mgca, songezelele ngomhla wangoku kwaye siwugqithise njengengxabano kumyalelo. dotnet pack. Ukungabikho komgca, asiyi kuqokelela iphakheji.

Okushicilelweyo kulandelayo kuyisombulula le ngxaki:

# рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для поиска строки с вСрсиСй
$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

Ukongeza iskripthi kumsebenzi pack and deploy job kwaye ujonge indibano yeepakethe ngokungqongqo phambi komtya onikiweyo kumyalezo wokuzibophelela.

Iyonke

Emva kokuchitha malunga nesiqingatha seyure okanye iyure ubhala ulungelelwaniso, ukulungisa ingxaki kwi-powershell yendawo kwaye, mhlawumbi, ukusungulwa okumbalwa okungaphumelelanga, sifumene ulungelelwaniso olulula lwemisebenzi yesiqhelo ezenzekelayo.

Ewe kunjalo, iGitLab CI / CD ibanzi kakhulu kwaye inamacala amaninzi kunokuba inokubonakala emva kokufunda esi sikhokelo - ayonyani kwaphela. Kukho kwakhona I-Auto DevOps yiukuvumela

Fumana ngokuzenzekelayo, wakhe, uvavanye, usasaze kwaye ubeke iliso kwizicelo zakho

Ngoku izicwangciso kukuqulunqa umbhobho wokuhambisa izicelo kwi-Azure, usebenzisa i-Pulumi kwaye unqume ngokuzenzekelayo indawo ekujoliswe kuyo, eya kubandakanywa kwinqaku elilandelayo.

umthombo: www.habr.com

Yongeza izimvo