O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

Po'o le fa'afefea ona maua ni pine matagofie mo lau poloketi i se tasi afiafi o fa'amatalaga faigofie

Masalo, soʻo se atinaʻe o loʻo i ai le itiiti ifo ma le tasi le poloketi fagafao i se taimi o loʻo i ai se mageso e uiga i pine matagofie ma statuses, code coverage, package versions in nuget ... Ma o lenei itch na taʻitaʻia aʻu e tusia lenei tusiga. I le sauniuni mo le tusiaina, na ou mauaina lenei matagofie i se tasi o aʻu galuega faatino:

O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

O lenei tusiga o le a savalia oe i le seti faʻavae o le faʻaauauina o le tuʻufaʻatasia ma le tuʻuina atu mo se poloketi faletusi vasega .Net Core i GitLab, faʻasalalau faʻamaumauga i GitLab Pages, ma tuleia afifi fausia i se fafaga tumaoti i Azure DevOps.

VS Code na faʻaaogaina e avea ma siosiomaga atinaʻe ma le faʻaopoopoga GitLab Galue Galuega (mo le faʻamaonia saʻo o le faila faila mai le siosiomaga atinaʻe).

Faʻamatalaga Pupuu

CD - o le taimi na e tuleia ai, ma ua uma ona pa'u mea uma i luga o le kalani?

O le a le CI / CD ma pe aisea e te manaʻomia ai - e faigofie ona e google. Su'e fa'amaumauga atoa ile fa'atulagaina o paipa ile GitLab faigofie foi. O iinei o le a ou faʻapuupuu ma, pe a mafai, e aunoa ma ni faaletonu e faʻamatalaina le faagasologa o le faiga mai le vaaiga a le manulele:

  • e tuʻuina atu e le atinaʻe se tautinoga i le fale teu oloa, fatuina se talosaga tuʻufaʻatasia i luga o le saite, po'o se isi lava auala, fa'aalia manino pe fa'ailoa amata le paipa,
  • o galuega uma e filifilia mai le faʻatulagaga, o tulaga e mafai ai ona faʻalauiloa i totonu o le faʻamatalaga tuʻuina atu,
  • fa'atulagaina galuega e tusa ma o latou tulaga,
  • laasaga e faʻatinoina i le faasologa - i.e. tutusa o galuega uma o lenei laasaga ua maeʻa,
  • afai e le manuia le tulaga (o lona uiga, le itiiti ifo ma le tasi o galuega o le tulaga ua le manuia), e taofi le paipa (toetoe lava o taimi uma),
  • afai e mae'a lelei laasaga uma, o le paipa e manatu ua manuia.

O lea la, ua tatou:

  • pipeline - o se seti o galuega faʻatulagaina i vaega e mafai ai ona e fausia, suʻega, faʻailoga pusa, faʻapipiʻi se fale ua maeʻa i se auaunaga ao, ma isi,
  • tulaga (tūlaga) - paipa faʻalapotopotoga faʻalapotopotoga, e aofia ai le 1+ galuega,
  • galuega (gāluega) o se iunite o galuega i le paipa. O lo'o i ai se fa'amaumauga (fa'atonu), tulaga fa'alauiloa, fa'atulagaina mo le fa'asalalauina/caching artifacts, ma sili atu.

E tusa ai ma lea, o le galuega pe a seti CI / CD e sau i lalo i le fatuina o se seti o galuega e faʻatinoina uma gaioiga talafeagai mo le fausiaina, suʻega ma le lolomiina o tulafono ma mea taua.

A'o le'i amataina: aisea?

  • Aisea Gitlab?

Aua ina ua tatau ona fausia ni fale teu oloa mo galuega fagafao, sa totogi i latou i le GitHub, ma sa ou matapeʻapeʻa. O fale teu oloa ua saoloto, ae o le taimi nei e le lava le mafuaaga ou te alu ai i GitHub.

  • Aisea e le o Azure DevOps Pipelines?

Talu ai o iina o le faʻatulagaga e tulagalua - o le malamalama i le laina faʻatonu e le manaʻomia. Faʻatasi ma kamupani git i fafo - i ni nai kiliki, faʻaulufaleina mai o SSH ki e tuʻuina atu i le fale teu oloa - faʻapea foʻi, o le paipa e faigofie ona faʻatulagaina e tusa lava pe le mai se faʻataʻitaʻiga.

Tulaga amata: mea e te maua ma mea e te manaʻo ai

E iai sau sikaipi:

  • fale teu oloa i GitLab.

Matou te manana'o:

  • faʻapotopotoga faʻapitoa ma suʻega mo talosaga tuʻufaʻatasia taʻitasi,
  • fausiaina o afifi mo talosaga tuʻufaʻatasia taʻitasi ma tulei i le matai, pe a fai o loʻo i ai se laina patino i le feʻau faʻatonu,
  • auina atu afifi fausia i se fafaga tumaoti i Azure DevOps,
  • faʻapotopotoga o faʻamaumauga ma faʻasalalauga i GitLab Itulau,
  • pine!11

O mana'oga fa'amatalaina fa'aletino e pa'u i luga o le fa'ata'ita'iga paipa nei:

  • Laasaga 1 - Fonotaga
    • Matou te aoina le code, faʻasalalau faila faila e fai ma mea taua
  • Laasaga 2 - su'ega
    • Matou te maua mea mai le fausiaina, faia suʻega, aoina faʻamaumauga faʻamaumauga
  • Laasaga 3 - Tuuina atu
    • Galuega 1 - fausia le pusa nuget ma lafo i Azure DevOps
    • Galuega 2 - matou te aoina le saite mai le xmldoc i le faʻailoga puna ma faʻasalalau i GitLab Pages

Tatou amata!

Aoina o le faatulagaga

Saunia tala

  1. Fausia se tala i Microsoft Azure

  2. Alu i le Azure DevOps

  3. Matou te faia se galuega fou

    1. Igoa - so'o se
    2. Va'aiga - so'o se
      O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

  4. A e kiliki i luga o le Create button, o le a faia le poloketi ma o le a toe faʻafeiloaʻi oe i lona itulau. I luga o lenei itulau, e mafai ona e faʻamalo mea e le manaʻomia e ala i le alu i le faʻatulagaina o galuega (le fesoʻotaʻiga i lalo i le lisi i le agavale -> Vaʻaiga lautele -> Azure DevOps Services poloka)
    O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

  5. Alu i Atrifacts, kiliki Fausia fafaga

    1. Ulufale le igoa o le puna
    2. Filifili le va'aia
    3. Aveese le siaki Fa'aaofia afifi mai fa'apogai lautele lautele, ina ia aua ne'i liua le puna i se clone nuget dump
      O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

  6. Kiliki Fesoʻotaʻi e fafaga, filifili Visual Studio, kopi Puna mai le masini Setup poloka
    O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

  7. Alu ile fa'asologa o tala, filifili le Personal Access Token
    O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

  8. Fausia se fa'ailoga fou avanoa

    1. Igoa - faifua
    2. Faalapotopotoga - I le taimi nei
    3. E aoga mo le maualuga ole 1 tausaga
    4. Va'aiga - Fa'apipi'i/ Faitau ma Tusi
      O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

  9. Kopi le faailoga na faia - pe a uma ona tapunia le faamalama modal, o le a le maua le tau

  10. Alu i le fale teu oloa i GitLab, filifili tulaga CI / CD
    O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

  11. Fa'alautele le poloka Variables, fa'aopoopo se mea fou

    1. Igoa - so'o se mea e aunoa ma ni avanoa (o le a maua i le atigi fa'atonu)
    2. Taua - avanoa fa'ailoga mai le parakalafa 9
    3. Filifili Mask fesuiaiga
      O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

Ole mea lea e fa'auma ai le mua'i fa'atulagaina.

Saunia le auivi o le faatulagaga

Ona o le faaletonu, CI/CD configuration i GitLab faʻaaogaina le faila .gitlab-ci.yml mai le a'a o le fale teu oloa. E mafai ona e setiina se ala faʻapitoa i lenei faila i totonu o le fale teu oloa, ae i lenei tulaga e le manaʻomia.

E pei ona e vaʻaia mai le faʻaopoopoga, o le faila o loʻo i ai se faʻatulagaga i le faatulagaga YAML. O fa'amatalaga fa'amaumauga po'o fea ki e mafai ona i ai i le pito i luga o le fa'atulagaga, ma i vaega ta'itasi fa'amoega.

Muamua, seʻi o tatou faʻaopoopoina se fesoʻotaʻiga i le docker image i le faila faʻatulagaina, lea o le a faia ai galuega. Mo lenei mea tatou te maua .Net Core ata itulau ile Docker Hub. le GitHub o loʻo i ai se taʻiala auiliili ile ata e filifili mo galuega eseese. O se ata e iai le .Net Core 3.1 e talafeagai mo i matou e fausia, o lea ia lagona le saoloto e faʻaopoopo le laina muamua i le faʻatulagaga

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

I le taimi nei, pe a faʻalauiloa le paipa mai le faleoloa ata a Microsoft, o le a faʻapipiʻiina le ata faʻapitoa, lea o le a faʻatinoina ai galuega uma mai le faʻatulagaga.

O le isi laasaga o le faʻaopoopo tūlaga's. I le le mafai, GitLab faʻamatalaina 5 laasaga:

  • .pre - faia e oʻo i laʻasaga uma,
  • .post - faia pe a uma laʻasaga uma,
  • build - muamua mulimuli ane .pre tulaga,
  • test - vaega lona lua,
  • deploy - o le vaega lona tolu.

E leai se mea e taofia oe mai le ta'utino manino atu, peita'i. O le fa'asologa o lo'o fa'amaoti mai ai laasaga e a'afia ai le fa'atonuga o lo'o fa'atinoina. Mo le atoatoa, tatou faʻaopoopo i le faʻatulagaga:

stages:
  - build
  - test
  - deploy

Mo le debugging, e talafeagai le mauaina o faʻamatalaga e uiga i le siosiomaga o loʻo faʻatinoina ai galuega. Se'i o tatou fa'aopoopo se seti fa'avaomalo o fa'atonuga o le a fa'atinoina a'o le'i faia galuega ta'itasi before_script:

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

O lo'o tumau pea le fa'aopoopoina a itiiti ifo ma le tasi le galuega ina ia a tu'uina atu le commits, o le a amata le paipa. Mo le taimi nei, tatou faʻaopoopo se galuega gaogao e faʻaalia:

dummy job:
  script:
    - echo ok

Matou te amata faʻamaonia, matou te maua se feʻau o loʻo lelei mea uma, matou te faia, matou te tuleia, matou te vaʻavaʻai i taunuʻuga i luga o le saite ... Ma matou maua se faʻamatalaga sese - bash: .PSVersion: command not found. wtf?

E fetaui mea uma - e ala i le le mafai, tagata tamoʻe (nafa ma le faʻatinoina o faʻamaumauga o galuega ma saunia e GitLab) faʻaoga bash e faatino poloaiga. E mafai ona e faʻaleleia lenei mea e ala i le faʻamalamalamaina manino i le faʻamatalaga o galuega poʻo a pine e tatau ona i ai i le tagata taʻavale paipa:

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

Matagofie! Ua fa'agasolo nei le paipa.

O se tagata faitau mataalia, i le toe faia o laasaga na faʻaalia, o le a matauina ua maeʻa le galuega i le tulaga test, e ui lava matou te leʻi faʻamalamalamaina le tulaga. E pei ona e mateina test o le laasaga e le masani ai.

Sei o tatou faʻaauau pea le fatuina o le auivi faʻatulagaina e ala i le faʻaopoopoina o galuega uma o loʻo faʻamatalaina i luga:

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

Na matou maua se paipa e le fa'apitoa, ae sa'o.

Fa'atonu fa'aoso

Ona o le mea moni e leai ni faʻailoga faʻaoso e faʻamaonia mo soʻo se galuega, o le paipa o le a atoatoa ia fa'atinoina i taimi uma e tuleia ai se tautinoga i le fale teu oloa. Talu ai e le o le amio e manaʻomia i le lautele, o le a matou faʻatutuina ni faʻamalo mo galuega.

E mafai ona fa'atulaga filiga i ni faiga se lua: na'o/vagana и tulafono. Fa'apuupuu, only/except fa'ataga oe e fa'atulaga filiga e fa'aoso (merge_request, mo se faʻataʻitaʻiga - faʻatulagaina le galuega e faʻatino i taimi uma e faia ai se talosaga toso ma taimi uma e tuʻuina atu ai commit i le lala o loʻo faʻapogai ai le talosaga tuʻufaʻatasia) ma igoa o lala (e aofia ai le faʻaaogaina o faʻamatalaga masani); rules faʻatagaina oe e faʻavasegaina se seti o tulaga ma, pe a fai, sui le tulaga faʻatinoina o galuega e faʻatatau i le manuia o galuega muamua (when i GitLab CI/CD).

Sei o tatou manatua se seti o manaʻoga - faʻapotopotoga ma suʻega mo naʻo le tuʻufaʻatasia o talosaga, afifiina ma auina atu i Azure DevOps - mo le tuʻufaʻatasia talosaga ma tulei i le matai, faʻasologa o faʻamaumauga - mo le tuleia i le matai.

Muamua, se'i o tatou fa'atulaga le galuega faufale e ala i le fa'aopoopoina o se tulafono e fa'amu i luga ole talosaga tu'ufa'atasi:

build job:
  # snip
  only:
    - merge_request

Sei o tatou setiina le galuega afifiina e faʻaulu i luga o le talosaga tuʻufaʻatasia ma faʻaopoopo commits i le matai:

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

E pei ona e vaʻaia, o mea uma e faigofie ma saʻo.

E mafai foi ona e setiina le galuega e mu pe afai e faia se talosaga tuʻufaʻatasia ma se faʻamoemoega patino poʻo se lala faʻapogai:

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

I lalo o tulaga, e mafai ona e faʻaaogaina fesuiaiga o loo lisiina iinei; tulafono rules le ogatasi ma tulafono only/except.

Fa'atulaga Mea Fa'asaoina

I le taimi o se galuega build job o le a tatou fausia mea taua e mafai ona toe faʻaaogaina i galuega mulimuli ane. Ina ia faia lenei mea, e tatau ona e faʻaopoopoina ala i le faʻatulagaina o galuega, o faila e te manaʻomia e teu ai ma toe faʻaaogaina i galuega nei, i le ki. artifacts:

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

E lagolagoina e ala fa'ailoga vao, lea e mautinoa e fa'afaigofie ai ona fa'atulaga.

Afai o se galuega e fatuina mea taua, ona mafai lea ona maua e isi galuega mulimuli ane - o le a tuʻuina i luga o auala tutusa e fesoʻotaʻi ma le aʻa teu oloa na aoina mai le galuega muamua. O lo'o avanoa fo'i mea fa'apitoa mo le la'uina i luga ole saite.

I le taimi nei ua saunia le faʻatulagaga faʻatulagaina (ma faʻataʻitaʻiina), e mafai ona tatou faʻaauau le tusiaina o tusitusiga mo galuega.

Matou te tusia ni tusitusiga

Masalo, i se tasi taimi, i se aniva mamao, mamao, o le fausiaina o galuega (e aofia ai i luga o le .net) mai le laina o le poloaiga o se tiga. Ole taimi nei e mafai ona e fausia, faʻataʻitaʻi ma faʻasalalau le poloketi i 3 'au:

dotnet build
dotnet test
dotnet pack

E masani lava, o loʻo i ai ni nuances e mafua ai ona tatou faʻalavelaveina tulafono.

  1. Matou te mananaʻo i se faʻasaʻolotoga, ae le o se faʻailoga faʻapipiʻi, o lea matou te faʻaopoopo i poloaiga taʻitasi -c Release
  2. A'o su'ega, matou te manana'o e aoina fa'amaumauga o fa'amaumauga, o lea e mana'omia ai le fa'aofiina o se su'esu'ega fa'asalalau i faletusi su'ega:
    1. Fa'aopoopo le afifi i faletusi su'ega uma coverlet.msbuild: dotnet add package coverlet.msbuild mai le faila o galuega
    2. Fa'aopoopo ile fa'atonuga ole su'ega /p:CollectCoverage=true
    3. Fa'aopoopo se ki i le fa'atonuga o galuega su'ega e maua ai fa'ai'uga fa'asalalau (silasila i lalo)
  3. A faʻapipiʻi le code i totonu o pusa nuget, seti le lisi o mea e fai mo afifi: -o .

Aoina mai fa'amatalaga fa'amatalaga fa'ailoga

A maeʻa suʻega, e lolomi e Coverlet fuainumera faʻamaumauga i le faʻamafanafanaga:

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 faʻatagaina oe e faʻamaonia se faʻamatalaga masani e maua ai fuainumera, lea e mafai ona maua i le tulaga o se pine. O le fa'aaliga masani o lo'o fa'amaonia i le fa'atulagaina o galuega ma le ki coverage; o le fa'aaliga e tatau ona i ai se vaega pu'eina, o lona tau o le a pasi atu i le pine:

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

O iinei tatou te maua ai faʻamaumauga mai se laina ma le aofaʻi o laina laina.

Fa'asalalau afifi ma fa'amaumauga

O gaioiga uma e lua o loʻo faʻatulagaina mo le vaega mulimuli o le paipa - talu ai ua pasia le faʻapotopotoga ma suʻega, e mafai ona faʻasoa a tatou atinaʻe i le lalolagi.

Muamua, mafaufau e lolomi i le puna o pusa:

  1. Afai o le poloketi e leai se faila faʻatulagaina nuget (nuget.config), fai se mea fou: dotnet new nugetconfig

    Mo le a: atonu e le maua e le ata le avanoa tusitusi i le lalolagi (tagata faʻaoga ma masini) faʻasalalauga. Ina ia aua nei maua ni mea sese, matou te fatuina se faatulagaga fou i le lotoifale ma galulue faatasi.

  2. Se'i o tatou fa'aopoopoina se fa'apogai fou i le fa'alapotopotoga fa'apitonu'u: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - igoa fa'apitonu'u puna, e le faitio
    2. url - URL o le puna mai le tulaga "Sauniaina tala", itulau 6
    3. organization - igoa fa'alapotopotoga i Azure DevOps
    4. gitlab variable - le igoa o le fesuiaiga ma le faʻailoga avanoa faʻaopoopo i le GitLab ("Sauniaina tala", itulau 11). E masani lava, i le faatulagaga $variableName
    5. -StorePasswordInClearText - o se hack e faʻafefe ai le avanoa faʻatagaina mea sese (E le o a'u le tagata muamua e laa i luga o lenei salu)
    6. I tulaga o mea sese, atonu e aoga le faʻaopopo -verbosity detailed
  3. Auina atu le afifi i le puna: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Matou te lafoina uma afifi mai le lisi o loʻo iai nei, o lea *.nupkg.
    2. name - mai le laasaga i luga.
    3. key - so'o se laina. I Azure DevOps, i le Connect to feed window, o le faʻataʻitaʻiga e masani lava o le laina az.
    4. -skipduplicate - pe a taumafai e lafo se afifi o loʻo i ai e aunoa ma lenei ki, o le puna o le a toe faʻafoʻi mai se mea sese 409 Conflict; faatasi ai ma le ki, o le a misia le auina atu.

Sei o tatou setiina le fausiaina o pepa:

  1. Muamua, i totonu o le fale teu oloa, i totonu o le matai paranesi, matou te amataina le poloketi docfx. Ina ia faia lenei mea, taʻavale le poloaiga mai le aʻa docfx init ma fa'afeso'ota'i fa'atulaga vaega autu mo fa'amaumauga faufale. Fa'amatalaga au'ili'ili ole fa'atulagaina ole poloketi iinei.
    1. A'o fa'apipi'i, e taua le fa'ama'oti o le fa'atonuga o galuega ..public - GitLab e le mafai ona ave mea o loʻo i totonu o le faila lautele i le aʻa o le fale teu oloa e fai ma puna mo Itulau. Aua o le a tu'u le poloketi i totonu o se pusa fa'aputu i totonu o le fale teu oloa - fa'aopoopo se mea fa'atino i le tulaga maualuga i le ala.
  2. Tatou tulei suiga ile GitLab.
  3. Fa'aopoopo se galuega ile fa'atulagaina ole paipa pages (upu fa'aagaga mo galuega fa'asalalau i luga ole laiga ile GitLab Pages):
    1. Mau:
      1. nuget install docfx.console -version 2.51.0 - fa'apipi'i le docfx; o le faʻasologa o loʻo faʻamaonia e faʻamautinoa ai e saʻo auala faʻapipiʻi afifi.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - aoina o fa'amaumauga
    2. Node meafaitino:

pages:
  # snip
  artifacts:
    paths:
      - public

Lisi fa'aupuga e uiga i le docfx

I le taimi muamua, pe a faʻatulagaina se poloketi, na ou faʻamaonia le puna code mo faʻamaumauga o se faila fofo. O le fa'aletonu autu o le faia lea o fa'amaumauga mo su'ega su'ega. I le tulaga e le manaʻomia, e mafai ona e setiina lenei tau i le node metadata.src:

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

  1. metadata.src.src: "../" - matou te alu i le tasi tulaga i luga e faʻatatau i le nofoaga docfx.json, ona i mamanu, e le aoga le su'eina o le la'au fa'atonu.
  2. metadata.src.files: ["**/*.csproj"] - o se fa'asologa o le lalolagi, matou te aoina uma C # poloketi mai fa'atonuga uma.
  3. metadata.src.exclude: ["*.tests*/**"] - fa'asologa o le lalolagi, fa'ate'a mea uma mai fa'ailoga ma .tests I le ulutala

Laulelei

O sea faʻatulagaga faigofie e mafai ona faia i le na o le afa itula ma ni nai ipu kofe, lea o le a mafai ai e oe ona siaki le faʻailoga ua fausia ma pasi suʻega, fausia se afifi fou, faʻafouina le faʻamaumauga ma faʻafiafia mata ma le matagofie. pine i le README o le poloketi ma talosaga tuʻufaʻatasia taʻitasi ma lafo i le matai.

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

Talanoa i pine

Ona o latou, a uma mea uma, na amata ai mea uma!

O pine fa'atasi ai ma tulaga o paipa ma fa'ailoga e maua i GitLab ile CI/CD fa'atulagaina ile poloka paipa Gtntral:

O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

Na ou faia se pine faʻatasi ma se fesoʻotaʻiga i faʻamaumauga i luga o le tulaga talita.io - o mea uma e faigofie lava iina, e mafai ona e fatuina lau oe lava pine ma maua e faʻaaoga ai se talosaga.

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

O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

Azure DevOps Artifacts e mafai ai foi ona e faia ni pine mo afifi ma le lomiga fou. Ina ia faia lenei mea, i le puna i luga o le Azure DevOps site, e tatau ona e kiliki i luga Fausia pine mo le afifi filifilia ma kopi le faʻailoga faʻailoga:

O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

O se taʻiala ile CI/CD ile GitLab mo le (toetoe lava) matua amata

Faaopoopoina le matagofie

Fa'ailogaina Fa'ailoga Fa'asologa masani

Aʻo ou tusia le faʻatulagaga ma suʻesuʻe i faʻamaumauga, na ou maua ai se mea manaia o le YAML - toe faʻaaogaina vaega.

E pei ona e vaʻaia mai le faʻatulagaina o galuega, latou te manaʻomia uma le pine windows i le tagata tamo'e, ma fa'aosoina pe a tu'uina atu se talosaga tu'ufa'atasia i le matai/faia (sei vagana ai fa'amaumauga). Seʻi o tatou faʻaopoopoina lenei mea i le vaega o le a tatou toe faʻaaogaina:

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

Ma o lenei e mafai ona matou faʻaofiina le vaega na faʻaalia muamua i le faʻamatalaga o galuega:

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

O igoa vaega e tatau ona amata i se togi, ina ia le faauigaina o se galuega.

Fa'aliliuga afifi

Pe a fatuina se afifi, e siaki e le tagata faʻapipiʻi le suiga o laina laina, ma i lo latou toesea, faila faila; pe a maua se node Version, e ave lona tau e pei o le lomiga o le afifi o loo fausia. E foliga mai ina ia mafai ona fausia se afifi ma se lomiga fou, e te manaʻomia le faʻafouina i le faila o le poloketi pe pasi e avea o se finauga laina laina.

Se'i o tatou fa'aopoopoina se isi Lisi Mana'oga - tu'u le numera la'ititi e lua i le fa'asologa o le tausaga ma fausia le aso o le afifi, ma fa'aopoopo i ai fa'asalalauga muamua. Ioe, e mafai ona e faʻaopopoina nei faʻamatalaga i le faila o le poloketi ma siaki aʻo leʻi tuʻuina atu taʻitasi - ae e mafai foi ona e faia i le paipa, aoina le faʻasologa o le afifi mai le tala ma pasi atu i le finauga laina laina.

Sei o tatou malilie pe afai o le commit message o loʻo i ai se laina pei release (v./ver./version) <version number> (rev./revision <revision>)?, ona matou ave lea o le faʻasologa o le afifi mai lenei laina, faʻaopoopo i le aso o loʻo iai nei ma pasi e fai ma finauga i le poloaiga dotnet pack. I le leai o se laina, matou te le aoina le afifi.

O le fa'asologa o lo'o i lalo e foia ai lenei fa'afitauli:

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

Fa'aopoopoina o se tusitusiga i se galuega pack and deploy job ma mataʻituina le faʻapipiʻiina o afifi i le i ai o se manoa tuʻuina atu i le feʻau commit.

Aofaʻi

A maeʻa ona faʻaalu pe a ma le afa itula poʻo le itula e tusia ai le faʻatulagaga, faʻapipiʻi i totonu o le powershell i le lotoifale ma, atonu, o ni nai faʻalauiloa le manuia, matou maua se faʻatulagaga faigofie mo le faʻaogaina o galuega masani.

Ioe, GitLab CI / CD e sili atu le lautele ma faʻalauteleina nai lo le foliga mai pe a uma ona faitau lenei taʻiala - e le moni lava lena mea. E oo lava i ai Auto DevOps ofaʻatagaina

otometi ona iloa, fausia, su'e, fa'apipi'i, ma mata'itu au talosaga

O le taimi nei o fuafuaga o le faʻatulagaina o se paipa mo le faʻapipiʻiina o talosaga i Azure, faʻaaoga Pulumi ma otometi le fuafuaina o le siosiomaga faʻatatau, lea o le a aofia i le isi tusiga.

puna: www.habr.com

Faaopoopo i ai se faamatalaga