Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

Kana kuti ungawana sei mabheji akanaka epurojekiti yako mune imwe manheru ekuzorora kwekodhi

Zvichida, mugadziri wese ane kanenge kamwe pet project pane imwe nguva ane itch yemabheji akanaka ane mastatus, code coverage, package versions in nuget... Uye itch iyi yakanditungamirira kuti ndinyore chinyorwa ichi. Mukugadzirira kuinyora, ndakawana runako urwu mune rimwe remapurojekiti angu:

Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

Chinyorwa ichi chichabata kugadzwa kwekutanga kwekubatanidzwa uye kuendeswa kwe.Net Core class library library muGitLab, kuburitsa zvinyorwa kuGitLab Mapeji uye kutumira mapakeji akaunganidzwa kune yakavanzika feed muAzure DevOps.

VS Code nekuwedzera yakashandiswa senzvimbo yekusimudzira GitLab Workflow (kusimbisa iyo faira yekumisikidza zvakananga kubva kunzvimbo yekusimudzira).

Nhanganyaya Yekutanga

CD ndipo paunongosunda, asi mutengi atorasikirwa nezvose?

Chii chinonzi CI/CD uye nei ichidiwa? Unogona kuita google zviri nyore. Tsvaga magwaro akazara ekumisikidza mapaipi muGitLab zvakare nyore. Pano ini ndichaita muchidimbu uye, kana zvichibvira, pasina kukanganisa, kutsanangura maitiro ehurongwa kubva paziso reshiri:

  • mugadziri anotumira kuzvipira kune repository, anogadzira chikumbiro chekubatanidza kuburikidza newebhusaiti, kana neimwe nzira zviripachena kana zvisina kujeka kuburitsa pombi,
  • kubva pakurongeka, mabasa ese anosarudzwa ane mamiriro ezvinhu anovabvumira kutangwa mune yakapihwa mamiriro,
  • mabasa akarongwa maererano nematanho awo,
  • matanho anoitwa achichinjana - i.e. zvakafanana mabasa ese echikamu chino anopedzwa,
  • kana nhanho ikatadza (kureva kuti rimwe remabasa echikuva rakatadza) - pombi inomira (zvinenge nguva dzose),
  • kana matanho ese akapedzwa zvinobudirira, pombi inoonekwa seyakabudirira.

Saka tine:

  • pipeline seti yemabasa akarongwa mumatanho maunogona kuunganidza, kuyedza, pasuru kodhi, kuendesa iyo yakapera gungano kune gore sevhisi, nezvimwe.
  • danho (siteji) - chikamu chesangano repombi, ine 1+ basa,
  • basa (basa) chikamu chebasa mupombi. Inosanganisira script (inodiwa), mamiriro ekuvhura, marongero ekushambadzira / caching artifacts nezvimwe zvakawanda.

Saizvozvo, iro basa pakumisikidza CI/CD rinouya pasi pakugadzira seti yemabasa anoita ese anodiwa zviito zvekuunganidza, kuyedza uye kuburitsa kodhi uye zvigadzirwa.

Tisati tatanga: sei?

  • Sei GitLab?

Nekuti pakamuka kudikanwa kwekugadzira matura epachivande emapurojekiti ezvipfuyo, vakabhadharwa paGitHub, uye ndaive nemakaro. Iwo marepositori ave emahara, asi parizvino ichi hachisi chikonzero chakanaka chekuti ndiende kuGitHub.

  • Sei usiri Azure DevOps Mapaipi?

Nekuti kuseta kuri nyore - hautomboda ruzivo rwemutsara wekuraira. Kubatanidzwa nevekunze git vanopa - mukudzvanya kwakati, kuendesa kunze kweSSH makiyi ekutumira anoisa kune repository - zvakare, pombi inogadziriswa zviri nyore kunyangwe isina template.

Nzvimbo yekutanga: zvaunazvo uye zvaunoda

Tine:

  • repository muGitLab.

Tinoda:

  • kuungana otomatiki uye kuyedzwa kwechikumbiro chega chega chekubatanidza,
  • kuvaka mapakeji kune yega yega yekubatanidza chikumbiro uye kusundira kuna tenzi, chero paine imwe mutsara mune yekuita meseji,
  • kutumira mapakeji akaunganidzwa kune yakavanzika feed muAzure DevOps,
  • kuungana kwezvinyorwa uye kuburitswa muGitLab Mapeji,
  • mabheji!11

Izvo zvinotsanangurwa zvinodikanwa zvinoenderana nemasikirwo mune inotevera pombi modhi:

  • Danho 1 - gungano
    • Isu tinounganidza iyo kodhi, kushambadza mafaera akabuda seartifacts
  • Danho rechipiri - kuedza
    • Isu tinogashira zvigadzirwa kubva padanho rekuvaka, kumhanya bvunzo, kuunganidza kodhi yekuvhara data
  • Danho rechitatu - kutumira
    • Basa rekutanga - unganidza iyo nuget package uye utumire kuAzure DevOps
    • Basa rechipiri - tinounganidza saiti kubva kuxmldoc mune kodhi kodhi uye kuishambadza muGitLab Mapeji.

Ngatitangei!

Kuunganidza configuration

Kugadzirira maakaundi

  1. Gadzira account mukati Microsoft Azure

  2. Enda ku Azure DevOps

  3. Gadzira chirongwa chitsva

    1. Zita - chero
    2. Kuonekwa - chero
      Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

  4. Paunodzvanya paGadzira bhatani, iyo purojekiti ichagadzirwa uye iwe uchaendeswa kune yayo peji. Pane ino peji unogona kudzima zvisina basa maficha nekuenda kumapurojekiti marongero (yepasi chinongedzo mune runyorwa kuruboshwe -> Overview -> Azure DevOps Services block)
    Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

  5. Enda kuAtrifacts, tinya Gadzira feed

    1. Isa zita rekwakabva
    2. Sarudza kuonekwa
    3. Bvisa bhokisi Batanidza mapasuru kubva munzvimbo dzinowanikwa veruzhinjikuitira kuti sosi irege kushanduka kuita marara emarara e nuget clone
      Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

  6. Dzvanya Batanidza kudyisa, sarudza Visual Studio, kopira Kwabva kubva kuMuchina Setup block
    Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

  7. Enda kune zvigadziriso zveakaunti, sarudza Personal Access Token
    Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

  8. Gadzira chiratidzo chitsva chekuwana

    1. Zita - zvekupopota
    2. Sangano - ikozvino
    3. Nguva yekushanda: yakawanda 1 gore
    4. Scope - Packaging/Read & Nyora
      Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

  9. Kopa chiratidzo chakagadzirwa - mushure mekuvhara hwindo re modal kukosha hakuzovepo

  10. Enda kune repository marongero muGitLab, sarudza CI/CD marongero
    Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

  11. Wedzera iyo Variables block uye wedzera imwe nyowani

    1. Zita - chero pasina nzvimbo (richave riripo mune yekuraira shell)
    2. Kukosha ndiyo chiratidzo chekuwana kubva padanho 9
    3. Sarudza Mask variable
      Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

Izvi zvinopedzisa gadziriro yekutanga.

Kugadzirira chimiro chekugadzirisa

Nekutadza, faira rinoshandiswa kugadzirisa CI/CD muGitLab ndiro .gitlab-ci.yml kubva pamudzi we repository. Iwe unogona kugadzirisa nzira yetsika kune iyi faira mune repository marongero, asi mune iyi kesi hazvidiwi.

Sezvingaonekwa kubva pakuwedzera, iyo faira ine gadziriso mune iyo fomati YAML. Zvinyorwa zvinotsanangura zvakadzama ndeapi makiyi anogona kuve ari padanho repamusoro rekugadzirisa, uye mune yega yega mazinga akaiswa.

Kutanga, ngatiwedzere kune faira yekumisikidza chinongedzo kune docker mufananidzo umo mabasa achaitwa. Kuita izvi tinowana .Net Core mifananidzo peji paDocker Hub. The GitHub Pane dhairekitori rakadzama pane mufananidzo wekusarudza kune akasiyana mabasa. Mufananidzo une .Net Core 3.1 wakakodzera kuti isu tivake, saka sununguka kuuwedzera semutsara wekutanga kugadziriso.

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

Iye zvino, paunotanga pombi, mufananidzo wakatsanangurwa uchatorwa kubva kuMicrosoft image repository, umo mabasa ose kubva pakugadzirisa achaitwa.

Nhanho inotevera ndeyekuwedzera siteji's. By default, GitLab inotsanangura 5 nhanho:

  • .pre - inoitwa kumatanho ese,
  • .post - yakaitwa mushure mematanho ese,
  • build - kutanga pashure .pre stage,
  • test - chikamu chechipiri,
  • deploy - danho rechitatu.

Hapana chinokutadzisa kuti uzvitaure zvakajeka, zvisinei. Kurongeka kwematanho akarongwa kunokanganisa marongerwo aanopedzwa nawo. Kuti uwane kukwana, ngatiwedzere kune iyo gadziriso:

stages:
  - build
  - test
  - deploy

Kugadzirisa, zvine musoro kuwana ruzivo nezve nharaunda umo mabasa anoitwa. Ngatiwedzerei seti yemirairo yepasirese inozoitwa basa rega rega risati rashandiswa before_script:

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

Inosara yekuwedzera kanenge basa rimwe chete kuitira kuti kana madhiri atumirwa, pombi inotanga. Parizvino, ngatiwedzerei basa risina chinhu rekuratidzira:

dummy job:
  script:
    - echo ok

Isu tinotanga kusimbiswa, tora meseji yekuti zvese zvakanaka, zvipira, sundidzira, tarisa mhinduro pane saiti... Uye isu tinowana script kukanganisa - bash: .PSVersion: command not found. WTF?

Zvese zvine musoro - nekusarudzika, vanomhanya (vane basa rekuita zvinyorwa zvebasa uye zvakapihwa neGitLab) shandisa. bash kuita mirairo. Iwe unogona kugadzirisa izvi nekuratidza zvakajeka mune tsananguro yebasa kuti ma tag anouraya mumhanyi wepombi anofanira kuva nawo:

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

Hukuru! Pombi yava kushanda.

Muverengi anoteerera, achidzokorora nhanho idzi, anozoona kuti basa rakapedzwa pachikuva test, kunyange zvazvo tisina kutsanangura dariro. Sezvaungafungidzira, test ndiyo danho rekutanga.

Ngatirambei tichigadzira skeleton yekumisikidza nekuwedzera mabasa ese anotsanangurwa pamusoro:

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

Hatina kunyanya kushanda, asi zvakadaro pombi chaiyo.

Kugadzira zvinokonzeresa

Nekuda kwekuti hapana mafirita anokonzeresa anotsanangurwa kune chero emabasa, pombi ichaita zvakakwana kuurayiwa nguva dzese dzekuita dzinotumirwa kune repository. Sezvo aya asiri iwo maitiro anodiwa kazhinji, isu tichagadzirisa mafirita emabasa.

Mafirita anogona kugadzirwa ari maviri mafomati: chete/kunze ΠΈ mitemo. Muchidimbu, only/except inobvumidza iwe kugadzirisa mafirita nezvinokonzeresa (merge_request, semuenzaniso - inogadzirisa basa kuti riitwe pese panogadzirwa chikumbiro chekubatanidza uye nguva dzese dzekuita dzinotumirwa kubazi rinova iro tsime mukubatanidzwa mukukumbira) nemazita emapazi (kusanganisira kushandisa mataurirwo enguva dzose); rules inokutendera iwe kugadzirisa seti yemamiriro uye, sarudzo, shandura mamiriro ekuita basa zvichienderana nekubudirira kwemabasa apfuura (when muGitLab CI/CD).

Ngatirangarirei seti yezvinodiwa - kusangana uye kuyedzwa chete kwekubatanidza zvikumbiro, kurongedza uye kutumira kuAzure DevOps - yekubatanidza zvikumbiro uye kusundira kuna tenzi, chizvarwa chezvinyorwa - zvekusundira kuna tenzi.

Chekutanga, ngatimisei kodhi yekubatanidza basa nekuwedzera chirevo chekusimudzira chinongokonzeresa chikumbiro chekubatanidza:

build job:
  # snip
  only:
    - merge_request

Zvino ngatigadzirisei basa rekurongedza kukonzeresa chikumbiro chekubatanidza uye kuwedzera kuzvipira kuna tenzi:

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

Sezvaunogona kuona, zvose zviri nyore uye zvakananga.

Iwe unogona zvakare kugadzirisa iro basa kuti ritange chete kana chikumbiro chekubatanidza chagadzirwa neicho chinangwa kana sosi bazi:

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

Mumamiriro ezvinhu anogona kushandiswa akasiyana akanyorwa pano; mitemo rules zvisingaenderani nemitemo only/except.

Kugadzirisa Artifact Saving

Apo basa riri kushanda build job tichava nekuvaka zvigadzirwa zvakagadzirwa zvinogona kushandiswa zvakare mumabasa anotevera. Kuti uite izvi, iwe unofanirwa kuwedzera nzira dzekugadzirisa basa, mafaera ayo achada kuchengetwa uye kushandiswazve mumabasa anotevera, kune kiyi. artifacts:

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

Nzira dzinotsigira makadhi emusango, izvo zvinoita kuti zvive nyore kuseta.

Kana basa richigadzira zvigadzirwa, ipapo rimwe nerimwe rinotevera basa rinozokwanisa kuzviwana - ivo vanozowanikwa munzira dzakafanana dzine chekuita nemudzi wekuchengetedza wavakaunganidzwa kubva pabasa rekutanga. Zvigadzirwa zviripo zvakare kurodha pawebhusaiti.

Iye zvino zvatava negadziriro yegadziriro yakagadzirira (uye yakasimbiswa), tinogona kuenderera mberi nekunyora zvinyorwa zvemabasa.

Tinonyora zvinyorwa

Zvichida, pane imwe nguva, mune imwe galaxy kure, kure, mapurojekiti ekuvaka (kusanganisira .net ndivo) kubva kumutsara wekuraira kwaiva marwadzo. Iye zvino unogona kuunganidza, kuedza uye kushambadza chirongwa ichi muzvikwata zvitatu:

dotnet build
dotnet test
dotnet pack

Nomuzvarirwo, kune mamwe nuances nekuda kwatichaita kuomesa mirairo neimwe nzira.

  1. Tinoda kusunungurwa, kwete debug, kuvaka, saka tinowedzera kune umwe neumwe murairo -c Release
  2. Kana tichiyedza, isu tinoda kuunganidza dhata pamusoro pekuvhara kodhi, saka isu tinofanirwa kubatanidza yekuvhara yekuongorora kumaraibhurari ebvunzo:
    1. Iyo package inofanirwa kuwedzerwa kumaraibhurari ese ebvunzo coverlet.msbuild: dotnet add package coverlet.msbuild kubva kufolda yeprojekiti
    2. Wedzera kune test launch command /p:CollectCoverage=true
    3. Ngatiwedzerei kiyi yekumisikidza basa rekuyedza kuti tiwane mibairo yekuvhara (ona pazasi)
  3. Pakurongedza iyo kodhi mumapakeji e nuget, isu tichaisa iyo inobuda dhairekitori yemapakeji: -o .

Kuunganidza kodhi yekuvhara data

Mushure mekuita bvunzo, Coverlet inoratidza nhamba dzekutanga kune iyo 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 inokutendera kuti utaure yenguva dzose kutaura kuti uwane manhamba, ayo anogona kubva awanikwa ari muchimiro chebheji. Chirevo chenguva dzose chinotsanangurwa muzvirongwa zvebasa nekiyi coverage; chirevo chinofanira kunge chine boka rekutora, kukosha kwaro kuchaendeswa kune bheji:

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

Pano tinowana zviverengero kubva mumutsara une kuvharika kwese nemitsetse.

Isu tinoburitsa mapakeji uye zvinyorwa

Tine zvese zviito zvakapihwa padanho rekupedzisira repombi - sezvo gungano uye bvunzo zvapfuura, tinogona kugovera zviitiko zvedu nenyika.

Kutanga, ngatitarisei kushambadza kune pasuru sosi:

  1. Kana iyo purojekiti isina nuget yekumisikidza faira (nuget.config), gadzira imwe itsva: dotnet new nugetconfig

    Yechii: Mufananidzo wacho unogona kunge usina mukana wekunyora kune zvepasi rose (mushandisi nemuchina) zvigadziriso. Kuti tisabate zvikanganiso, isu tichangogadzira gadziriso nyowani yenzvimbo uye tishande nayo.

  2. Ngatiwedzerei pasuru nyowani kugadziriso yenzvimbo: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - zita renzvimbo, harina kukosha
    2. url - URL yenzvimbo kubva padanho re "Kugadzirira maakaunti", nhanho yechitanhatu
    3. organization - zita resangano muAzure DevOps
    4. gitlab variable - zita rekushandura rine chiratidzo chekuwana chakawedzerwa kuGitLab ("Kugadzirira maakaunti", p. 11). Sezvingatarisirwa, muchimiro $variableName
    5. -StorePasswordInClearText - hack yekunzvenga kupinda kwarambwa kukanganisa (Handisi wekutanga kutsika reko iri)
    6. Kana pane kukanganisa zvinogona kubatsira kuwedzera -verbosity detailed
  3. Isu tinotumira iyo package kune sosi: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Isu tinotumira ese mapakeji kubva kune yazvino dhairekitori, saka *.nupkg.
    2. name - kubva padanho riri pamusoro.
    3. key - chero mutsara. MuAzure DevOps, muBatanidza kudyisa hwindo, mutsara wemuenzaniso unogara az.
    4. -skipduplicate - kana ukaedza kutumira pasuru yagara iripo pasina kiyi iyi, kwainozobva kunodzosera chikanganiso 409 Conflict; nekiyi, kutumira kuchasvetuka.

Zvino ngatigadzirirei kugadzirwa kwezvinyorwa:

  1. Kutanga, mune repository, mune master bazi, isu tinotanga iyo docfx chirongwa. Kuti uite izvi, unofanirwa kumhanya murairo kubva pamudzi docfx init uye nekudyidzana kuseta akakosha ma paramita ekuunganidza zvinyorwa. Tsanangudzo yakadzama yekuseta kweprojekiti kushoma pano.
    1. Paunenge uchigadzira, zvakakosha kutsanangura dhairekitori rekubuda ..public - GitLab nekusarudzika inotora zviri mukati meruzhinji folda pamudzi we repository sesosi yeMapeji. Nokuti iyo purojekiti ichave iri mufolda yakarongedzwa mune repository - wedzera yekubuda kune inotevera nhanho munzira.
  2. Ngatisundirei shanduko kuGitLab.
  3. Wedzera basa kune pombi configuration pages (izwi rakachengeterwa rekuita saiti yekushambadzira mabasa muGitLab Mapeji):
    1. Script:
      1. nuget install docfx.console -version 2.51.0 - isa docfx; Iyo vhezheni inopihwa kuti ive nechokwadi chekuti mapakeji ekuisa nzira dzakarurama.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - kuunganidza zvinyorwa
    2. Artifacts node:

pages:
  # snip
  artifacts:
    paths:
      - public

Lyrical digression nezve docfx

Pakutanga, pakugadzira purojekiti, ndakatsanangura iyo kodhi sosi yezvinyorwa semhinduro faira. Chinhu chikuru chakashata ndechekuti zvinyorwa zvinogadzirwa zvakare kumapurojekiti ebvunzo. Kana izvi zvisingakoshi, unogona kuseta kukosha uku kune node metadata.src:

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

  1. metadata.src.src: "../" - enda nhanho imwe kumusoro inoenderana nenzvimbo docfx.json, nokuti Kutsvaga kumusoro kwemuti wedhairekitori hakushande mumapateni.
  2. metadata.src.files: ["**/*.csproj"] - maitiro epasi rose, tinounganidza ese mapurojekiti eC # kubva kune ese madhairekitori.
  3. metadata.src.exclude: ["*.tests*/**"] - yepasirese pateni, bvisa zvese kubva kumaforodha ane .tests Mumusoro

Subtotal

Ichi chigadziriso chakareruka chinogona kugadzirwa mune chaiyo hafu yeawa uye akati wandei makapu ekofi, izvo zvinokutendera kuti utarise nechikumbiro chega chega chekubatanidza uye utumire kuna tenzi kuti kodhi iri kuvakwa uye bvunzo dziri kupfuura, kuunganidza itsva. pasuru, kugadzirisa zvinyorwa uye kufadza ziso nemabheji akanaka muchirongwa README.

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

Kutaura nezve mabheji

Kwakanga kuri nokuda kwavo kuti zvinhu zvose zvakatangwa!

Mabheji ane zvimiro zvepombi uye kuvharwa kwekodhi anowanikwa muGitLab mune CI/CD marongero muGtntral mapaipi block:

Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

Ndakagadzira bheji rine link yezvinyorwa papuratifomu shields.io - zvese zviri nyore ipapo, unogona kugadzira yako bheji uye woigamuchira uchishandisa chikumbiro.

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

Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

Azure DevOps Artifacts zvakare inobvumidza iwe kugadzira mabheji emapakeji anoratidza iyo yazvino vhezheni. Kuti uite izvi, mune sosi pawebhusaiti yeAzure DevOps, unofanirwa kudzvanya paGadzira bheji repakeji yakasarudzwa uye kukopa markup markup:

Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

Nhungamiro yeCI/CD muGitLab ye (Anenge) Absolute Newbie

Kuwedzera runako

Isu tinosimbisa zvakajairika zvimedu zvekugadzirisa

Ndichiri kunyora zvigadziriso uye ndichitsvaga kuburikidza nezvinyorwa, ndakawana inonakidza YAML chimiro - kushandisazve zvimedu.

Sezvauri kuona kubva pazvirongwa zvebasa, ese anoda tag windows kubva kumumhanyi, uye zvinokonzereswa pakutumira chikumbiro chekubatanidza kuna tenzi / kugadzira chikumbiro chekubatanidza (kunze kwezvinyorwa). Ngatiwedzerei ichi kuchidimbu chatichazoshandisazve:

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

Uye ikozvino isu tinogona kuisa iyo yakamboziviswa chidimbu mune tsananguro yebasa:

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

Mazita ezvimedu anofanira kutanga nenguva kuti asaturike sebasa.

Package versioning

Paunenge uchigadzira pasuru, mugadziri anotarisa mutsara wemirairo switch, uye mukusavapo kwavo, mafaira eprojekiti; Wawana iyo Version node, zvinotora kukosha kwayo sevhezheni yepasuru iri kuvakwa. Zvinoitika kuti kuti uvake pasuru ine vhezheni nyowani, iwe unofanirwa kuigadzirisa mupurojekiti faira kana kuipfuudza seyekuraira mutsara nharo.

Ngatiwedzerei chimwe chishuwo - regai nhamba dzakaderera mbiri mushanduro dzive gore uye zuva rekuvaka kwepakeji, uye wedzera prerelease shanduro. Ehe, iwe unogona kuwedzera iyi data kune purojekiti faira uye woitarisa isati yatumirwa yega yega - asi iwe unogona zvakare kuita izvi mupombi, kuunganidza iyo package vhezheni kubva kumamiriro uye kuipfuudza kuburikidza nekuraira mutsara nharo.

Ngatibvumiranei kuti kana meseji yekutumira ine mutsara wakadai release (v./ver./version) <version number> (rev./revision <revision>)?, tobva tatora vhezheni yepakiti kubva mumutsara uyu, toiwedzera nezuva razvino uye toipfuudza senharo kumurairo. dotnet pack. Mukushaikwa kwemutsara, isu hatingo unganidza pasuru.

Chinyorwa chinotevera chinogadzirisa dambudziko iri:

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

Kuwedzera script kune rimwe basa pack and deploy job uye tarisa kuungana kwemapakeji zvakanyanya kana paine mutsara wakapihwa mumeseji yekuzvipira.

Total

Mushure mekushandisa ingangoita hafu yeawa kusvika paawa tichinyora zvigadziriso, kugadzirisa mushell yenzvimbo uye, pamwe, mashoma mashoma asina kubudirira, takagamuchira gadziriso yakapusa yekuita otomatiki mabasa.

Ehe, GitLab CI/CD yakawedzera kuwanda uye yakawandisa kupfuura zvazvingaite mushure mekuverenga gwaro iri - icho hachisi chokwadi zvachose. Pane kunyange Auto DevOps hongukubvumira

ona otomatiki, gadzira, edza, tumira uye tarisa maapplication ako

Iye zvino zvirongwa ndezvekugadzirisa pombi yekuisa zvikumbiro muAzure, uchishandisa Pulumi uye nekuona otomatiki nzvimbo yakanangwa, iyo ichavharwa muchinyorwa chinotevera.

Source: www.habr.com

Voeg