Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

Kapa mokhoa oa ho fumana libeche tse ntle bakeng sa morero oa hau mantsiboeeng a le mang a ho ngola habonolo

Mohlomong, moqapi e mong le e mong ea nang le bonyane morero o le mong oa phoofolo ea lapeng ka nako e itseng o na le ho hlohlona ka libeche tse ntle tse nang le li-status, tšireletso ea khoutu, liphetolelo tsa sephutheloana ka nuget ... 'Me ho hlohlona hona ho ile ha etsa hore ke ngole sehlooho sena. Ha ke itokisetsa ho e ngola, ke fumane botle bona ho e 'ngoe ea merero ea ka:

Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

Sengoliloeng sena se tla u tsamaisa ka setaele sa mantlha sa kopanyo e tsoelang pele le phano bakeng sa projeke ea laeborari ea sehlopha sa .Net Core ho GitLab, ho hatisa litokomane ho Maqephe a GitLab, le ho sutumelletsa liphutheloana tse hahiloeng ho fepa ea poraefete ho Azure DevOps.

VS Code e ne e sebelisoa e le tikoloho ea ntlafatso le katoloso Mokhoa oa ho sebetsa oa GitLab (bakeng sa ho netefatsa faele ea litlhophiso ka kotloloho ho tsoa tikolohong ea nts'etsopele).

Kenyelletso e khutšoanyane

CD - na ke ha u sa tsoa sutumetsa, 'me ntho e' ngoe le e 'ngoe e se e oele ho mofani?

CI / CD ke eng le hore na ke hobane'ng ha u e hloka - u ka e sebelisa habonolo google. Fumana litokomane tse felletseng mabapi le ho lokisa lipeipi ho GitLab hape bonolo. Mona ke tla hlalosa ka bokhutšoanyane 'me, ha ho khoneha, ntle le mefokolo ea tsamaiso ea tsamaiso ka pono ea nonyana:

  • moqapi o romela boitlamo sebakeng sa polokelo, o etsa kopo ea ho kopanya ka sebaka sa marang-rang, kapa ka tsela e 'ngoe, ka mokhoa o hlakileng kapa ka mokhoa o sa tobang o qala lipeipi,
  • mesebetsi eohle e khethiloe ho tsoa ho tlhophiso, maemo a eona a lumellang hore e hlahisoe maemong a fanoeng,
  • mesebetsi e hlophisoa ho ea ka mekhahlelo ea eona,
  • mekhahlelo e phethiloe ka ho latellana - i.e. tshoanang mesebetsi eohle ea mokhahlelo ona e phethiloe,
  • haeba sethala se hloleha (ke hore, bonyane e 'ngoe ea mesebetsi ea sethala e hloleha), phaepe e emisa (hoo e ka bang kamehla),
  • haeba mekhahlelo eohle e phethoa ka katleho, pipeline e nkoa e atlehile.

Kahoo, re na le:

  • pipeline - sete sa mesebetsi e hlophisitsoeng ka mekhahlelo eo ho eona u ka hahang, ho lekola, khoutu ea sephutheloana, ho tsamaisa moaho o felileng ho ts'ebeletso ea leru, jj.
  • sethala (sethaleng) - yuniti ea mokhatlo oa liphaephe, e na le mosebetsi o 1+,
  • mosebetsi (ke mosebetsi) ke karolo ea mosebetsi o ntseng o tsoela pele. E na le script (e tlamang), maemo a ho qala, litlhophiso tsa ho hatisa / ho boloka lintho tsa khale, le tse ling tse ngata.

Ka hona, mosebetsi oa ho theha CI / CD o theohela ho theha letoto la mesebetsi e kenyang liketso tsohle tse hlokahalang bakeng sa ho aha, ho lekola le ho hatisa khoutu le lintho tsa khale.

Pele o qala: hobaneng?

  • Ke hobane'ng ha Gitlab?

Hobane ha ho hlokahala hore ho thehoe libaka tsa polokelo ea poraefete bakeng sa merero ea liphoofolo tsa lapeng, li ne li lefshoa ho GitHub, 'me ke ne ke le meharo. Libaka tsa polokelo li se li lokolohile, empa ho fihlela joale sena ha se lebaka le lekaneng la hore ke fallele GitHub.

  • Hobaneng u sa etse liphaephe tsa Azure DevOps?

Hobane moo tlhophiso ke ea mantlha - tsebo ea mola oa taelo ha e hlokehe. Ho kopanngoa le bafani ba git ba kantle - ka ho penya makhetlo a 'maloa, ho kenngoa ha linotlolo tsa SSH ho romella litlatsetso sebakeng sa polokelo - hape, pipeline e hlophisoa habonolo leha e se ho tsoa template.

Boemo ba ho qala: seo u nang le sona le seo u se batlang

Re na le:

  • polokelo ho GitLab.

Re batla:

  • kopano le liteko tsa othomathike bakeng sa kopo e 'ngoe le e' ngoe ea ho kopanya,
  • ho haha ​​​​liphutheloana bakeng sa kopo e 'ngoe le e' ngoe ea ho kopanya le ho sutumelletsa ho monghali, ha feela ho na le mola o itseng molaetseng oa boitlamo,
  • ho romella liphutheloana tse hahiloeng ho fepa ea poraefete ho Azure DevOps,
  • kopano ea litokomane le phatlalatso ho GitLab Pages,
  • libeche!11

Litlhoko tse hlalositsoeng li oela ka mokhoa o latelang oa liphaephe:

  • Mothati oa 1 - kopano
    • Re bokella khoutu, re phatlalatsa lifaele tsa tlhahiso e le li-artifacts
  • Mothati oa 2 - tlhahlobo
    • Re fumana li-artifacts ho tloha sethaleng sa kaho, re etsa liteko, re bokella lintlha tsa boitsebiso ba khoutu
  • Mothati oa 3 - Ipehele
    • Mosebetsi oa 1 - haha ​​​​sephutheloana sa nuget ebe u se romela ho Azure DevOps
    • Mosebetsi oa 2 - re bokella sebaka sa marang-rang ho xmldoc ho khoutu ea mohloli ebe re e phatlalatsa ho GitLab Maqephe.

Ha re qaleng!

Ho bokella tlhophiso

Ho lokisa litlaleho

  1. Theha ak'haonte ho Microsoft Azure

  2. Eya ho Azure DevOps

  3. Re theha morero o mocha

    1. Lebitso - leha e le efe
    2. Ponahalo - leha e le efe
      Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

  4. Ha o tobetsa konopo ea Create, morero o tla etsoa 'me o tla fetisetsoa leqepheng la oona. Leqepheng lena, o ka tima likarolo tse sa hlokahaleng ka ho ea ho li-setting tsa projeke (sehokelo se tlase lethathamong le letšehali -> Overview -> Azure DevOps Services block)
    Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

  5. Eya ho Atrifacts, tobetsa Create feed

    1. Kenya lebitso la mohloli
    2. Khetha ponahalo
    3. Tlosa ho hlahloba Kenyelletsa liphutheloana tse tsoang mehloling e tloaelehileng ea sechaba, e le hore mohloli o se ke oa fetoha lesela la ho lahla nuget clone
      Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

  6. Tobetsa Connect ho fepa, khetha Visual Studio, kopitsa Mohloli ho tsoa ho Setupo sa Mochine block
    Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

  7. Eya ho litlhophiso tsa ak'haonte, khetha Letšoao la Phihlello ea Motho
    Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

  8. Etsa tokene e ncha ea ho kena

    1. Lebitso - ka boithatelo
    2. Mokhatlo - hona joale
    3. E sebetsa ho fihlela selemo se le 1
    4. Scope - Packaging/Bala & Ngola
      Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

  9. Kopitsa token e entsoeng - ka mor'a hore fensetere ea modal e koetsoe, boleng bo ke ke ba fumaneha

  10. Eya ho litlhophiso tsa polokelo ho GitLab, khetha litlhophiso tsa CI / CD
    Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

  11. Atolosa boloko ba Liphetoho, eketsa e ncha

    1. Lebitso - leha e le efe ntle le libaka (e tla fumaneha ka har'a khetla ea taelo)
    2. Boleng - tokene ea phihlello ho tsoa serapeng sa 9
    3. Khetha Mask feto-fetoha
      Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

Sena se phethela tlhophiso ea pele.

Ho lokisa moralo oa tlhophiso

Ka ho sa feleng, tlhophiso ea CI/CD ho GitLab e sebelisa faele .gitlab-ci.yml ho tsoa motsong oa polokelo. U ka beha tsela e hanyetsanang ea faele ena sebakeng sa polokelo, empa tabeng ena ha ho hlokahale.

Joalokaha u ka bona ho tsoa katolosong, faele e na le tlhophiso ka sebopeho YAML. Lintlha tsa litokomane tseo linotlolo li ka bang teng maemong a holimo a tlhophiso, le maemong a mang le a mang.

Taba ea pele, ha re kenye sehokelo ho setšoantšo sa docker faeleng ea tlhophiso, moo mesebetsi e tla etsoa. Bakeng sa sena re fumana Leqephe la litšoantšo tsa .Net Core ho Docker Hub. The GitHub ho na le tataiso e qaqileng mabapi le hore na u ka khetha setšoantšo sefe bakeng sa mesebetsi e fapaneng. Setšoantšo se nang le .Net Core 3.1 se loketse hore re hahe, kahoo ikutloe u lokolohile ho kenya mohala oa pele ho tlhophiso.

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

Hona joale, ha pipeline e qala ho tloha polokelong ea litšoantšo ea Microsoft, setšoantšo se boletsoeng se tla khoasolloa, moo mesebetsi eohle e tsoang ho tlhophiso e tla etsoa.

Mohato o latelang ke ho eketsa sethaleng's. Ka mokhoa o ikhethileng, GitLab e hlalosa methati e 5:

  • .pre - e etsoa ka mekhahlelo eohle,
  • .post - e etsoa ka mor'a mekhahlelo eohle,
  • build - pele ka mor'a .pre sethala,
  • test - mohato oa bobeli,
  • deploy - mohato oa boraro.

Leha ho le joalo, ha ho letho le u thibelang ho li phatlalatsa ka ho hlaka. Tatelano eo mehato e thathamisitsoeng ka eona e ama tatellano eo li etsoang ka eona. Bakeng sa botlalo, a re kenyelletseng ho tlhophiso:

stages:
  - build
  - test
  - deploy

Bakeng sa ho lokisa liphoso, hoa utloahala ho fumana leseli mabapi le tikoloho eo mesebetsi e etsoang ho eona. Ha re kenyelle lenane la litaelo tsa lefats'e tse tla etsoa pele mosebetsi o mong le o mong ka before_script:

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

E sala e le ho eketsa bonyane mosebetsi o le mong e le hore ha li-commit li romeloa, pipeline e tla qala. Hajoale, ha re kenyeng mosebetsi o se nang letho ho bontša:

dummy job:
  script:
    - echo ok

Re qala ho netefatsa, re fumana molaetsa oa hore ntho e 'ngoe le e' ngoe e lokile, rea itlama, rea sutumelletsa, re sheba liphetho setšeng ... 'Me re fumana phoso ea script - bash: .PSVersion: command not found. wtf?

Ntho e ngoe le e ngoe e ea utloahala - ka ho sa feleng, limathi (tse ikarabellang bakeng sa ho etsa litokomane tsa mosebetsi mme li fanoe ke GitLab) ts'ebeliso. bash ho phethahatsa ditaelo. U ka lokisa sena ka ho hlakisa ka ho hlaka tlhalosong ea mosebetsi hore na li-tag tseo semathi sa pipeline se lokelang ho ba le tsona ke life:

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

E kholo! Lipeipi li ntse li sebetsa.

'Mali ea hlokolosi, ha a se a pheta mehato e bontšitsoeng, o tla hlokomela hore mosebetsi o phethiloe sethaleng test, leha re sa ka ra hlakisa sethala. Joalokaha u ka nahana test ke mohato oa kamehla.

Ha re tsoeleng pele ho theha skeleton ea tlhophiso ka ho kenyelletsa mesebetsi eohle e hlalositsoeng ka holimo:

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

Re na le phaephe e sa sebetseng haholo, empa leha ho le joalo e nepahetse.

Ho theha li-trigger

Ka lebaka la hore ha ho li-filters tsa trigger tse boletsoeng bakeng sa mesebetsi leha e le efe, lipeipi li tla ka botlalo e etsoa nako le nako ha boitlamo bo sutumelletsoa sebakeng sa polokelo. Kaha sena ha se boits'oaro bo lakatsehang ka kakaretso, re tla theha li-trigger filters bakeng sa mesebetsi.

Li-filters li ka hlophisoa ka mefuta e 'meli: feela/ntle le и Melao. Ka bokhutšoanyane, only/except e o lumella ho hlophisa li-filters ka li-trigger (merge_request, mohlala - e beha mosebetsi o lokelang ho etsoa nako le nako ha kopo ea ho hula e etsoa 'me nako le nako ha li-commit li romeloa lekaleng leo e leng mohloli oa kopo ea ho kopanya) le mabitso a makala (ho kenyeletsoa le ho sebelisa lipolelo tse tloaelehileng); rules e u lumella ho etsa maemo a ikhethileng, 'me, ka boikhethelo, u fetole boemo ba ts'ebetso ho latela katleho ea mesebetsi e fetileng (when ho GitLab CI/CD).

Ha re hopoleng sehlopha sa litlhoko - kopano le liteko feela bakeng sa kopo ea ho kopanya, ho paka le ho romella ho Azure DevOps - bakeng sa kopo ea ho kopanya le ho sutumelletsa ho monghali, tlhahiso ea litokomane - bakeng sa ho sutumelletsa ho monghali.

Taba ea pele, ha re theheng mosebetsi oa ho aha khoutu ka ho eketsa molao o tukang feela ka kopo ea ho kopanya:

build job:
  # snip
  only:
    - merge_request

Joale ha re theheng mosebetsi oa ho paka ho chesa kopo ea ho kopanya ebe re eketsa boitlamo ho monghali:

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

Joalokaha u ka bona, ntho e 'ngoe le e' ngoe e bonolo ebile e hlakile.

U ka boela ua beha mosebetsi ho chesa ha feela kopo ea ho kopanya e entsoe ka sepheo se itseng kapa lekala la mohloli:

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

Tlas'a maemo, u ka sebelisa mefuta e fapaneng e thathamisitsoeng mona; melaoana rules ha e tsamaellane le melao only/except.

Ho Lokisa Artifact Saving

Nakong ea mosebetsi build job re tla ba le li-artifacts tse ka sebelisoang hape mesebetsing e latelang. Ho etsa sena, o hloka ho kenyelletsa litsela tsa tlhophiso ea mosebetsi, lifaele tseo u tla hloka ho li boloka le ho li sebelisa hape mesebetsing e latelang, ho senotlolo. artifacts:

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

Litsela li tšehetsa li-wildcards, tse etsang hore ho be bonolo ho li beha.

Haeba mosebetsi o theha li-artifacts, mosebetsi o mong le o mong o latelang o tla khona ho li fihlela - li tla be li le haufi le litsela tse tšoanang le motso oa polokelo o neng o bokelloa mosebetsing oa pele. Li-artifacts li fumaneha hape bakeng sa ho jarollwa setšeng.

Kaha joale re se re na le moralo oa tlhophiso o lokisitsoeng ('me o lekoa), re ka tsoela pele ho ngola mangolo a mesebetsi.

Re ngola mangolo

Mohlomong, ka nako e 'ngoe, sehlopheng sa linaleli se hole, hole, merero ea kaho (ho kenyeletsoa le tse ho .net) ho tloha molaong oa taelo e ne e le bohloko. Joale o ka haha, oa leka le ho phatlalatsa morero ka lihlopha tse 3:

dotnet build
dotnet test
dotnet pack

Ka tlhaho, ho na le li-nuances tse ling ka lebaka leo re tla thatafatsa litaelo ka mokhoa o itseng.

  1. Re batla moaho oa tokollo, eseng moaho oa debug, kahoo re eketsa taelong ka 'ngoe -c Release
  2. Ha re etsa liteko, re batla ho bokella lintlha tsa ts'ireletso ea khoutu, kahoo re hloka ho kenyelletsa mohlahlobi oa litaba lilaebraring tsa liteko:
    1. Kenya sephutheloana lilaebraring tsohle tsa liteko coverlet.msbuild: dotnet add package coverlet.msbuild ho tsoa foldareng ea morero
    2. Eketsa ho taelo ea teko ea teko /p:CollectCoverage=true
    3. Kenya senotlolo ho tlhophiso ea mosebetsi oa tlhahlobo ho fumana liphetho tsa khaso (sheba ka tlase)
  3. Ha o kenya khoutu ka har'a lipakete tsa nuget, beha bukana ea tlhahiso bakeng sa liphutheloana: -o .

Ho bokella lintlha tsa khaso ea khoutu

Kamora ho etsa liteko, likhatiso tsa Coverlet li tsamaisa lipalo-palo ho khomphutha:

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 e u lumella ho hlakisa polelo e tloaelehileng ho fumana lipalo-palo, tse ka fumanoang ka mokhoa oa beche. Polelo e tloaelehileng e hlalositsoe litlhophisong tsa mosebetsi ka senotlolo coverage; polelo e tlameha ho ba le sehlopha sa ho hapa, seo boleng ba sona bo tla fetisetsoa becheng:

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

Mona re fumana lipalo-palo ho tsoa moleng o nang le kakaretso ea line.

Phatlalatsa liphutheloana le litokomane

Liketso tsena ka bobeli li reriloe bakeng sa mohato oa ho qetela oa lipeipi - kaha kopano le liteko li fetile, re ka arolelana tsoelo-pele ea rona le lefats'e.

Ntlha ea pele, nahana ka ho phatlalatsa mohloli oa thepa:

  1. Haeba projeke e se na faele ea tlhophiso ea nuget (nuget.config), theha e ncha: dotnet new nugetconfig

    Molelmong oa eng: setšoantšo se kanna sa se be le phihlello ea ho ngola ho litlhophiso tsa lefats'e (mosebelisi le mochini). E le hore re se ke ra tšoasa liphoso, re mpa re theha tlhophiso e ncha ea lehae ebe re sebetsa le eona.

  2. Ha re kenye mohloli o mocha oa sephutheloana ho tlhophiso ea lehae: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - lebitso la mohloli oa lehae, eseng ho nyatsa
    2. url - URL ea mohloli ho tloha sethaleng "Ho lokisetsa li-account", leq
    3. organization - lebitso la mokhatlo ho Azure DevOps
    4. gitlab variable - lebitso la phetoho e nang le letšoao la ho fihlella le kentsoeng ho GitLab ("Ho lokisetsa li-account", leq. 11). Ka tlhaho, ka sebopeho $variableName
    5. -StorePasswordInClearText - ho qhekella ho qoba phoso e hanetsoeng ea phihlello (Ha se oa pele oa ho hata lerakeng lena)
    6. Haeba ho na le liphoso, ho ka ba molemo ho eketsa -verbosity detailed
  3. Ho romella sephutheloana mohloling: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Re romella liphutheloana tsohle ho tsoa bukeng ea hona joale, kahoo *.nupkg.
    2. name - ho tloha mohatong o ka holimo.
    3. key - mola ofe kapa ofe. Ho Azure DevOps, ho Connect ho fepa fensetere, mohlala o lula e le mohala az.
    4. -skipduplicate - ha o leka ho romela sephutheloana se seng se ntse se le teng ntle le senotlolo sena, mohloli o tla khutlisa phoso 409 Conflict; ka senotlolo, ho romela ho tla tloloa.

Joale a re hlophiseng tlhahiso ea litokomane:

  1. Taba ea pele, sebakeng sa polokelo, lekaleng le leholo, re qala projeke ea docfx. Ho etsa sena, tsamaisa taelo ho tsoa motsong docfx init 'me ka mokhoa o kopanetsoeng u behe litekanyetso tsa bohlokoa bakeng sa ho haha ​​litokomane. Tlhaloso e qaqileng ea bonyane ba tlhophiso ea morero mona.
    1. Ha o hlophisa, ho bohlokoa ho hlakisa bukana ea tlhahiso ..public - GitLab ka mokhoa o ikhethileng e nka litaba tsa foldara ea sechaba motso oa polokelo e le mohloli oa Maqephe. Hobane morero o tla be o le foldareng e behiloeng sebakeng sa polokelo - eketsa tlhahiso ho boemo bo holimo tseleng.
  2. Ha re sutumelleng liphetoho ho GitLab.
  3. Kenya mosebetsi ho tlhophiso ea lipeipi pages (lentsoe le boloketsoeng bakeng sa mesebetsi ea khatiso ea sebaka sa marang-rang Maqepheng a GitLab):
    1. Script:
      1. nuget install docfx.console -version 2.51.0 - kenya docfx; phetolelo e boletsoeng ho netefatsa hore litsela tsa ho kenya sephutheloana li nepahetse.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ho bokella litokomane
    2. Node artifacts:

pages:
  # snip
  artifacts:
    paths:
      - public

Phallo ea mantsoe mabapi le docfx

Nakong e fetileng, ha ke theha morero, ke hlalositse mohloli oa khoutu bakeng sa litokomane e le faele ea tharollo. Bothata bo boholo ke hore litokomane li boetse li bōptjoa bakeng sa merero ea liteko. Haeba sena se sa hlokahale, o ka beha boleng bona ho node metadata.src:

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

  1. metadata.src.src: "../" - re nyolohela boemong bo le bong ho latela sebaka docfx.json, hobane ka mekhoa, ho batla sefate sa directory ha se sebetse.
  2. metadata.src.files: ["**/*.csproj"] - paterone ea lefats'e, re bokella merero eohle ea C # ho tsoa litsamaisong tsohle.
  3. metadata.src.exclude: ["*.tests*/**"] - Paterone ea lefats'e, kenyelletsa ntho e ngoe le e ngoe ho tsoa lifoldareng ka .tests Ka sehlooho

Kakaretso

Sebopeho se bonolo joalo se ka etsoa ka halofo ea hora le linoelo tse 'maloa tsa kofi, tse tla u lumella ho hlahloba hore na khoutu e hahiloe le hore liteko li fete, ho haha ​​​​sephutheloana se secha, ho ntlafatsa litokomane le ho khahlisa leihlo ka botle. libeche ho README ea morero ka kopo e 'ngoe le e' ngoe ea ho kopanya le ho romela ho mong'a eona.

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

Ho bua ka libeche

Ka lebaka la bona, ka mor'a tsohle, tsohle li ile tsa qala!

Libeche tse nang le maemo a lipeipi le tšireletso ea khoutu li fumaneha ho GitLab ho litlhophiso tsa CI/CD sebakeng sa boloko sa lipeipi tsa Gtntral:

Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

Ke thehile beche e nang le sehokelo sa litokomane tse sethaleng lithebe.io - ntho e ngoe le e ngoe e otlolohile moo, o ka iketsetsa beche ea hau mme oa e amohela ka kopo.

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

Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

Azure DevOps Artifacts e boetse e u lumella ho etsa libeche bakeng sa liphutheloana tse nang le mofuta oa morao-rao. Ho etsa sena, mohloling o sebakeng sa Azure DevOps, o hloka ho tobetsa ho Theha beche bakeng sa sephutheloana se khethiloeng ebe o kopitsa letšoao la letšoao:

Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

Tataiso ea CI/CD ho GitLab bakeng sa (hoo e ka bang) ea qalang ka botlalo

Ho eketsa botle

Ho totobatsa likaroloana tse tloaelehileng tsa Configuration

Ha ke ntse ke ngola tlhophiso le ho batlisisa litokomaneng, ke ile ka kopana le karolo e khahlisang ea YAML - ho sebelisa likhechana hape.

Joalokaha u ka bona ho li-setting tsa mosebetsi, kaofela li hloka tag windows ho semathi, 'me li hlahisoa ha kopo ea ho kopanya e romelloa ho monghali / ea bōpiloeng (ntle le litokomane). Ha re kenyelle sena sekhechanang seo re tla se sebelisa hape:

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

'Me joale re ka kenya sekhechana se boletsoeng pejana tlhalosong ea mosebetsi:

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

Mabitso a likhechana a tlameha ho qala ka letheba, e le hore a se ke a hlalosoa e le mosebetsi.

Phetolelo ea sephutheloana

Ha u theha sephutheloana, moqapi o hlahloba li-switches tsa line ea taelo, 'me ha li le sieo, lifaele tsa morero; ha e fumana node ea Version, e nka boleng ba eona e le mofuta oa sephutheloana se ntseng se hahuoa. Hoa etsahala hore e le hore u ka haha ​​​​sephutheloana ka phetolelo e ncha, u lokela ho e ntlafatsa ka har'a faele ea morero kapa u e fetise e le khang ea mola oa taelo.

Ha re kenyeng Lenane la Litakatso - tlohella linomoro tse peli tse nyane tokollong e be selemo mme re thehe letsatsi la sephutheloana, 'me re kenye liphetolelo tse lokolotsoeng. Ha e le hantle, o ka eketsa lintlha tsena ho faele ea morero 'me u hlahlobe pele ho tlhahiso e' ngoe le e 'ngoe - empa u ka e etsa hape ka phaephe, ho bokella phetolelo ea sephutheloana ho tloha moelelong le ho e fetisa ka khang ea mola oa taelo.

Ha re lumellane hore haeba molaetsa oa boitlamo o na le mola o kang release (v./ver./version) <version number> (rev./revision <revision>)?, ebe re tla nka mofuta oa sephutheloana moleng ona, re e tlatse ka letsatsi la hajoale ebe re e fetisa e le khang ho taelo. dotnet pack. Ha ho se na mola, re ke ke ra bokella sephutheloana.

Script e latelang e rarolla bothata bona:

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

Ho eketsa mongolo mosebetsing pack and deploy job 'me u hlokomele kopano ea liphutheloana ka tieo ka pel'a khoele e fanoeng molaetsa oa boitlamo.

Kakaretso

Kamora ho qeta hoo e ka bang halofo ea hora kapa hora re ngola tlhophiso, re lokisa "powershell" ea lehae, 'me, mohlomong, le likheo tse 'maloa tse sa atleheng, re ile ra fumana tlhophiso e bonolo ea ho iketsetsa mesebetsi e tloaelehileng.

Ehlile, GitLab CI / CD e pharaletse haholo ebile e na le likarolo tse ngata ho feta kamoo e ka bonahalang ka teng kamora ho bala tataiso ena - seo ha se nnete ho hang. Ho na le hoo Auto DevOps kelumella

bona, haha, leka, tsamaisa, 'me u hlokomele lits'ebetso tsa hau

Hona joale merero ke ho lokisa liphaephe bakeng sa ho romela likopo ho Azure, ho sebelisa Pulumi le ho iketsetsa qeto ea tikoloho e reretsoeng, e tla tšohloa sehloohong se latelang.

Source: www.habr.com

Eketsa ka tlhaloso