Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

Kapena momwe mungapezere mabaji okongola a projekiti yanu usiku umodzi wosavuta wolembera

Mwinamwake, aliyense wopanga mapulogalamu omwe ali ndi polojekiti imodzi ya ziweto nthawi ina amakhala ndi chiwopsezo cha mabaji okongola okhala ndi ma stade, code coverage, phukusi la nuget ... Ndipo itch iyi inandipangitsa kuti ndilembe nkhaniyi. Pokonzekera kulemba, ndapeza kukongola uku mu imodzi mwamapulojekiti anga:

Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

Nkhaniyi ikuthandizani pakukhazikitsa kofunikira kophatikizana mosalekeza ndi kutumiza pulojekiti ya laibulale ya .Net Core class ku GitLab, kusindikiza zolembedwa ku GitLab Pages, ndikukankhira maphukusi omangidwira ku chakudya chachinsinsi mu Azure DevOps.

VS Code idagwiritsidwa ntchito ngati malo otukuka ndikukulitsa GitLab Workflow (potsimikizira zoikamo fayilo mwachindunji kuchokera kumalo otukuka).

Chidule chachidule

CD - ndi pamene mwangokankhira, ndipo chirichonse chagwera kale pa kasitomala?

Kodi CI / CD ndi chiyani ndipo chifukwa chiyani mukuyifuna - mutha kuyiyika pa Google mosavuta. Pezani zolemba zonse pakukonza mapaipi mu GitLab komanso zosavuta. Apa ndifotokoza mwachidule komanso, ngati n'kotheka, popanda zolakwika ndikufotokozera momwe dongosololi likuyendera m'maso mwa mbalame:

  • wopangayo amatumiza kudzipereka kumalo osungirako, amapanga pempho lophatikizana kudzera patsambalo, kapena mwanjira ina, momveka bwino kapena mosabisa akuyamba payipi,
  • ntchito zonse zimasankhidwa kuchokera ku kasinthidwe, zomwe zimalola kuti zikhazikitsidwe pazomwe zaperekedwa,
  • ntchito zimakonzedwa molingana ndi magawo awo,
  • magawo amachitidwa motsatizana - i.e. kufanana ntchito zonse za siteji iyi zatsirizidwa,
  • ngati gawolo likulephera (ie, imodzi mwa ntchito za sitejiyo yalephera), payipi imayima (pafupifupi nthawi zonse),
  • ngati magawo onse atsirizidwa bwino, payipi imatengedwa kuti ndi yopambana.

Chifukwa chake, tili ndi:

  • pipeline - mndandanda wa ntchito zokonzedwa m'magawo omwe mungapange, kuyesa, ma code phukusi, kutumiza zomaliza ku ntchito yamtambo, ndi zina zotero,
  • siteji (siteji) - gulu lopanga mapaipi, lili ndi ntchito 1+,
  • ntchito (ntchito) ndi gawo la ntchito paipi. Imakhala ndi script (yovomerezeka), mikhalidwe yotsegulira, zoikidwiratu zosindikiza / zosunga zobwezeretsera, ndi zina zambiri.

Chifukwa chake, ntchitoyo ikakhazikitsa CI / CD imatsikira pakupanga ntchito zomwe zimakwaniritsa zonse zofunika pakumanga, kuyesa ndi kusindikiza ma code ndi zinthu zakale.

Musanayambe: chifukwa chiyani?

  • Chifukwa chiyani Gitlab?

Chifukwa pamene zidakhala zofunikira kupanga nkhokwe zachinsinsi zamapulojekiti a ziweto, adalipidwa pa GitHub, ndipo ndinali wadyera. Zosungirako zakhala zaufulu, koma mpaka pano sichinali chifukwa chokwanira choti ndisamukire ku GitHub.

  • Bwanji osapanga mapaipi a Azure DevOps?

Chifukwa pamenepo zoyikapo ndizoyambira - kudziwa mzere wolamula sikofunikira. Kuphatikiza ndi opereka git akunja - pakudina pang'ono, kulowetsa makiyi a SSH kuti mutumize mabizinesi kumalo osungirako - nawonso, mapaipi amakonzedwa mosavuta ngakhale osachokera pa template.

Malo oyambira: zomwe muli nazo ndi zomwe mukufuna

Tili ndi:

  • chosungira ku GitLab.

Tikufuna:

  • kusonkhanitsa zokha ndi kuyesa pa pempho lililonse lophatikiza,
  • kumanga phukusi la pempho lililonse lophatikizana ndikukankhira kwa mbuye, malinga ngati pali mzere wina mu uthenga wodzipereka,
  • kutumiza mapaketi omanga ku chakudya chachinsinsi ku Azure DevOps,
  • kusonkhanitsa zolemba ndi kufalitsa mu Masamba a GitLab,
  • zizindikiro!11

Zofunikira zomwe zafotokozedwa zimagwera pamapaipi otsatirawa:

  • Gawo 1 - msonkhano
    • Timasonkhanitsa kachidindo, kufalitsa mafayilo otuluka ngati zinthu zakale
  • Gawo 2 - kuyesa
    • Timapeza zinthu zakale kuchokera pakupanga, kuyesa mayeso, kusonkhanitsa zidziwitso za code
  • Gawo 3 - Tumizani
    • Ntchito 1 - pangani phukusi la nuget ndikutumiza ku Azure DevOps
    • Ntchito 2 - timasonkhanitsa tsambalo kuchokera ku xmldoc mu code code ndikuyiyika mu GitLab Pages

Tiyeni tiyambe!

Kusonkhanitsa kasinthidwe

Kukonzekera maakaunti

  1. Pangani akaunti mu Microsoft Azure

  2. Pitani ku Azure DevOps

  3. Timapanga pulojekiti yatsopano

    1. Dzina - iliyonse
    2. Kuwoneka - kulikonse
      Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

  4. Mukadina pa batani la Pangani, polojekitiyo idzapangidwa ndipo mudzatumizidwa kutsamba lake. Patsambali, mutha kuletsa zinthu zosafunikira popita pazokonda za polojekiti (ulalo wapansi pamndandanda womwe uli kumanzere -> mwachidule -> Azure DevOps Services block)
    Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

  5. Pitani ku Atrifacts, dinani Pangani feed

    1. Lowetsani dzina la gwero
    2. Sankhani mawonekedwe
    3. Chotsani chosankha Phatikizani phukusi lochokera kwa anthu wamba, kuti gwero lisanduke kukhala dumpnuget clone
      Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

  6. Dinani Lumikizani kuti mudyetse, sankhani Visual Studio, koperani Gwero kuchokera pa block Setup Machine
    Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

  7. Pitani ku makonda a akaunti, sankhani Personal Access Token
    Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

  8. Pangani chizindikiro chatsopano

    1. Dzina - mwachisawawa
    2. Bungwe - Panopa
    3. Itha kukhala chaka chimodzi
    4. Kuchuluka - Kupaka/Kuwerenga & Kulemba
      Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

  9. Koperani chizindikiro chopangidwa - pambuyo potsekedwa zenera la modal, mtengo sudzakhalapo

  10. Pitani ku zoikamo zosungira mu GitLab, sankhani zokonda za CI / CD
    Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

  11. Onjezani chipika cha Zosintha, yonjezerani china chatsopano

    1. Dzina - lililonse lopanda mipata (lipezeka mu chipolopolo cholamula)
    2. Mtengo - chizindikiro chofikira kuchokera ndime 9
    3. Sankhani Mask variable
      Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

Izi zimamaliza kukonzekereratu.

Kukonzekera dongosolo kasinthidwe

Mwachikhazikitso, kasinthidwe ka CI/CD mu GitLab amagwiritsa ntchito fayilo .gitlab-ci.yml kuchokera muzu wa nkhokwe. Mutha kukhazikitsa njira yosinthira fayiloyi muzosungirako, koma pakadali pano sikofunikira.

Monga mukuwonera pakukulitsa, fayilo ili ndi kasinthidwe mumtundu YAML. Tsatanetsatane wa zolemba zomwe makiyi atha kukhala pamlingo wapamwamba wa kasinthidwe, komanso pamlingo uliwonse wokhazikitsidwa.

Choyamba, tiyeni tiwonjezere ulalo wa chithunzi cha docker mu fayilo yosinthira, momwe ntchitozo zidzachitikira. Kwa ichi tikupeza Tsamba la zithunzi za .Net Core pa Docker Hub. The GitHub pali kalozera watsatanetsatane wa chithunzi chomwe mungasankhe pa ntchito zosiyanasiyana. Chithunzi chokhala ndi .Net Core 3.1 ndichoyenera kuti timange, choncho khalani omasuka kuwonjezera mzere woyamba pakukonzekera.

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

Tsopano, payipi ikatulutsidwa kuchokera kumalo osungirako zithunzi a Microsoft, chithunzi chomwe chatchulidwa chidzatsitsidwa, momwe ntchito zonse kuchokera ku kasinthidwe zidzachitidwa.

Chotsatira ndikuwonjezera siteji's. Mwachikhazikitso, GitLab imatanthauzira magawo 5:

  • .pre - adachita mpaka magawo onse,
  • .post - kuchitidwa pambuyo pa magawo onse,
  • build - choyamba pambuyo .pre stage,
  • test - gawo lachiwiri,
  • deploy - gawo lachitatu.

Palibe chomwe chimakulepheretsani kufotokoza momveka bwino, komabe. Ndondomeko yomwe masitepe alembedwa imakhudza momwe amachitira. Kuti tikwaniritse, tiyeni tiwonjezere ku kasinthidwe:

stages:
  - build
  - test
  - deploy

Pochotsa zolakwika, ndizomveka kupeza zambiri zokhudzana ndi malo omwe ntchitozo zimachitikira. Tiyeni tiwonjezere malamulo apadziko lonse lapansi omwe azichitika ntchito iliyonse isanachitike before_script:

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

Ingowonjezeranso ntchito imodzi kuti ntchito zikatumizidwa, mapaipi ayambe. Pakadali pano, tiyeni tiwonjezere ntchito yopanda kanthu kuti tiwonetse:

dummy job:
  script:
    - echo ok

Timayamba kutsimikizira, timapeza uthenga wakuti zonse zili bwino, timadzipereka, timakankhira, timayang'ana zotsatira pa malo ... Ndipo timapeza cholakwika cha script - bash: .PSVersion: command not found. wtf?

Chilichonse ndichabwino - mwachisawawa, othamanga (omwe ali ndi udindo wolemba ntchito ndikuperekedwa ndi GitLab) gwiritsani ntchito bash kuchita malamulo. Mutha kukonza izi pofotokoza mwatsatanetsatane m'mawu ofotokozera zomwe woyendetsa mapaipi ayenera kukhala nazo:

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

Zabwino! Paipiyi ikugwira ntchito tsopano.

Wowerenga mwachidwi, atabwereza masitepe omwe asonyezedwa, adzawona kuti ntchitoyo inamalizidwa pa siteji test, ngakhale sitinatchule siteji. Monga mungaganizire test ndiye sitepe yokhazikika.

Tiyeni tipitilize kupanga skeleton yosinthira powonjezera ntchito zonse zomwe zafotokozedwa pamwambapa:

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

Tili ndi mapaipi osagwira ntchito, koma olondola.

Kupanga zoyambitsa

Chifukwa chakuti palibe zosefera zoyambitsa zomwe zafotokozedwa pa ntchito iliyonse, mapaipi atero kwathunthu kuchitidwa nthawi iliyonse yomwe chikalatacho chikukankhidwira kumalo osungirako. Popeza izi sizomwe timafunikira, tidzakhazikitsa zosefera zoyambitsa ntchito.

Zosefera zitha kukhazikitsidwa m'mitundu iwiri: kokha/kupatulapo ΠΈ malamulo. Mwachidule, only/except limakupatsani mwayi wokonza zosefera ndi zoyambitsa (merge_request, mwachitsanzo - imayika ntchito yomwe iyenera kuchitidwa nthawi iliyonse pamene pempho lachikoka likupangidwa ndipo nthawi iliyonse yopereka imatumizidwa ku nthambi yomwe ili gwero la pempho lophatikizana) ndi mayina a nthambi (kuphatikiza kugwiritsa ntchito mawu okhazikika); rules imakupatsani mwayi wosintha momwe zinthu ziliri ndipo, mwakufuna, kusintha momwe mungagwirire ntchito kutengera kupambana kwa ntchito zam'mbuyomu (when mu GitLab CI/CD).

Tiyeni tikumbukire zofunikira - kusonkhanitsa ndi kuyesa kokha pakuphatikiza pempho, kuyika ndi kutumiza ku Azure DevOps - kuti aphatikize pempho ndikukankhira kwa mbuye, kupanga zolemba - kukankhira kwa mbuye.

Choyamba, tiyeni tikhazikitse ntchito yomanga kachidindo powonjezera lamulo lomwe limangoyatsa pophatikiza pempho:

build job:
  # snip
  only:
    - merge_request

Tsopano tiyeni tikhazikitse ntchito yonyamula kuti tiwotche pa pempho lophatikizana ndikuwonjezera kuchita kwa mbuye:

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

Monga mukuonera, zonse ndi zosavuta komanso zosavuta.

Muthanso kuyimitsa ntchitoyo pokhapokha ngati pempho lophatikizana lapangidwa ndi chandamale kapena nthambi yoyambira:

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

Pazimenezi, mungagwiritse ntchito zosintha zomwe zalembedwa apa; malamulo rules zosagwirizana ndi malamulo only/except.

Kukonza Kusunga Zojambula

Pa nthawi ya ntchito build job tidzakhala ndi zinthu zakale zomwe zitha kugwiritsidwanso ntchito muzotsatira. Kuti muchite izi, muyenera kuwonjezera njira zosinthira ntchito, mafayilo omwe muyenera kusunga ndikugwiritsanso ntchito pazotsatirazi, ku kiyi. artifacts:

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

Njira zimathandizira makadi akutchire, zomwe zimapangitsa kuti zikhale zosavuta kuziyika.

Ngati ntchito imapanga zinthu zakale, ndiye kuti ntchito iliyonse yotsatila idzatha kuzipeza - zidzapezeka m'njira zomwezo zokhudzana ndi mizu yosungiramo zinthu zomwe zinasonkhanitsidwa kuchokera ku ntchito yoyambirira. Zinthu zakale zimapezekanso kuti zitsitsidwe patsamba.

Tsopano popeza tili ndi dongosolo lokonzekera (ndi kuyesedwa), tikhoza kupitiriza kulemba zolemba za ntchito.

Timalemba zolemba

Mwinamwake, kamodzi pa nthawi, mu mlalang'amba wakutali, kutali, ntchito zomanga (kuphatikizapo zomwe zili pa .net) kuchokera ku mzere wolamula zinali zowawa. Tsopano mutha kupanga, kuyesa ndi kufalitsa pulojekitiyi m'magulu atatu:

dotnet build
dotnet test
dotnet pack

Mwachilengedwe, pali ma nuances ena chifukwa chake tidzasokoneza malamulowo.

  1. Tikufuna kumanga kumasulidwa, osati kukonza zolakwika, kotero timawonjezera ku lamulo lililonse -c Release
  2. Tikamayesa, tikufuna kusonkhanitsa zidziwitso za ma code, chifukwa chake tiyenera kuphatikiza chowunikira m'malaibulale oyeserera:
    1. Onjezani phukusi ku malaibulale onse oyeserera coverlet.msbuild: dotnet add package coverlet.msbuild kuchokera ku chikwatu cha polojekiti
    2. Onjezerani ku test run command /p:CollectCoverage=true
    3. Onjezani kiyi pakusintha kwa ntchito yoyeserera kuti mupeze zotsatira zowunikira (onani pansipa)
  3. Mukanyamula kachidindo m'mapaketi a nuget, ikani chikwatu chotuluka pamaphukusi: -o .

Kusonkhanitsa ma code coverage data

Pambuyo poyesa mayeso, zolemba za Coverlet zimayendetsa ziwerengero ku kontrakitala:

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 imakulolani kuti mutchule mawu okhazikika kuti mupeze ziwerengero, zomwe zitha kupezeka ngati baji. Mawu okhazikika amafotokozedwa m'makonzedwe a ntchito ndi kiyi coverage; mawuwa ayenera kukhala ndi gulu lojambula, lomwe mtengo wake udzaperekedwa ku baji:

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

Apa timapeza ziwerengero kuchokera pamzere wokhala ndi mizere yonse.

Sindikizani phukusi ndi zolemba

Zochita zonse ziwirizi zakonzekera gawo lomaliza la mapaipi - popeza msonkhano ndi mayeso zadutsa, titha kugawana zomwe tikuchita ndi dziko lapansi.

Choyamba, lingalirani zofalitsa ku gwero la phukusi:

  1. Ngati polojekiti ilibe fayilo yosinthira nuget (nuget.config), pangani yatsopano: dotnet new nugetconfig

    Zachiyani: chithunzicho sichingakhale ndi mwayi wolembera ku masinthidwe apadziko lonse (ogwiritsa ntchito ndi makina). Kuti tisagwire zolakwika, timangopanga masinthidwe am'deralo ndikugwira nawo ntchito.

  2. Tiyeni tiwonjeze gwero la phukusi latsopano pamasinthidwe am'deralo: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - dzina la komweko, osati lotsutsa
    2. url - URL ya gwero kuchokera pagawo "Kukonzekera maakaunti", p. 6
    3. organization - dzina la bungwe mu Azure DevOps
    4. gitlab variable - dzina la kusintha ndi chizindikiro chofikira chowonjezeredwa ku GitLab ("Kukonzekera akaunti", p. 11). Mwachibadwa, mu maonekedwe $variableName
    5. -StorePasswordInClearText - kuthyolako kuti mulambalale cholakwika chokanidwa (Ine sindine woyamba kuponda pa chotengerachi)
    6. Pakakhala zolakwika, zitha kukhala zothandiza kuwonjezera -verbosity detailed
  3. Kutumiza phukusi kugwero: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Timatumiza mapaketi onse kuchokera pakakwatu komweko, kotero *.nupkg.
    2. name - kuchokera pa sitepe pamwamba.
    3. key - mzere uliwonse. Mu Azure DevOps, mu Connect to feed zenera, chitsanzo nthawi zonse chimakhala mzere az.
    4. -skipduplicate - poyesa kutumiza phukusi lomwe lilipo kale popanda fungulo ili, gwero lidzabwezera cholakwika 409 Conflict; ndi kiyi, kutumiza kudzalumphidwa.

Tsopano tiyeni tiyike kupanga zolembedwa:

  1. Choyamba, posungira, munthambi yayikulu, timayambitsa ntchito ya docfx. Kuti muchite izi, yendetsani lamulo kuchokera muzu docfx init ndikukhazikitsa molumikizana magawo ofunikira pakumanga zolemba. Kufotokozera mwatsatanetsatane za kukhazikitsidwa kochepa kwa polojekiti apa.
    1. Mukakonza, ndikofunikira kutchula bukhu lotulutsa ..public - GitLab mwachisawawa imatenga zomwe zili mufoda yapagulu muzu wankhokwe ngati gwero la Masamba. Chifukwa pulojekitiyi idzakhala mu chikwatu chomwe chili m'malo osungiramo - onjezerani zotuluka pamlingo wokwera panjira.
  2. Tiyeni tikankhire zosintha ku GitLab.
  3. Onjezani ntchito pakukonzekera mapaipi pages (mawu osungidwa a ntchito zofalitsa masamba pamasamba a GitLab):
    1. Zolemba:
      1. nuget install docfx.console -version 2.51.0 - kukhazikitsa docfx; mtunduwo wafotokozedwa kuti zitsimikizire kuti njira zoyika phukusi zili zolondola.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - kusonkhanitsa zolemba
    2. Zolemba za Node:

pages:
  # snip
  artifacts:
    paths:
      - public

Kuyimba kwanyimbo za docfx

M'mbuyomu, pokhazikitsa pulojekiti, ndidatchula gwero lazolembazo ngati fayilo yothetsera. Choyipa chachikulu ndikuti zolemba zimapangidwiranso ntchito zoyeserera. Ngati izi sizikufunika, mutha kuyika mtengo uwu ku node metadata.src:

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

  1. metadata.src.src: "../" - timakwera mulingo umodzi wokhudzana ndi malowo docfx.json, chifukwa m'machitidwe, kufufuza mtengo wa chikwatu sikugwira ntchito.
  2. metadata.src.files: ["**/*.csproj"] - dongosolo lapadziko lonse lapansi, timasonkhanitsa ma projekiti onse a C # kuchokera kumakanema onse.
  3. metadata.src.exclude: ["*.tests*/**"] - mawonekedwe apadziko lonse lapansi, osapatula chilichonse pamafoda omwe ali nawo .tests Pamutu

Chiwerengero

Kukonzekera kosavuta kotereku kungapangidwe mu theka la ola ndi makapu angapo a khofi, zomwe zidzakuthandizani kuti muwone kuti codeyo imamangidwa ndipo mayesero amapita, kumanga phukusi latsopano, sinthani zolembazo ndikukondweretsa diso ndi zokongola. mabaji mu README ya polojekiti ndi pempho lililonse lophatikiza ndikutumiza kwa mbuye.

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

Kulankhula za mabaji

Chifukwa cha iwo, pambuyo pake, zonse zidayamba!

Mabaji okhala ndi ziphaso zamapaipi komanso kufalikira kwa ma code akupezeka mu GitLab mu zoikamo za CI/CD mu block mapaipi a Gtntral:

Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

Ndinapanga baji yokhala ndi ulalo wa zolembedwa papulatifomu zishango.io - Chilichonse ndichabwino pamenepo, mutha kupanga baji yanu ndikulandila pogwiritsa ntchito pempho.

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

Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

Azure DevOps Artifacts imakupatsaninso mwayi wopanga mabaji amapaketi okhala ndi mtundu waposachedwa. Kuti muchite izi, gwero lomwe lili patsamba la Azure DevOps, muyenera dinani Pangani baji la phukusi losankhidwa ndikukopera zolembera:

Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

Kalozera wa CI/CD mu GitLab kwa (pafupifupi) woyamba mtheradi

Kuwonjezera kukongola

Kuyang'ana Zidutswa Zachidule Zosasinthika

Ndikamalemba masinthidwe ndikufufuza zolemba, ndidakumana ndi chinthu chosangalatsa cha YAML - kugwiritsanso ntchito zidutswa.

Monga mukuwonera pamakonzedwe a ntchito, onse amafunikira chizindikirocho windows pa wothamanga, ndipo zimayambitsidwa pamene pempho lophatikizana likutumizidwa kwa mbuye / wopangidwa (kupatula zolemba). Tiyeni tiwonjezere ichi ku chidutswa chomwe tigwiritsenso ntchito:

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

Ndipo tsopano titha kuyika chidutswa chomwe chanenedweratu pofotokozera ntchito:

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

Mayina a zidutswa ayenera kuyamba ndi kadontho, kuti asatanthauzidwe ngati ntchito.

Kusintha kwa phukusi

Popanga phukusi, wolembayo amayang'ana kusintha kwa mzere wa malamulo, ndipo ngati palibe, mafayilo a polojekiti; ikapeza mfundo ya Version, imatengera mtengo wake ngati mtundu wa phukusi lomwe likumangidwa. Zikuwonekeratu kuti kuti mupange phukusi ndi mtundu watsopano, muyenera kuyisintha mu fayilo ya polojekiti kapena kuipereka ngati mkangano wa mzere wolamula.

Tiyeni tiwonjezere Wishlist ina - lolani manambala awiri ang'onoang'ono mumtunduwo akhale chaka ndikumanga tsiku la phukusi, ndikuwonjezeranso zomasulira. Zachidziwikire, mutha kuwonjezera izi pafayilo ya polojekiti ndikuwunika musanapereke chilichonse - koma mutha kuchitanso mupaipi, kusonkhanitsa mtundu wa phukusi kuchokera pamutuwu ndikuwudutsa pamtsutso wa mzere wolamula.

Tiyeni tivomereze kuti ngati uthenga wodzipereka uli ndi mzere ngati release (v./ver./version) <version number> (rev./revision <revision>)?, ndiye titenga mtundu wa phukusi kuchokera pamzerewu, ndikuwonjezera ndi tsiku lomwe lilipo ndikulipereka ngati mkangano ku lamulo. dotnet pack. Popanda mzere, sitingatolere phukusi.

Malemba otsatirawa amathetsa vutoli:

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

Kuwonjezera script ku ntchito pack and deploy job ndipo yang'anani kusonkhana kwa phukusi mosamalitsa pamaso pa chingwe choperekedwa mu uthenga wodzipereka.

Chiwerengero

Titakhala pafupifupi theka la ola kapena ola limodzi ndikulemba kasinthidwe, kukonza zolakwika mu Powershell yakomweko ndipo, mwina, zoyambitsa zingapo zomwe sizinachite bwino, tili ndi masinthidwe osavuta opangira ntchito zachizolowezi.

Zachidziwikire, GitLab CI / CD ndiyambiri komanso yochulukirapo kuposa momwe zingawonekere mutawerenga bukuli - izo sizowona konse. Kumeneko ngakhale Auto DevOps ndikulola

zindikirani zokha, pangani, yesani, tumizani, ndikuwunika mapulogalamu anu

Tsopano mapulaniwo ndikukonzekera payipi yotumizira mapulogalamu ku Azure, pogwiritsa ntchito Pulumi ndikudziwiratu malo omwe mukufuna, zomwe zidzafotokozedwe m'nkhani yotsatira.

Source: www.habr.com

Kuwonjezera ndemanga