Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

Oswa ki jan yo ka resevwa bèl badj pou pwojè ou a nan yon aswè nan kodaj rilaks

Pwobableman, chak devlopè ki gen omwen yon pwojè bèt kay nan kèk pwen gen yon demanjezon pou bèl badj ak estati, kouvèti kòd, vèsyon pake nan nuget ... Ak demanjezon sa a te mennen m 'ekri atik sa a. Nan pwosesis la nan prepare yo ekri li, mwen akeri bote sa a nan youn nan pwojè mwen yo:

Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

Atik sa a pral kouvri konfigirasyon debaz nan entegrasyon kontinyèl ak livrezon pou yon pwojè bibliyotèk klas .Net Core nan GitLab, pibliye dokiman nan GitLab Pages epi voye pakè kolekte nan yon manje prive nan Azure DevOps.

VS Kòd ak ekstansyon an te itilize kòm yon anviwònman devlopman GitLab Workflow (pou valide dosye paramèt la dirèkteman nan anviwònman devlopman an).

Brèf entwodiksyon

CD se lè ou jis pouse, men kliyan an te deja pèdi tout bagay?

Ki sa ki CI/CD ak poukisa li nesesè? Ou ka fasilman google li. Jwenn dokiman konplè sou konfigirasyon tiyo nan GitLab tou fasil. Isit la mwen pral yon ti tan epi, si sa posib, san defo, dekri pwosesis la nan sistèm nan yon vi zwazo:

  • pwomotè a voye yon angajman nan repozitwa a, kreye yon demann fizyon atravè sit entènèt la, oswa nan kèk lòt fason eksplisit oswa implicitement lanse tiyo a,
  • soti nan konfigirasyon an, tout travay yo chwazi ki gen kondisyon ki pèmèt yo dwe lanse nan yon kontèks bay,
  • travay yo òganize selon etap yo,
  • etap yo egzekite nan vire - i.e. paralèl tout travay nan etap sa a fini,
  • si yon etap echwe (sa vle di omwen youn nan travay yo nan etap la echwe) - tiyo a sispann (prèske toujou),
  • si tout etap yo fini avèk siksè, tiyo a konsidere kòm siksè.

Kidonk nou genyen:

  • tiyo se yon seri travay ki òganize an etap kote ou ka rasanble, teste, pake kòd, deplwaye asanble fini an nan yon sèvis nwaj, elatriye.
  • etap (etap) - inite òganizasyon tiyo, gen 1+ travay,
  • travay (travay) se yon inite travay nan yon tiyo. Konsiste de yon script (obligatwa), kondisyon lansman, anviwònman pou pibliye / kachèt zafè ak plis ankò.

An konsekans, travay la lè mete CI/CD vini desann nan kreye yon seri travay ki aplike tout aksyon ki nesesè pou rasanble, tès ak pibliye kòd ak zafè.

Anvan nou kòmanse: poukisa?

  • Poukisa GitLab?

Paske lè bezwen an te parèt pou kreye depo prive pou pwojè bèt kay, yo te peye yo sou GitHub, e mwen te visye. Repozitwa yo te vin gratis, men pou kounye a sa a se pa yon bon rezon ase pou m 'ale nan GitHub.

  • Poukisa yo pa Azure DevOps Pipelines?

Paske konfigirasyon an se senp - ou pa menm bezwen konesans liy lòd. Entegrasyon ak founisè git ekstèn - nan yon koup de klik, enpòte kle SSH pou voye komèt nan repozitwa a - tou, tiyo a fasil konfigirasyon menm san yon modèl.

Kòmanse pozisyon: sa ou genyen ak sa ou vle

Nou genyen:

  • depo nan GitLab.

Nou vle:

  • asanble otomatik ak tès pou chak demann fizyone,
  • bati pakè pou chak demann fizyon ak pouse bay mèt la, depi gen yon sèten liy nan mesaj la komèt,
  • voye pakè kolekte nan yon manje prive nan Azure DevOps,
  • asanble dokiman ak piblikasyon nan Paj GitLab,
  • badj!11

Kondisyon ki dekri yo anfòm natirèlman nan modèl tiyo sa a:

  • Etap 1 - asanble
    • Nou kolekte kòd la, pibliye dosye pwodiksyon yo kòm zafè
  • Etap 2 - tès
    • Nou resevwa zafè nan etap konstriksyon, fè tès, kolekte done kouvèti kòd
  • Etap 3 - voye
    • Travay 1 - kolekte pake nuget la epi voye li bay Azure DevOps
    • Travay 2 - nou rasanble sit la soti nan xmldoc nan kòd sous epi pibliye li nan Paj GitLab

An n kòmanse!

Rasanble konfigirasyon an

Prepare kont yo

  1. Kreye yon kont nan Microsoft Azure

  2. Ale nan Azure DevOps

  3. Kreye yon nouvo pwojè

    1. Non - nenpòt
    2. Vizibilite - nenpòt
      Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

  4. Lè w klike sou bouton Kreye a, pwojè a pral kreye epi w ap mennen w nan paj li a. Nan paj sa a, ou ka enfim karakteristik ki pa nesesè lè w ale nan anviwònman pwojè yo (pi ba lyen nan lis la sou bò gòch la -> Apèsi sou lekòl la -> Azure DevOps Sèvis blòk)
    Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

  5. Ale nan Atrifacts, klike sou Kreye manje

    1. Antre non sous la
    2. Chwazi vizibilite
    3. Dezaktive bwat la Mete pakè ki soti nan sous piblik komenpou sous la pa tounen yon pil fatra nan yon script nuget
      Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

  6. Klike sou Konekte pou nouri, chwazi Visual Studio, kopye Sous soti nan blòk Enstalasyon machin lan
    Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

  7. Ale nan paramèt kont, chwazi jeton Aksè Pèsonèl
    Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

  8. Kreye yon nouvo jeton aksè

    1. Non - abitrè
    2. Òganizasyon - aktyèl
    3. Peryòd validite: maksimòm 1 ane
    4. Dimansyon - Anbalaj/Li & Ekri
      Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

  9. Kopi siy kreye a - apre yo fin fèmen fenèt modal la valè a pap disponib

  10. Ale nan anviwònman depo yo nan GitLab, chwazi anviwònman CI/CD
    Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

  11. Elaji blòk Varyab la epi ajoute yon nouvo

    1. Non - nenpòt ki san espas (ap disponib nan koki kòmand la)
    2. Valè se siy aksè a soti nan etap 9 la
    3. Chwazi varyab Mask
      Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

Sa a konplete konfigirasyon preliminè a.

Prepare kad konfigirasyon an

Pa default, fichye a itilize pou konfigirasyon CI/CD nan GitLab se .gitlab-ci.yml soti nan rasin depo a. Ou ka configured yon chemen koutim nan fichye sa a nan paramèt depo yo, men nan ka sa a li pa nesesè.

Kòm ou ka wè nan ekstansyon an, dosye a gen konfigirasyon nan fòma a YAML. Dokimantasyon an dekri an detay ki kle yo ka genyen nan nivo siperyè konfigirasyon an, ak nan chak nivo enbrike yo.

Premyèman, ann ajoute nan fichye konfigirasyon an yon lyen nan imaj la Docker kote travay yo pral egzekite. Pou fè sa nou jwenn .Net Nwayo imaj paj sou Docker Hub. Nan GitHub Gen yon gid detaye sou ki imaj yo chwazi pou travay diferan. Yon imaj ki gen .Net Core 3.1 apwopriye pou nou bati, kidonk santi yo lib yo ajoute li kòm premye liy nan konfigirasyon an.

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

Koulye a, lè ou kòmanse tiyo a, yo pral telechaje imaj la espesifye nan repozitwa a imaj Microsoft, nan ki tout travay ki soti nan konfigirasyon an pral egzekite.

Pwochen etap la se ajoute etapa. Pa default, GitLab defini 5 etap:

  • .pre - te pote nan tout etap,
  • .post - fè apre tout etap,
  • build - premye apre .pre etap,
  • test - dezyèm faz,
  • deploy - twazyèm etap.

Pa gen anyen ki anpeche w deklare yo klèman, sepandan. Lòd etap yo nan lis la afekte lòd yo ranpli. Pou konplè, ann ajoute nan konfigirasyon an:

stages:
  - build
  - test
  - deploy

Pou debogaj, li fè sans pou jwenn enfòmasyon sou anviwònman kote travay yo egzekite. Ann ajoute yon seri kòmandman mondyal ki pral egzekite anvan chak travay lè l sèvi avèk before_script:

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

Li rete pou ajoute omwen yon travay pou lè yo voye komèt, tiyo a ap kòmanse. Pou kounye a, ann ajoute yon travay vid pou demonstrasyon:

dummy job:
  script:
    - echo ok

Nou kòmanse validation, jwenn yon mesaj ke tout bagay anfòm, komèt, pouse, gade rezilta yo sou sit la ... Epi nou jwenn yon erè script - bash: .PSVersion: command not found. WTF?

Tout bagay se lojik - pa default, kourè (responsab pou egzekite scripts travay ak bay GitLab) itilize bash pou egzekite kòmandman yo. Ou ka ranje sa a lè w endike klèman nan deskripsyon travay la ki tags moun kap kouri tiyo k ap egzekite a ta dwe genyen:

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

Gwo! Tiyo a ap kouri kounye a.

Yon lektè atantif, repete etap sa yo, pral remake ke travay la fini nan etap la test, byenke nou pa t presize etap la. Kòm ou ta ka devine, test se etap default la.

Ann kontinye kreye skelèt konfigirasyon an lè nou ajoute tout travay ki dekri pi wo a:

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

Nou te resevwa yon tiyo ki pa patikilyèman fonksyonèl, men kanmenm kòrèk.

Mete kanpe deklanche

Akòz lefèt ke pa gen okenn filtè deklanche yo espesifye pou nenpòt nan travay yo, tiyo a pral konplètman egzekite chak fwa komèt yo voye nan repozitwa a. Depi sa a se pa konpòtman an vle an jeneral, nou pral configured filtè deklanche pou travay yo.

Filtè yo ka konfigirasyon nan de fòma: sèlman/eksepte и règleman. An rezime, only/except pèmèt ou konfigirasyon filtè pa deklanche (merge_request, pou egzanp - konfigirasyon travay la dwe egzekite chak fwa yo kreye yon demann fizyon epi chak fwa yo voye komèt nan branch ki se sous la nan demann fizyon an) ak non branch (ki gen ladan lè l sèvi avèk ekspresyon regilye); rules pèmèt ou personnaliser yon seri kondisyon epi, opsyonèlman, chanje kondisyon ekzekisyon travay la depann de siksè travay anvan yo (when nan GitLab CI/CD).

Ann sonje seri kondisyon yo - asanble ak tès sèlman pou demann fizyon, anbalaj ak voye bay Azure DevOps - pou demann fizyon ak pouse bay mèt la, jenerasyon dokiman - pou pouse bay mèt la.

Premyèman, ann mete kanpe yon travay asanble kòd pa ajoute yon règ deklanche ki sèlman deklanche yon demann fizyone:

build job:
  # snip
  only:
    - merge_request

Koulye a, ann konfigirasyon travay anbalaj la pou deklanche yon demann fizyon epi ajoute komèt bay mèt la:

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

Kòm ou ka wè, tout bagay se senp epi dwat.

Ou kapab tou configured travay la pou deklanche sèlman si yo kreye yon demann fizyon ak yon sib espesifik oswa yon branch sous:

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

Nan kondisyon li ka itilize varyab ki nan lis isit la; règ rules pa konpatib ak règ yo only/except.

Konfigirasyon artefact ekonomize

Pandan travay la ap kouri build job nou pral gen bati zafè kreye ki ka reyitilize nan travay ki vin apre yo. Pou fè sa, ou bezwen ajoute chemen nan konfigirasyon travay la, dosye ansanm ki pral bezwen yo dwe sove epi itilize ankò nan travay ki vin apre yo, nan kle a. artifacts:

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

Chemen sipòte wildcards, ki definitivman fè yo pi fasil yo mete.

Si yon travay kreye zafè, Lè sa a, chak travay ki vin apre yo pral kapab jwenn aksè nan yo - yo pral lokalize sou menm chemen yo parapò ak rasin nan depo ansanm ak yo te kolekte nan travay orijinal la. Afèk yo disponib tou pou telechaje sou sit entènèt la.

Kounye a ke nou gen yon kad konfigirasyon pare (ak verifye), nou ka ale nan aktyèlman ekri Scripts pou travay.

Nou ekri scripts

Petèt, yon fwa sou yon tan, nan yon galaksi byen lwen, byen lwen, bati pwojè (ki gen ladan yo .net) soti nan liy lan kòmand te yon doulè. Koulye a, ou ka rasanble, teste ak pibliye pwojè a nan 3 ekip:

dotnet build
dotnet test
dotnet pack

Natirèlman, gen kèk nuans akòz ki nou pral konplike kòmandman yo yon ti jan.

  1. Nou vle yon lage, pa yon debug, bati, kidonk nou ajoute nan chak lòd -c Release
  2. Lè tès la, nou vle kolekte done sou kouvèti kòd, kidonk nou bezwen konekte yon analizè kouvèti ak bibliyotèk tès yo:
    1. Yo ta dwe ajoute pake a nan tout bibliyotèk tès yo coverlet.msbuild: dotnet add package coverlet.msbuild soti nan katab pwojè a
    2. Ajoute lòd lanse tès la /p:CollectCoverage=true
    3. Ann ajoute yon kle nan konfigirasyon travay tès la pou jwenn rezilta pwoteksyon (gade anba a)
  3. Lè anbalaj kòd la nan pakè nuget, nou pral mete anyè pwodiksyon pou pakè yo: -o .

Kolekte done kouvèti kòd

Apre w fin fè tès yo, Coverlet montre estatistik lansman nan konsole a:

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 pèmèt ou presize yon ekspresyon regilye pou jwenn estatistik, ki ka Lè sa a, jwenn nan fòm lan nan yon badj. Ekspresyon regilye a espesifye nan anviwònman travay yo ak kle a coverage; ekspresyon an dwe genyen yon gwoup kaptire, valè ki pral transfere nan badj la:

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

Isit la nou jwenn estatistik ki soti nan yon liy ak pwoteksyon total pa liy.

Nou pibliye pakè ak dokiman

Nou gen tou de aksyon yo asiyen nan dènye etap la nan tiyo a - depi asanble a ak tès yo te pase, nou ka pataje devlopman nou yo ak mond lan.

Premyèman, ann gade nan pibliye nan sous pake a:

  1. Si pwojè a pa gen yon fichye konfigirasyon nuget (nuget.config), kreye yon nouvo: dotnet new nugetconfig

    Pou kisa: Imaj la ka pa gen aksè ekri nan konfigirasyon mondyal (itilizatè ak machin). Nan lòd pa trape erè, nou pral tou senpleman kreye yon nouvo konfigirasyon lokal epi travay avèk li.

  2. Ann ajoute yon nouvo sous pake nan konfigirasyon lokal la: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name — non sous lokal, pa enpòtan
    2. url — URL sous la nan etap "Prepare kont", etap 6
    3. organization - non òganizasyon an nan Azure DevOps
    4. gitlab variable — non varyab la ak siy aksè a te ajoute nan GitLab (“Prepare kont”, p. 11). Natirèlman, nan fòma a $variableName
    5. -StorePasswordInClearText - yon Hack pou kontoune erè aksè a refize (Mwen pa premye moun ki mache sou rato sa a)
    6. Nan ka ta gen erè li ta ka itil ajoute -verbosity detailed
  3. Nou voye pake a nan sous la: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Nou voye tout pakè soti nan anyè aktyèl la, kidonk *.nupkg.
    2. name - soti nan etap ki anwo a.
    3. key - nenpòt liy. Nan Azure DevOps, nan fenèt Konekte ak manje, liy egzanp lan toujou az.
    4. -skipduplicate — Si w eseye voye yon pake ki deja egziste san kle sa a, sous la ap retounen yon erè 409 Conflict; ak kle a, voye a pral sote.

Koulye a, kite a mete kanpe kreyasyon an nan dokiman:

  1. Pou kòmanse, nan depo a, nan branch mèt la, nou inisyalize pwojè docfx la. Pou fè sa, ou bezwen kouri lòd la soti nan rasin lan docfx init ak entèaktif mete paramèt kle yo pou rasanble dokiman an. Deskripsyon detaye sou konfigirasyon pwojè minim isit la.
    1. Lè mete kanpe, li enpòtan pou presize anyè pwodiksyon an ..public - GitLab pa defo pran sa ki nan katab piblik la nan rasin depo a kòm sous la pou Pages. Paske pwojè a pral lokalize nan yon katab enbrike nan depo a - ajoute yon sòti nan pwochen nivo nan chemen an.
  2. Ann pouse chanjman yo nan GitLab.
  3. Ajoute yon travay nan konfigirasyon tiyo a pages (Mo rezève pou travay pibliye sit nan Paj GitLab):
    1. Script:
      1. nuget install docfx.console -version 2.51.0 - enstale docfx; Yo bay vèsyon an pou asire ke chemen enstalasyon pake yo kòrèk.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - kolekte dokiman
    2. Afèkte ne:

pages:
  # snip
  artifacts:
    paths:
      - public

Digresyon lirik sou docfx

Précédemment, lè mete yon pwojè, mwen espesifye sous kòd pou dokimantasyon kòm yon dosye solisyon. Dezavantaj prensipal la se ke dokiman yo tou kreye pou pwojè tès yo. Si sa a pa nesesè, ou ka mete valè sa a nan ne la metadata.src:

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

  1. metadata.src.src: "../" — ale yon nivo anrapò ak kote a docfx.json, paske Chèche moute pyebwa anyè a pa travay nan modèl.
  2. metadata.src.files: ["**/*.csproj"] — yon modèl mondyal, nou kolekte tout pwojè C# nan tout anyè.
  3. metadata.src.exclude: ["*.tests*/**"] - modèl mondyal, eskli tout bagay nan dosye ak .tests Nan tit la

Subtotal

Ka konfigirasyon senp sa a dwe kreye nan literalman yon demi èdtan ak yon koup nan tas kafe, ki pral pèmèt ou tcheke ak chak demann fizyone epi voye li bay mèt la ke kòd la ap konpile ak tès yo ap pase, rasanble yon nouvo. pakè, mete ajou dokiman an ak plezi je a ak bèl badj nan pwojè 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

Pale de badj

Se pou dedomajman pou yo ke tout bagay te kòmanse!

Badj ki gen estati tiyo ak kouvèti kòd yo disponib nan GitLab nan paramèt CI/CD nan blòk tiyo Gtntral la:

Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

Mwen te kreye yon badj ak yon lyen nan dokiman sou platfòm la shields.io — tout bagay se byen senp la, ou ka kreye badj pwòp ou a epi resevwa li lè l sèvi avèk yon demann.

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

Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

Azure DevOps Artifacts pèmèt ou tou kreye badj pou pakè ki endike dènye vèsyon an. Pou fè sa, nan sous la sou sit entènèt Azure DevOps, ou bezwen klike sou Kreye badj pou pake chwazi a epi kopye markdown markdown la:

Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

Yon Gid pou CI/CD nan GitLab pou (Prèske) Absoli Newbie la

Ajoute bote

Nou mete aksan sou fragman konfigirasyon komen

Pandan m te ekri konfigirasyon an ak rechèch nan dokiman an, mwen te rankontre yon karakteristik YAML ki enteresan - reitilize fragman.

Kòm ou ka wè nan paramèt travay yo, yo tout mande pou yon tag windows soti nan kourè a, epi yo deklanche lè yo voye yon demann fizyon bay mèt la / kreye (eksepte pou dokiman). Ann ajoute sa a nan fragman ke nou pral reitilize:

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

Epi, koulye a nou ka mete fragman an te anonse deja nan deskripsyon travay la:

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

Non fragman yo dwe kòmanse ak yon peryòd pou evite entèprete kòm yon travay.

Pake vèsyon

Lè w ap kreye yon pake, konpilatè a tcheke switch liy lòd yo, epi nan absans yo, dosye pwojè yo; Lè w te jwenn ne vèsyon an, li pran valè li kòm vèsyon an nan pake a ke yo te bati. Li sanble ke yo nan lòd yo bati yon pake ak yon nouvo vèsyon, ou bezwen swa mete ajou li nan dosye pwojè a oswa pase li kòm yon agiman liy lòd.

Ann ajoute yon lòt vle - se pou de nimewo ki pi ba yo nan vèsyon an se ane ak dat pakè a bati, epi ajoute vèsyon prelasyon. Natirèlman, ou ka ajoute done sa yo nan dosye pwojè a epi tcheke li anvan chak soumèt - men ou ka fè sa tou nan tiyo a, kolekte vèsyon an pake nan kontèks la epi pase li nan yon agiman liy lòd.

Ann dakò ke si mesaj la komèt gen yon liy tankou release (v./ver./version) <version number> (rev./revision <revision>)?, Lè sa a, nou pral pran vèsyon an pake nan liy sa a, konplete li ak dat aktyèl la epi pase li kòm yon agiman bay lòd la. dotnet pack. Nan absans yon liy, nou tou senpleman pa pral rasanble pake a.

Script sa a rezoud pwoblèm sa a:

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

Ajoute yon script nan yon travay pack and deploy job epi obsève asanble pakè yo entèdi si gen yon liy bay nan mesaj komèt la.

Nan total

Apre w fin pase apeprè demi èdtan jiska inèdtan ekri konfigirasyon an, debogaj nan Powershell lokal epi, petèt, yon koup nan lanse san siksè, nou te resevwa yon konfigirasyon senp pou otomatize travay woutin.

Natirèlman, GitLab CI/CD se pi plis vaste ak plizyè aspè pase sa li ta ka sanble apre li fin li gid sa a - sa pa vre ditou. Genyen menm Auto DevOps wipèmèt

otomatikman detekte, bati, teste, deplwaye, epi kontwole aplikasyon ou yo

Koulye a, plan yo se configured yon tiyo pou deplwaye aplikasyon nan Azure, lè l sèvi avèk Pulumi ak otomatikman detekte anviwònman an sib, ki pral kouvri nan pwochen atik la.

Sous: www.habr.com

Add nouvo kòmantè