Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

Jew kif tikseb badges sbieħ għall-proġett tiegħek f'lejla waħda ta 'kodifikazzjoni faċli

Probabbilment, kull żviluppatur li għandu mill-inqas proġett domestiku wieħed f'xi punt għandu ħakk dwar badges sbieħ bi status, kopertura tal-kodiċi, verżjonijiet tal-pakketti f'nuget ... U dan il-ħakk wassalni biex nikteb dan l-artikolu. Bi tħejjija biex niktebha, sibt din is-sbuħija f'wieħed mill-proġetti tiegħi:

Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

Dan l-artikolu ser jimxik permezz tas-setup bażiku ta 'integrazzjoni u kunsinna kontinwi għal proġett ta' librerija tal-klassi .Net Core f'GitLab, jippubblika dokumentazzjoni għal GitLab Pages, u jimbotta pakketti mibnija għal għalf privat f'Azure DevOps.

VS Code intuża bħala l-ambjent ta 'żvilupp bl-estensjoni Fluss tax-Xogħol GitLab (għall-validazzjoni tal-fajl tas-settings direttament mill-ambjent tal-iżvilupp).

Introduzzjoni qasira

CD - huwa meta inti biss imbuttat, u kollox diġà waqa 'fuq il-klijent?

X'inhu CI / CD u għaliex għandek bżonnha - tista 'faċilment google. Sib dokumentazzjoni kompleta dwar il-konfigurazzjoni tal-pipelines f'GitLab faċli wkoll. Hawnhekk ser niddeskrivi fil-qosor u, jekk possibbli, mingħajr difetti, il-proċess tas-sistema minn għajn ta' għasfur:

  • l-iżviluppatur jibgħat impenn lir-repożitorju, joħloq talba għall-għaqda permezz tas-sit, jew b'xi mod ieħor, espliċitament jew impliċitament jibda l-pipeline,
  • il-kompiti kollha jintgħażlu mill-konfigurazzjoni, li l-kundizzjonijiet tagħha jippermettu li jiġu varati fil-kuntest partikolari,
  • il-kompiti huma organizzati skont l-istadji tagħhom,
  • l-istadji huma esegwiti min-naħa tagħhom - i.e. paralleli il-kompiti kollha ta' dan l-istadju jitlestew,
  • jekk l-istadju ifalli (jiġifieri, mill-inqas wieħed mill-kompiti tal-istadju jfalli), il-pipeline jieqaf (kważi dejjem),
  • jekk l-istadji kollha jitlestew b'suċċess, il-pipeline jitqies bħala suċċess.

Għalhekk, għandna:

  • pipeline - sett ta' kompiti organizzati fi stadji li fihom tista' tibni, tittestja, tippakkja kodiċi, tiskjera bini lest għal servizz cloud, eċċ.,
  • stadju (istadju) — unità ta' organizzazzjoni tal-pipeline, fiha 1+ kompitu,
  • kompitu (xogħol) hija unità ta' xogħol fil-pipeline. Tikkonsisti fi skript (obbligatorju), kundizzjonijiet ta 'tnedija, settings għall-pubblikazzjoni/caching ta' artifacts, u ħafna aktar.

Għaldaqstant, il-kompitu meta twaqqaf CI / CD niżel għall-ħolqien ta 'sett ta' kompiti li jimplimentaw l-azzjonijiet kollha meħtieġa għall-bini, l-ittestjar u l-pubblikazzjoni tal-kodiċi u l-artifacts.

Qabel ma tibda: għaliex?

  • Għaliex Gitlab?

Minħabba li meta sar meħtieġ li jinħolqu repożitorji privati ​​għal proġetti domestiċi, dawn tħallsu fuq GitHub, u jien kont greedy. Ir-repożitorji saru ħielsa, iżda s'issa din mhix raġuni biżżejjed biex niċċaqlaq għal GitHub.

  • Għaliex mhux Azure DevOps Pipelines?

Minħabba li hemm l-issettjar huwa elementari - l-għarfien tal-linja tal-kmand lanqas biss huwa meħtieġ. Integrazzjoni ma 'fornituri esterni ta' git - fi ftit klikks, importazzjoni ta 'ċwievet SSH biex tibgħat impenji lir-repożitorju - ukoll, il-pipeline huwa kkonfigurat faċilment anki mhux minn mudell.

Pożizzjoni tal-bidu: dak li għandek u dak li trid

Għandna:

  • repożitorju f'GitLab.

Irridu:

  • assemblaġġ awtomatiku u ttestjar għal kull talba għall-għaqda,
  • bini ta 'pakketti għal kull talba ta' amalgamazzjoni u imbuttar lill-kaptan, sakemm ikun hemm ċerta linja fil-messaġġ ta 'kommit,
  • tibgħat pakketti mibnija lil għalf privat f'Azure DevOps,
  • assemblaġġ ta' dokumentazzjoni u pubblikazzjoni fil-Paġni GitLab,
  • badges!11

Ir-rekwiżiti deskritti organikament jaqgħu fuq il-mudell tal-pipeline li ġej:

  • Stadju 1 - assemblaġġ
    • Aħna niġbru l-kodiċi, nippubblikaw il-fajls tal-output bħala artifacts
  • Stadju 2 - ittestjar
    • Aħna niksbu artifacts mill-istadju tal-bini, imexxu testijiet, niġbru d-dejta tal-kopertura tal-kodiċi
  • Stadju 3 - Issottometti
    • Kompitu 1 - ibni l-pakkett nuget u ibgħatu lil Azure DevOps
    • Kompitu 2 - aħna niġbru s-sit minn xmldoc fil-kodiċi tas-sors u nippubblikawh fil-Paġni GitLab

Ejja nibdew!

Ġbir tal-konfigurazzjoni

Tħejjija ta' kontijiet

  1. Oħloq kont fi Microsoft Azure

  2. Mur fuq Azure DevOps

  3. Noħolqu proġett ġdid

    1. Isem - kwalunkwe
    2. Viżibilità - kwalunkwe
      Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

  4. Meta tikklikkja fuq il-buttuna Oħloq, il-proġett jinħoloq u inti tiġi ridirett lejn il-paġna tiegħu. F'din il-paġna, tista' tiddiżattiva karatteristiċi mhux meħtieġa billi tmur fis-settings tal-proġett (link t'isfel fil-lista fuq ix-xellug -> Ħarsa ġenerali -> Blokk Azure DevOps Services)
    Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

  5. Mur Atrifacts, ikklikkja Oħloq għalf

    1. Daħħal l-isem tas-sors
    2. Agħżel il-viżibilità
    3. Uncheck Inkludi pakketti minn sorsi pubbliċi komuni, sabiex is-sors ma jinbidilx fi klonu dump nuget
      Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

  6. Ikklikkja Qabbad għall-għalf, agħżel Visual Studio, kopja Sors mill-blokka Setup tal-Magni
    Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

  7. Mur fis-settings tal-kont, agħżel Personal Access Token
    Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

  8. Oħloq token ta' aċċess ġdid

    1. Isem - arbitrarju
    2. Organizzazzjoni - Kurrenti
    3. Validu għal massimu ta' sena
    4. Skop - Ippakkjar/Aqra & Kitba
      Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

  9. Ikkopja t-token maħluq - wara li tingħalaq it-tieqa modali, il-valur ma jkunx disponibbli

  10. Mur fis-settings tar-repożitorju f'GitLab, agħżel is-settings tas-CI / CD
    Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

  11. Tespandi l-blokka Varjabbli, żid waħda ġdida

    1. Isem - kwalunkwe mingħajr spazji (se jkun disponibbli fil-qoxra tal-kmand)
    2. Valur - token ta' aċċess mill-paragrafu 9
    3. Agħżel Maskra varjabbli
      Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

Dan itemm il-konfigurazzjoni minn qabel.

Tħejjija tal-qafas tal-konfigurazzjoni

B'mod awtomatiku, il-konfigurazzjoni CI/CD f'GitLab tuża l-fajl .gitlab-ci.yml mill-għerq tar-repożitorju. Tista 'tissettja mogħdija arbitrarja għal dan il-fajl fis-settings tar-repożitorju, iżda f'dan il-każ mhux meħtieġ.

Kif tistgħu taraw mill-estensjoni, il-fajl fih konfigurazzjoni fil-format YAML. Id-dokumentazzjoni tiddettalja liema ċwievet jistgħu jkunu jinsabu fil-livell ta 'fuq tal-konfigurazzjoni, u f'kull wieħed mil-livelli nested.

L-ewwel, ejja nżidu link għall-immaġni docker fil-fajl tal-konfigurazzjoni, li fih se jitwettqu l-kompiti. Għal dan insibu Il-paġna tal-immaġini .Net Core fuq Docker Hub. Fil GitHub hemm gwida dettaljata dwar liema immaġini tagħżel għal kompiti differenti. Immaġini b'.Net Core 3.1 hija adattata biex nibnu, għalhekk tħossok liberu li żżid l-ewwel linja mal-konfigurazzjoni

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

Issa, meta l-pipeline jiġi mniedi mir-repożitorju tal-immaġni ta 'Microsoft, l-immaġni speċifikata se titniżżel, li fiha l-kompiti kollha mill-konfigurazzjoni se jiġu eżegwiti.

Il-pass li jmiss huwa li żżid istadju's. B'mod awtomatiku, GitLab jiddefinixxi 5 stadji:

  • .pre - imwettaq sal-istadji kollha,
  • .post - imwettaq wara l-istadji kollha,
  • build - l-ewwel wara .pre stadju,
  • test - it-tieni fażi,
  • deploy - it-tielet stadju.

Xejn ma jżommek milli tiddikjarahom b'mod espliċitu, madankollu. L-ordni li fiha l-passi huma elenkati taffettwa l-ordni li fiha jitwettqu. Għall-kompletezza, ejja nżidu mal-konfigurazzjoni:

stages:
  - build
  - test
  - deploy

Għad-debugging, jagħmel sens li tinkiseb informazzjoni dwar l-ambjent li fih jitwettqu l-kompiti. Ejja nżidu sett globali ta 'kmandi li se jiġu esegwiti qabel kull kompitu ma before_script:

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

Fadal li żżid mill-inqas kompitu wieħed sabiex meta jintbagħtu l-commits, jibda l-pipeline. Għalissa, ejja nżidu kompitu vojt biex nuru:

dummy job:
  script:
    - echo ok

Nibdew il-validazzjoni, nirċievu messaġġ li kollox huwa tajjeb, nimpenjaw ruħhom, nimbottaw, inħarsu lejn ir-riżultati fuq is-sit ... U nġibu żball fl-iskrittura - bash: .PSVersion: command not found. wtf?

Kollox huwa loġiku - b'mod awtomatiku, runners (responsabbli għall-eżekuzzjoni ta' skripts tal-kompiti u pprovduti minn GitLab) jużaw bash biex tesegwixxi kmandi. Tista' tirranġa dan billi tispeċifika b'mod espliċitu fid-deskrizzjoni tal-kompitu liema tags għandu jkollu l-pipeline runner li jwettaq:

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

Kbir! Il-pipeline issa qed jaħdem.

Qarrej attent, wara li rrepeta l-passi indikati, jinduna li l-kompitu tlesta fl-istadju test, għalkemm ma speċifikajniex l-istadju. Kif tista’ taħsbu test huwa l-pass default.

Ejja nkomplu noħolqu l-iskeletru tal-konfigurazzjoni billi nżidu l-kompiti kollha deskritti hawn fuq:

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

Aħna ltqajna pipeline mhux partikolarment funzjonali, iżda madankollu korrett.

It-twaqqif ta' triggers

Minħabba l-fatt li l-ebda filtri grillu huma speċifikati għal xi kompiti, il-pipeline se kompletament tiġi eżegwita kull darba li kommit jiġi mbuttat fir-repożitorju. Peress li din mhix l-imġieba mixtieqa b'mod ġenerali, aħna se nwaqqfu filtri ta 'attivazzjoni għall-kompiti.

Il-filtri jistgħu jiġu kkonfigurati f'żewġ formati: biss/ħlief и regoli. Fil-qosor, only/except jippermettilek tikkonfigura l-filtri minn triggers (merge_request, per eżempju - jistabbilixxi l-kompitu li għandu jiġi esegwit kull darba li tinħoloq talba ta 'ġibda u kull darba li l-kommessi jintbagħtu lill-fergħa li hija s-sors fit-talba għall-għaqda) u l-ismijiet tal-fergħat (inkluż l-użu ta' espressjonijiet regolari); rules jippermettilek tippersonalizza sett ta' kundizzjonijiet u, b'mod fakultattiv, tibdel il-kundizzjoni tal-eżekuzzjoni tal-kompitu skont is-suċċess tal-kompiti preċedenti (when f'GitLab CI/CD).

Ejja nfakkru sett ta 'rekwiżiti - assemblaġġ u ttestjar biss għal talba ta' amalgamazzjoni, ippakkjar u trażmissjoni lil Azure DevOps - għal talba ta 'għaqda u pushes lill-kaptan, ġenerazzjoni ta' dokumentazzjoni - għal pushes lill-kaptan.

L-ewwel, ejja nwaqqfu l-kompitu tal-bini tal-kodiċi billi żżid regola li tispara biss fuq talba għall-għaqda:

build job:
  # snip
  only:
    - merge_request

Issa ejja nwaqqfu l-kompitu tal-imballaġġ biex jisparaw fuq it-talba tal-għaqda u żid impenji mal-kaptan:

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

Kif tistgħu taraw, kollox huwa sempliċi u dirett.

Tista' wkoll issettja l-kompitu biex jispara biss jekk tinħoloq talba għall-għaqda b'mira speċifika jew fergħa tas-sors:

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

Taħt kundizzjonijiet, tista 'tuża varjabbli elenkati hawn; regoli rules inkompatibbli mar-regoli only/except.

Konfigurazzjoni ta' l-iffrankar ta' l-artifact

Waqt kompitu build job ser ikollna nibnu artifacts li jistgħu jerġgħu jintużaw f'ħidmiet sussegwenti. Biex tagħmel dan, għandek bżonn iżżid il-mogħdijiet għall-konfigurazzjoni tal-kompitu, il-fajls li fuqhom ser ikollok bżonn issalva u tuża mill-ġdid fil-kompiti li ġejjin, maċ-ċavetta artifacts:

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

Il-mogħdijiet jappoġġjaw il-wildcards, li żgur tagħmilhom aktar faċli biex jiġu stabbiliti.

Jekk kompitu joħloq artifacts, allura kull kompitu sussegwenti jkun jista 'jaċċessahom - ikunu jinsabu tul l-istess mogħdijiet relattivi għall-għerq tar-repożitorju li nġabru mill-kompitu oriġinali. Artifacts huma wkoll disponibbli biex jitniżżlu fuq is-sit.

Issa li għandna l-qafas tal-konfigurazzjoni lest (u ttestjat), nistgħu nipproċedu biex fil-fatt niktbu skripts għall-kompiti.

Aħna niktbu skripts

Forsi, darba, f'galaxie 'l bogħod, 'il bogħod, proġetti ta' bini (inklużi dawk fuq .net) mil-linja tal-kmand kien ta 'uġigħ. Issa tista' tibni, tittestja u tippubblika l-proġett fi 3 timijiet:

dotnet build
dotnet test
dotnet pack

Naturalment, hemm xi sfumaturi li minħabba fihom se nikkomplikaw xi ftit il-kmandi.

  1. Irridu build rilaxx, mhux build debug, għalhekk inżidu ma 'kull kmand -c Release
  2. Meta nittestjaw, irridu niġbru d-dejta tal-kopertura tal-kodiċi, għalhekk jeħtieġ li ninkludu analizzatur tal-kopertura fil-libreriji tat-test:
    1. Żid il-pakkett mal-libreriji kollha tat-test coverlet.msbuild: dotnet add package coverlet.msbuild mill-folder tal-proġett
    2. Żid mal-kmand tal-ġirja tat-test /p:CollectCoverage=true
    3. Żid ċavetta għall-konfigurazzjoni tal-kompitu tat-test biex tikseb ir-riżultati tal-kopertura (ara hawn taħt)
  3. Meta tippakkja l-kodiċi f'pakketti nuget, issettja d-direttorju tal-output għall-pakketti: -o .

Il-ġbir tad-dejta dwar il-kopertura tal-kodiċi

Wara li tmexxi t-testijiet, il-prints Coverlet imexxu l-istatistika fuq il-console:

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 jippermettilek li tispeċifika espressjoni regolari biex tikseb statistika, li mbagħad tista 'tinkiseb fil-forma ta' badge. L-espressjoni regolari hija speċifikata fis-settings tal-kompitu biċ-ċavetta coverage; l-espressjoni għandu jkun fiha grupp ta' qbid, li l-valur tiegħu jiġi mgħoddi lill-badge:

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

Hawnhekk inġibu statistika minn linja b'kopertura totali tal-linja.

Ippubblika pakketti u dokumentazzjoni

Iż-żewġ azzjonijiet huma skedati għall-aħħar stadju tal-pipeline - peress li l-assemblaġġ u t-testijiet għaddew, nistgħu naqsmu l-iżviluppi tagħna mad-dinja.

L-ewwel, ikkunsidra li tippubblika fis-sors tal-pakkett:

  1. Jekk il-proġett m'għandux fajl ta' konfigurazzjoni nuget (nuget.config), oħloq waħda ġdida: dotnet new nugetconfig

    Għalxiex: l-immaġni jista' ma jkollhiex aċċess għall-kitba għal konfigurazzjonijiet globali (utent u magna). Sabiex ma naqbdux żbalji, aħna sempliċement noħolqu konfigurazzjoni lokali ġdida u naħdmu magħha.

  2. Ejja nżidu sors ġdid ta' pakkett mal-konfigurazzjoni lokali: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - isem tas-sors lokali, mhux kritiku
    2. url - URL tas-sors mill-istadju "Tħejjija tal-kontijiet", p.6
    3. organization - isem l-organizzazzjoni f'Azure DevOps
    4. gitlab variable - l-isem tal-varjabbli bit-token ta' aċċess miżjud ma' GitLab ("Tħejjija tal-kontijiet", p. 11). Naturalment, fil-format $variableName
    5. -StorePasswordInClearText - Hack biex tevita l-iżball ta' aċċess miċħud (Jien mhux l-ewwel li nimxi fuq dan ir-rake)
    6. F'każ ta 'żbalji, jista' jkun utli li żżid -verbosity detailed
  3. Tibgħat il-pakkett lis-sors: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Aħna nibagħtu l-pakketti kollha mid-direttorju attwali, għalhekk *.nupkg.
    2. name - mill-pass t'hawn fuq.
    3. key - kwalunkwe linja. F'Azure DevOps, fit-tieqa Connect to feed, l-eżempju huwa dejjem il-linja az.
    4. -skipduplicate - meta tipprova tibgħat pakkett diġà eżistenti mingħajr din iċ-ċavetta, is-sors jirritorna żball 409 Conflict; biċ-ċavetta, il-bgħit se jinqabeż.

Issa ejja nwaqqfu l-ħolqien tad-dokumentazzjoni:

  1. L-ewwel, fir-repożitorju, fil-fergħa prinċipali, inizjalizzaw il-proġett docfx. Biex tagħmel dan, mexxi l-kmand mill-għerq docfx init u ssettja b'mod interattiv il-parametri ewlenin għad-dokumentazzjoni tal-bini. Deskrizzjoni dettaljata tas-setup minimu tal-proġett hawn.
    1. Meta tikkonfigura, huwa importanti li tispeċifika d-direttorju tal-output ..public - GitLab b'mod awtomatiku jieħu l-kontenut tal-folder pubbliku fl-għerq tar-repożitorju bħala sors għall-Paġni. Għax il-proġett se jkun jinsab fil-folder nested fil-repożitorju - żid output għal-livell up fil-passaġġ.
  2. Ejja nimbottaw il-bidliet għal GitLab.
  3. Żid kompitu mal-konfigurazzjoni tal-pipeline pages (kelma riservata għall-kompiti tal-pubblikazzjoni tas-sit fil-Paġni GitLab):
    1. Skript:
      1. nuget install docfx.console -version 2.51.0 - tinstalla docfx; il-verżjoni hija speċifikata biex tiżgura li l-mogħdijiet ta 'installazzjoni tal-pakkett huma korretti.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ġbir ta' dokumentazzjoni
    2. Artifacts tan-nodi:

pages:
  # snip
  artifacts:
    paths:
      - public

Digressjoni lirika dwar docfx

Preċedentement, meta twaqqaf proġett, speċifikajt is-sors tal-kodiċi għad-dokumentazzjoni bħala fajl tas-soluzzjoni. L-iżvantaġġ ewlieni huwa li d-dokumentazzjoni tinħoloq ukoll għal proġetti tat-test. F'każ li dan ma jkunx meħtieġ, tista' tissettja dan il-valur għan-node metadata.src:

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

  1. metadata.src.src: "../" - immorru livell wieħed 'il fuq relattiv għall-post docfx.json, għax fil-mudelli, it-tiftix fis-siġra tad-direttorju ma taħdimx.
  2. metadata.src.files: ["**/*.csproj"] - mudell globali, aħna niġbru l-proġetti C # kollha mid-direttorji kollha.
  3. metadata.src.exclude: ["*.tests*/**"] - mudell globali, teskludi kollox minn folders ma .tests Fit-titlu

Subtotal

Konfigurazzjoni sempliċi bħal din tista 'tinħoloq f'nofs siegħa biss u ftit kikkri tal-kafè, li jippermettulek tiċċekkja li l-kodiċi huwa mibni u t-testijiet jgħaddu, tibni pakkett ġdid, taġġorna d-dokumentazzjoni u jekk jogħġbok l-għajn b'sabiħa badges fil-README tal-proġett ma' kull talba ta' amalgamazzjoni u tibgħat lill-kaptan.

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

Taħdit ta badges

Minħabba minnhom, wara kollox, kollox beda!

Badges bi status tal-pipeline u kopertura tal-kodiċi huma disponibbli f'GitLab fis-settings CI/CD fil-blokk tal-pipelines Gtntral:

Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

Ħloqt badge b'link għad-dokumentazzjoni fuq il-pjattaforma Shields.io - kollox huwa pjuttost sempliċi hemmhekk, tista 'toħloq il-badge tiegħek stess u tirċeviha billi tuża talba.

![Пример с Shields.io](https://img.shields.io/badge/custom-badge-blue)

Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

Azure DevOps Artifacts jippermettilek ukoll li toħloq badges għal pakketti bl-aħħar verżjoni. Biex tagħmel dan, fis-sors fuq is-sit Azure DevOps, trid tikklikkja fuq Oħloq badge għall-pakkett magħżul u tikkopja l-markdown tal-markdown:

Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

Gwida għal CI/CD f'GitLab għall-Bidu (kważi) assolut

Żieda tas-sbuħija

L-enfasi ta' Frammenti ta' Konfigurazzjoni Komuni

Waqt il-kitba tal-konfigurazzjoni u t-tiftix fid-dokumentazzjoni, iltqajt ma 'karatteristika interessanti ta' YAML - użu mill-ġdid ta 'frammenti.

Kif tistgħu taraw mis-settings tal-kompitu, kollha jeħtieġu t-tikketta windows fil-runner, u jiġu attivati ​​meta tintbagħat talba għall-għaqda lill-kaptan/maħluq (ħlief dokumentazzjoni). Ejja nżidu dan mal-framment li ser nużaw mill-ġdid:

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

U issa nistgħu daħħal il-framment iddikjarat aktar kmieni fid-deskrizzjoni tal-kompitu:

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

L-ismijiet tal-frammenti għandhom jibdew b'tikka, sabiex ma jiġux interpretati bħala kompitu.

Verżjoni tal-pakkett

Meta joħloq pakkett, il-kompilatur jiċċekkja l-iswiċċijiet tal-linja tal-kmand, u fin-nuqqas tagħhom, il-fajls tal-proġett; meta ssib node Verżjoni, tieħu l-valur tagħha bħala l-verżjoni tal-pakkett li qed jinbena. Jirriżulta li sabiex tibni pakkett b'verżjoni ġdida, trid jew taġġornah fil-fajl tal-proġett jew tgħaddih bħala argument tal-linja tal-kmand.

Ejja nżidu Wishlist waħda oħra - ħalli ż-żewġ numri minuri fil-verżjoni jkunu s-sena u d-data tal-bini tal-pakkett, u żid verżjonijiet ta 'prerelease. Naturalment, tista 'żżid din id-dejta fil-fajl tal-proġett u tiċċekkja qabel kull sottomissjoni - iżda tista' wkoll tagħmel dan fil-pipeline, tiġbor il-verżjoni tal-pakkett mill-kuntest u tgħaddiha permezz tal-argument tal-linja tal-kmand.

Ejja naqblu li jekk il-messaġġ tal-kommit fih linja simili release (v./ver./version) <version number> (rev./revision <revision>)?, allura nieħdu l-verżjoni tal-pakkett minn din il-linja, nissupplimentawha bid-data attwali u ngħadduha bħala argument lill-kmand dotnet pack. Fin-nuqqas ta 'linja, aħna sempliċement mhux se niġbru l-pakkett.

L-iskrittura li ġejja ssolvi din il-problema:

# регулярное выражение для поиска строки с версией
$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

Żieda ta' skript ma' kompitu pack and deploy job u osserva l-assemblaġġ tal-pakketti strettament fil-preżenza ta 'sekwenza partikolari fil-messaġġ ta' impenn.

B'kollox

Wara li qattajna madwar nofs siegħa jew siegħa tikteb il-konfigurazzjoni, debugging fil-powershell lokali u, possibilment, koppja ta 'tnedija mingħajr suċċess, aħna ltqajna konfigurazzjoni sempliċi għall-awtomatizzazzjoni tal-kompiti ta' rutina.

Naturalment, GitLab CI / CD huwa ħafna aktar estensiv u multidimensjonali milli jidher wara li taqra din il-gwida - dak mhu veru xejn. Hemm anke Auto DevOps huwatippermetti

awtomatikament jiskopri, jibni, ittestja, skjerament, u jimmonitorja l-applikazzjonijiet tiegħek

Issa l-pjanijiet huma li jiġi kkonfigurat pipeline għall-iskjerament ta 'applikazzjonijiet għal Azure, bl-użu ta' Pulumi u tiddetermina awtomatikament l-ambjent fil-mira, li se jkun kopert fl-artikolu li jmiss.

Sors: www.habr.com

Żid kumment