Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

Ama sidaad ugu heli lahayd calaamado qurux badan mashruucaaga hal fiid oo si fudud codayntu u socoto

Malaha, horumariye kasta oo leh ugu yaraan hal mashruuc xayawaan ah mararka qaarkood wuxuu leeyahay cuncun ku saabsan calaamado qurux badan oo leh statuses, code cover, versions pack in nuget ... Oo cuncunkani wuxuu ii horseeday inaan qoro maqaalkan. Isku diyaarinta qoraalkeeda, waxaan ka helay quruxdan mid ka mid ah mashaariicdayda:

Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

Maqaalkani wuxuu ku dhex socon doonaa habka aasaasiga ah ee isdhexgalka joogtada ah iyo gaarsiinta mashruuca maktabadda fasalka Net Core ee GitLab, daabacaadda dukumeentiyada Bogagga GitLab, iyo riixida baakadaha la dhisay quudinta gaarka ah ee Azure DevOps.

VS Code waxaa loo isticmaalay sidii deegaanka horumarinta ee kordhinta Socodka shaqada ee GitLab (si loo ansixiyo faylka dejinta si toos ah deegaanka horumarinta).

Hordhac kooban

CD - ma marka aad kaliya riixday, oo wax walba ay mar hore ku dhaceen macmiilka?

Waa maxay CI / CD iyo sababta aad ugu baahan tahay - si fudud ayaad u geli kartaa google. Soo hel dukumeenti dhamaystiran oo ku saabsan habaynta dhuumaha gudaha GitLab sidoo kale fudud. Halkan waxaan si kooban iyo, haddii ay suurtogal tahay, iyada oo aan cillad lahayn ku tilmaami doonaa habka nidaamka marka loo eego aragtida shimbiraha:

  • horumariyahu waxa uu u soo diraa ballan qaadka kaydka, waxa uu ka abuuraa codsi isku darka goobta, ama si kale, si cad ama si aan toos ahaynba u bilaaba dhuumaha,
  • Dhammaan hawlaha waxaa laga soo xulay qaabeynta, shuruudaha u oggolaanaya in lagu bilaabo macnaha guud,
  • hawlaha waxaa loo habeeyey iyadoo loo eegayo heerarkooda.
  • marxaladaha ayaa la fuliyaa markooda - i.e. isbarbar socda Dhammaan hawlaha marxaladdan waa la dhammaystiray,
  • haddii marxaladda ay fashilanto (ie, ugu yaraan mid ka mid ah hawlaha marxaladda), dhuumaha ayaa istaaga (ku dhawaad ​​had iyo jeer),
  • haddii dhammaan heerarka si guul leh loo dhammeeyo, dhuumaha waxaa loo arkaa mid guul leh.

Haddaba, waxaanu leenahay:

  • dhuumaha - hawlo loo habeeyey oo loo habeeyey heerar aad ku dhisi karto, tijaabin karto, koodhka xidhmo, geyn karto dhisme dhammaatay adeegga daruuraha, iwm.
  • Marxalad (stage) - Unugga ururka dhuumaha, oo ka kooban 1+ hawl;
  • hawl (shaqo) waa unug shaqo oo dhuumaha ku jira. Waxa ay ka kooban tahay qoraal (qasab ah), shuruudaha bilaabista, habaynta daabacaadda/caching artifacts, iyo wax ka badan.

Sidaa darteed, hawshu marka la dejinayo CI / CD waxay ku soo degtaa abuurista hawlo shaqo oo fulinaya dhammaan tallaabooyinka lagama maarmaanka u ah dhismaha, tijaabinta iyo daabacaadda koodka iyo agabka.

Kahor intaadan bilaabin: waayo?

  • Waa maxay sababta Gitlab?

Sababtoo ah markii ay lagama maarmaan noqotay in la abuuro meelo gaar ah oo loogu talagalay mashaariicda xayawaanka, waxaa lagu bixiyay GitHub, aniguna waan hunguri jiray. Kaydyadu waxay noqdeen bilaash, laakiin ilaa hadda tani maaha sabab igu filan oo aan ugu guuro GitHub.

  • Waa maxay sababta aysan Azure DevOps Tubooyinka?

Sababtoo ah halkaas goobtu waa dugsi hoose - aqoonta khadka taliska xitaa looma baahna. Isdhexgalka bixiyayaasha git dibadda - dhowr jeer oo gujis ah, soo dejinta furayaasha SSH si loogu diro ballan-qaadyada bakhaarka - sidoo kale, dhuumaha si fudud ayaa loo habeeyaa xitaa ma aha qaab qaabaysan.

Booska bilowga: waxa aad hayso iyo waxa aad rabto

Waxaan leenahay:

  • kaydka GitLab.

Waxaan rabnaa:

  • isu imaatinka iyo tijaabinta codsi kasta oo isku darka,
  • xirmooyinka dhismaha ee codsi kasta oo isku-dhafka ah iyo riixitaanka sayidkiisa, waase haddii uu jiro xariiq gaar ah fariinta ballan-qaadka,
  • u diraya baakado la dhisay quud gaar ah oo ku yaal Azure DevOps,
  • ururinta dukumeentiyada iyo daabacaadda ee Bogagga GitLab,
  • calaamado!11

Shuruudaha la sharraxay waxay si dabiici ah ugu dhacaan qaabka dhuumaha ee soo socda:

  • Marxaladda 1 - ururinta
    • Waxaan aruurineynaa koodka, u daabacnaa faylasha wax soo saarka sida farshaxan
  • Marxaladda 2 - tijaabinta
    • Waxaan ka helnaa farshaxanno marxaladda dhismaha, wadnaa imtixaannada, ururinta xogta caymiska
  • Marxaladda 3 - Gudbi
    • Hawsha 1 - dhis xidhmada nuget oo u dir Azure DevOps
    • Hawsha 2 - waxaanu ka soo ururinay bogga xmldoc ee koodhka isha waxaanan ku daabacnay Bogagga GitLab

Aan bilowno!

Ururinta qaabeynta

Diyaarinta xisaabaadka

  1. Ku samee akoon gudaha Microsoft Azure

  2. Tag DevOps Azure

  3. Waxaan abuurnaa mashruuc cusub

    1. Magaca - mid kasta
    2. Muuqashada - mid kasta
      Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

  4. Markaad gujiso badhanka Abuur, mashruuca ayaa la abuuri doonaa waxaana laguu wareejin doonaa boggiisa. Boggaan, waxaad joojin kartaa astaamaha aan loo baahnayn adiga oo aadaya goobaha mashruuca (xidhiidhka hoose ee liiska bidixda -> Dulmar -> Adeegyada Azure DevOps block)
    Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

  5. Tag Astaamaha, dhagsii Abuur feed

    1. Geli magaca isha
    2. Dooro muuqaal
    3. Iska saar Ku dar baakadaha laga helo ilo dadweyne oo caadi ah, si aanay ilku isu beddelin nuget clone daadsan
      Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

  6. Guji Connect si aad u quudiso, dooro Visual Studio, koobbi Source ka block Setup Machine
    Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

  7. Aad goobaha koontada, dooro Token Helitaanka Shakhsi ahaaneed
    Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

  8. Samee calaamad gelitaanka cusub

    1. Magaca - sabab la'aan
    2. Ururka - hadda
    3. Shaqeynaya ugu badnaan 1 sano
    4. Baaxadda - Baakaynta/Akhrinta & Qorista
      Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

  9. Nuqul ka samee calaamada la sameeyay - ka dib marka daaqada modalku xidho, qiimihiisu lama heli doono

  10. Tag goobaha kaydka ee GitLab, dooro goobaha CI/CD
    Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

  11. Kordhi blockka Variables, ku dar mid cusub

    1. Magaca - mid kasta oo aan bannaanayn (waxaa lagu heli karaa qolofka taliska)
    2. Qiimaha - calaamada gelitaanka ee cutubka 9
    3. Dooro doorsoome maaskaro
      Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

Tani waxay dhamaystiraysaa habaynta ka hor.

Diyaarinta qaabka qaabeynta

Sida caadiga ah, qaabeynta CI/CD ee GitLab waxay isticmaashaa faylka .gitlab-ci.yml laga bilaabo xididka kaydka. Waxaad u dejin kartaa waddo aan sabab lahayn faylkan goobaha kaydka, laakiin kiiskan looma baahna.

Sida aad ka arki karto kordhinta, feylku waxa uu ka kooban yahay habayn qaabka YAML. Faahfaahinta dukumeentiyada furayaasha ku jiri kara heerka ugu sarreeya ee qaabeynta, iyo mid kasta oo ka mid ah heerarka buulka.

Marka hore, aan ku darno isku xirka sawirka docker ee faylka qaabeynta, kaas oo hawlaha lagu fulin doono. Tan waxaan u helnaa .Net Core sawirada bogga Docker Hub. The GitHub waxaa jira hage faahfaahsan oo ku saabsan sawirka aad u dooranayso hawlo kala duwan. Sawir leh .Net Core 3.1 ayaa nagu habboon in aan dhisno, markaa waxaad xor u tahay inaad ku darto xariiqda koowaad qaabeynta

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

Hadda, marka dhuumaha laga bilaabo kaydka sawirka Microsoft, sawirka la cayimay ayaa la soo dejin doonaa, kaas oo dhammaan hawlaha qaabeynta la fulin doono.

Talaabada xigta waa in lagu daro stages Sida caadiga ah, GitLab wuxuu qeexayaa 5 marxaladood:

  • .pre - la sameeyay ilaa dhammaan heerarka,
  • .post - la sameeyay ka dib dhammaan marxaladaha,
  • build - marka hore ka dib .pre Marxalad,
  • test - wajiga labaad,
  • deploy - marxaladda saddexaad.

Wax kaama diidaya inaad si cad u sheegto, si kastaba ha ahaatee. Sida ay u kala horreeyaan tillaabooyinka loo taxaabay waxay saameeyaan siday u kala horreeyaan. Dhamaystirka, aan ku darno qaabaynta:

stages:
  - build
  - test
  - deploy

Dejinta, waxay macno u leedahay in la helo macluumaadka ku saabsan deegaanka hawlaha lagu fuliyo. Aynu ku darno amarro caalami ah oo la fulin doono ka hor hawl kasta before_script:

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

Waxa hadhay in lagu daro ugu yaraan hal hawl si marka la diro la diro dhuumaha dhuumaha. Hadda, aan ku darno hawl madhan si aan u muujino:

dummy job:
  script:
    - echo ok

Waxaan bilaabeynaa ansaxinta, waxaan helnaa fariin ah in wax walba ay fiican yihiin, waan sameyneynaa, waan riixeynaa, waxaan eegnaa natiijooyinka goobta ... Oo waxaan helnaa qalad qoraal ah - bash: .PSVersion: command not found. wtf?

Wax walba waa macquul - asal ahaan, orodyahannada (mas'uul ka ah fulinta qoraallada hawsha oo ay bixiso GitLab) isticmaal bash in la fuliyo amarada. Waxa aad tan ku hagaajin kartaa adiga oo si cad u qeexaya sharraxaadda hawsha waxa ay tahay in uu yeesho orodyahanka dhuumaha fulinaya:

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

Wayn! Dhuumaha ayaa hadda socda.

Akhristaha fiiro gaar ah leh, markuu ku celceliyo tillaabooyinka la tilmaamay, wuxuu ogaan doonaa in hawshu ay ku dhammaatay marxaladda test, inkastoo aynaan cayimin marxaladda. Sida aad qiyaasi karto test waa tillaabada caadiga ah.

Aynu sii wadno abuurista qalfoofka qaabaynta annagoo ku darayna dhammaan hawlaha kor lagu tilmaamay:

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

Waxaan helnay dhuumo aan si gaar ah u shaqayn, laakiin si kastaba ha ahaatee dhuumo sax ah.

Dejinta kiciyeyaasha

Sababtoo ah xaqiiqda ah in aan filtarrada kicinta loo cayimin mid ka mid ah hawlaha, dhuumaha ayaa doona si buuxda la fuliyo mar kasta oo ballan lagu riixo bakhaarka. Maaddaama tani aysan ahayn hab-dhaqanka la rabo guud ahaan, waxaanu dejin doonaa filtarrada kiciya ee hawlaha.

Filters waxa loo habayn karaa laba qaab: kaliya/marka laga reebo ΠΈ xeerarka. Si kooban, only/except Waxay kuu ogolaanaysaa inaad ku habayso filtarrada by kiciyeyaasha (merge_request, tusaale ahaan - wuxuu dejiyaa hawsha la fulinayo mar kasta oo codsi jiidis ah la sameeyo iyo mar kasta oo la go'aamiyo loo diro laanta isha ku haysa codsiga isku-dhafka ah) iyo magacyada laanta (oo ay ku jiraan isticmaalka tibaaxaha caadiga ah); rules Waxay kuu ogolaanaysaa inaad habayso shuruudo iyo, ikhtiyaar ahaan, beddelo xaaladda fulinta hawsha iyadoo ku xiran guusha hawlihii hore (when gudaha GitLab CI/CD).

Aynu dib u soo celinno shuruudo - ururinta iyo tijaabinta kaliya ee codsiga isku-dhafka, baakadaha iyo u dirida Azure DevOps - codsiga isku-dhafka iyo riixitaanka sayidkii, jiilka dukumeenti - riixitaanka sayidkiisa.

Marka hore, aynu dejinno hawsha kood-dhisidda annagoo ku darayna xeer dab ka kacaya marka la codsado isku-darka oo keliya:

build job:
  # snip
  only:
    - merge_request

Hadda aan dejinno hawsha baakadaha si aan u dabcinno codsiga isku-dhafka oo aan ku darno ballan-qaadka sayidkii:

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

Sida aad arki karto, wax walba waa sahlan oo toos ah.

Waxa kale oo aad dajin kartaa hawsha in aad dab ku shido kaliya haddii codsiga isku darka la abuuro bartilmaameed gaar ah ama laan isha:

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

Xaaladaha hoos yimaada, waad isticmaali kartaa doorsoomayaasha halkan ku taxan; xeerar rules aan waafaqsanayn xeerarka only/except.

Dejinta Kaydinta Farshaxanka

Inta ay hawsha socoto build job waxa aanu yeelan doonaa dhismo farshaxan oo dib loogu isticmaali karo hawlaha xiga. Si tan loo sameeyo, waxaad u baahan tahay inaad ku darto waddooyinka habaynta hawsha, faylasha aad u baahan doonto inaad kaydiso oo aad dib ugu isticmaasho hawlaha soo socda, furaha artifacts:

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

Waddooyinku waxay taageeraan kaararka duurjoogta ah, taas oo hubaal ka dhigaysa inay si fudud u dejiyaan.

Haddii hawshu abuurto farshaxan, markaa hawl kasta oo soo socota waxay awood u yeelan doontaa inay galaan - waxay ku yaalaan dariiqyo isku mid ah oo la xidhiidha xididka kaydka ee laga soo ururiyay hawshii asalka ahayd. Farshaxanka ayaa sidoo kale diyaar u ah in laga soo dejiyo goobta.

Hadda oo aan haysanno qaab-dhismeedka qaabeynta oo diyaarsan (oo la tijaabiyay), waxaan sii wadi karnaa inaan si dhab ah u qorno qoraallada hawlaha.

Waxaan qornaa qoraallo

Waxaa laga yaabaa, mar, galaxyo fog, fog, mashaariicda dhismaha (oo ay ku jiraan kuwa .netka) ee khadka taliska ayaa ahaa xanuun. Hadda waxaad dhisi kartaa, tijaabin kartaa oo daabici kartaa mashruuca 3 kooxood:

dotnet build
dotnet test
dotnet pack

Dabiici ahaan, waxaa jira nuances qaar ka mid ah taas oo aan u adkeyn doono amarrada xoogaa.

  1. Waxaan rabnaa dhismo la sii daayo, ma rabno dhismo cillad ah, marka waxaan ku darnaa amar kasta -c Release
  2. Marka aan tijaabineyno, waxaan rabnaa inaan aruurino xogta daboolka koodka, markaa waxaan u baahanahay inaan ku darno falanqeeye caymis maktabadaha imtixaanka:
    1. Ku dar xirmada dhammaan maktabadaha imtixaanka coverlet.msbuild: dotnet add package coverlet.msbuild ka galka mashruuca
    2. Ku dar amarka orodka tijaabada /p:CollectCoverage=true
    3. Ku dar furaha habaynta hawsha tijaabada si aad u hesho natiijooyinka caymiska (hoos eeg)
  3. Markaad ku xidhidayso koodka xirmooyinka nuget, deji buugga wax soo saarka ee xidhmooyinka: -o .

Uruurinta xogta caymiska

Kadib socodsiinta imtixaanada, Coverlet waxay daabacdaa tirakoobyada console-ka:

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% |
+---------+--------+--------+--------+

GitLab wuxuu kuu oggolaanayaa inaad qeexdo odhaah joogto ah si aad u hesho tirakoob, kaas oo markaa lagu heli karo qaab calaamad. Odhaahda caadiga ah waxay ku qeexan tahay goobaha hawsha oo leh furaha coverage; odhaahda waa in ay ka kooban tahay koox la qabsasho, kuwaas oo qiimahooda loo gudbin doono calaamadda:

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

Halkan waxaan ka helnaa tirokoobyo xariiq ah oo leh wadarta daboolida khadka.

Daabac xirmo iyo dukumeenti

Labada ficilba waxaa loo qorsheeyay marxaladda ugu dambeysa ee dhuumaha - tan iyo markii shirkii iyo imtixaanadii la soo dhaafay, waxaan la wadaagi karnaa horumarkayaga adduunka.

Marka hore, tixgeli daabacaadda isha xirmada:

  1. Haddii mashruucu uusan lahayn faylka qaabeynta nuget (nuget.config), samee mid cusub: dotnet new nugetconfig

    Maxay: Sawirku waxa laga yaabaa in aanu u helin qoraal u samaynta caalamiga ah (isticmaalka iyo mishiinka). Si aan loo qaban khaladaadka, waxaan si fudud u abuurnaa qaabeyn cusub oo maxalli ah oo aan la shaqeyno.

  2. Aan ku darno isha xirmo cusub qaabeynta deegaanka: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - Magaca isha deegaanka, maaha mid muhiim ah
    2. url - URL isha laga soo bilaabo marxaladda "Diyaarinta xisaabaadka", bogga 6
    3. organization - Magaca ururka ee Azure DevOps
    4. gitlab variable - magaca doorsoomayaasha leh calaamada gelitaanka ee lagu daray GitLab ("Diyaarinta xisaabaadka", p. 11). Dabcan, qaabka $variableName
    5. -StorePasswordInClearText - jabsi si looga gudbo khaladka gelitaanka loo diiday (Ma ihi qofkii ugu horeeyay ee ku tallaabsada qaadkan)
    6. Haddii ay dhacdo khaladaad, waxaa laga yaabaa inay faa'iido leedahay in lagu daro -verbosity detailed
  3. U diraya xirmada isha: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Waxaan ka soo dirnaa dhammaan baakooyinka buugga hadda jira, sidaas darteed *.nupkg.
    2. name - laga bilaabo tallaabada sare.
    3. key - khad kasta. Gudaha Azure DevOps, daaqada Connect to feed, tusaale ahaan had iyo jeer waa khadka az.
    4. -skipduplicate - Markaad isku daydo inaad dirto xirmo hore u jiray oo aan furahaan lahayn, isha ayaa soo celin doonta qalad 409 Conflict; furaha, diritaanka waa laga boodi doonaa.

Hadda aan dejinno abuurista dukumentiyada:

  1. Marka hore, kaydka, laanta sayidka, waxaanu bilownay mashruuca docfx. Si tan loo sameeyo, ka socodsii amarka xididka docfx init oo si is dhexgal ah u dejiso halbeegyada muhiimka ah ee dukumentiyada dhismaha. Sharaxaad tafatiran ee habaynta mashruuca ugu yar halkan.
    1. Marka la habeynayo, waxaa muhiim ah in la qeexo hagaha wax soo saarka ..public - GitLab si caadi ah waxay u qaadataa waxa ku jira galka dadweynaha ee asalka kaydka sida isha boggaga. Sababtoo ah mashruucu waxa uu ku yaalaa galka buul ku yaal bakhaarka - ku dar wax soo saarka ilaa heerka kor ee wadada.
  2. Aan u riixno isbeddelada GitLab.
  3. Ku dar hawl habaynta dhuumaha pages ( kelmad u kaydsan hawlaha daabacaadda goobta ee Bogagga GitLab):
    1. Qoraal:
      1. nuget install docfx.console -version 2.51.0 - ku rakib docfx; nooca ayaa loo cayimay si loo hubiyo in wadooyinka xirmooyinka xirmada ay sax yihiin.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ururinta dukumentiyada
    2. Farshaxanka noodhka:

pages:
  # snip
  artifacts:
    paths:
      - public

Digression Lyrical ku saabsan docfx

Markii hore, markii la dejinayo mashruuc, waxaan qeexay isha koodhka ee dukumeentiga sida faylka xalalka. Khasaaraha ugu weyni waa in dukumeenti sidoo kale loo sameeyay mashaariicda imtixaannada. Haddii tani aysan lagama maarmaan ahayn, waxaad dejin kartaa qiimahan qanjidhada metadata.src:

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

  1. metadata.src.src: "../" - Waxaan kor u qaadnaa hal heer marka loo eego goobta docfx.json, sababtoo ah qaab ahaan, raadinta geedka hagaha ma shaqeeyo.
  2. metadata.src.files: ["**/*.csproj"] - qaab caalami ah, waxaan ka aruurineynaa dhammaan mashaariicda C # dhammaan hagayaasha.
  3. metadata.src.exclude: ["*.tests*/**"] - hannaanka caalamiga ah, ka saar wax walba faylalka leh .tests In cinwaanka

Subtotal

Qaabeynta fudud ee noocan oo kale ah waxaa lagu abuuri karaa nus saac oo keliya iyo dhowr koob oo qaxwo ah, taas oo kuu ogolaan doonta inaad hubiso in koodhka la dhisay oo imtixaanadu ka gudbaan, dhisaan xirmo cusub, cusbooneysii dukumentiyada oo aad isha ku raaxaystaan ​​​​si qurux badan. calaamado ku yaal README ee mashruuca oo leh codsi kasta oo isku-dar ah oo loo diro sayidkiisa.

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

Isagoo ka hadlaya calaamadaha

Sababtoo ah iyaga, ka dib oo dhan, wax walba waa la bilaabay!

Calaamadaha leh heerarka dhuumaha iyo koodhka daboolida ayaa laga heli karaa GitLab ee goobaha CI/CD ee ku yaal xannibaadda dhuumaha Gtntral:

Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

Waxaan sameeyay calaamad xiriiriye dukumentiyada ku yaal goobta Gaashaaman.io - Wax walba waa toos halkaas, waxaad samayn kartaa calaamad kuu gaar ah oo aad ku heli kartaa codsi.

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

Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

Azure DevOps Artifacts sidoo kale waxay kuu ogolaaneysaa inaad abuurto calaamado xirmo leh nooca ugu dambeeyay. Si tan loo sameeyo, isha ku taal goobta Azure DevOps, waxaad u baahan tahay inaad gujiso Abuur calaamada xirmada la doortay oo koobi ka samee calaamadaynta:

Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

Hagaha CI/CD gudaha GitLab ee (ku dhawaad) bilawga saxda ah

Quruxda ku dara

Muujinta jajabyada Iskudubarid ee Caadiga ah

Markii aan qorayey qaabeynta oo aan ka dhex raadinayo dukumeentiyada, waxaan la kulmay muuqaal xiiso leh oo YAML ah - dib u adeegsiga jajabyada.

Sida aad ka arki karto goobaha hawsha, dhamaantood waxay u baahan yihiin sumadda windows marka la joogo orodyahanka, waxayna kiciyaan marka codsiga isku darka loo diro sayidkii/abuuray (marka laga reebo dukumentiyada). Aynu tan ku darno jajabka aan dib u isticmaali doono:

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

Oo hadda waxaan gelin karnaa jajabkii hore loogu dhawaaqay sharraxaadda hawsha:

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

Magacyada jajabku waa inay ku bilowdaan dhibco, si aan loogu fasirin hawl.

Nooca xirmada

Marka la abuurayo xirmo, isku-dubariduhu waxay hubinayaan khadka taliska, iyo maqnaanshaha, faylasha mashruuca; Marka ay hesho node Version, waxay u qaadanaysaa qiimaheeda sida nooca xirmada ee la dhisayo. Waxay soo baxday in si aad u dhisto xirmo leh nooc cusub, waxaad u baahan tahay inaad ku cusboonaysiiso faylka mashruuca ama aad u gudbiso dood khadka taliska.

Aan ku darno hal liis oo kale - ha noqdaan labada lambar ee yar ee nooca ku jira sanadka iyo dhismaha taariikhda xirmada, oo ku dar noocyada sii daynta. Dabcan, waxaad ku dari kartaa xogtan faylka mashruuca oo hubi ka hor inta aan la soo gudbin - laakiin waxaad sidoo kale ku samayn kartaa dhuumaha, ka soo ururinta nooca xirmada ee macnaha guud oo aad u gudubto doodda khadka taliska.

Aynu ku heshiino in haddii fariinta ballanku ka kooban tahay sadar sida release (v./ver./version) <version number> (rev./revision <revision>)?, ka dib waxaan ka soo qaadan doonaa nooca xirmada khadkan, ku kaabi doona taariikhda hadda jirta oo u gudbin doonaa dood ahaan amarka dotnet pack. Maqnaanshaha khad, si fudud uma ururin doono xirmada.

Qoraalka soo socda ayaa xallinaya dhibaatadan:

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

Ku darida qoraal hawl pack and deploy job oo si adag u ilaali kulanka baakadaha iyadoo ay joogaan xadhig la siiyay fariinta ballanta.

Wadarta

Ka dib markii aan ku qaadanay ku dhawaad ​​nus saac ama saacad qorista qaabeynta, ka saarista awooda deegaanka iyo, suurtogalnimada, dhowr furitaan oo aan lagu guuleysan, waxaan helnay qaabeyn fudud oo otomaatig ah hawlaha caadiga ah.

Dabcan, GitLab CI / CD aad buu u ballaadhan yahay oo dhinacyo badan leh marka loo eego sida ay u ekaan karto ka dib marka la akhriyo hagahan - taasi run maaha. Halkaa xitaa Auto DevOps waaogolaanaya

si otomaatig ah u ogow, u dhis, tijaabi, u dir, oo ula soco codsiyadaada

Hadda qorshuhu waa in la habeeyo dhuumo loogu diro codsiyada Azure, iyadoo la adeegsanayo Pulumi oo si toos ah u go'aaminaysa deegaanka la beegsanayo, kaas oo lagu dabooli doono maqaalka soo socda.

Source: www.habr.com

Add a comment