Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

Los yog yuav ua li cas kom tau txais cov paib zoo nkauj rau koj qhov project hauv ib hmo ntawm kev coding yooj yim

Tej zaum, txhua tus tsim tawm uas muaj tsawg kawg yog ib txoj haujlwm tsiaj ntawm qee qhov taw tes muaj qhov khaus ntawm cov paib zoo nkauj nrog cov xwm txheej, kev pab them nqi kho mob, pob ntawv versions hauv nuget ... Thiab qhov khaus no coj kuv los sau tsab xov xwm no. Hauv kev npaj sau nws, Kuv tau txais qhov kev zoo nkauj no hauv ib qho ntawm kuv cov haujlwm:

Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

Tsab ntawv xov xwm no yuav coj koj los ntawm kev teeb tsa yooj yim ntawm kev sib koom ua ke txuas ntxiv thiab xa mus rau .Net Core chav tsev qiv ntawv qhov project hauv GitLab, tshaj tawm cov ntaub ntawv rau GitLab Nplooj ntawv, thiab thawb cov pob tsim rau kev pub noj ntiag tug hauv Azure DevOps.

VS Code tau siv los ua qhov chaw tsim kho nrog qhov txuas ntxiv GitLab Workflow (rau validating cov ntaub ntawv chaw ncaj qha los ntawm kev loj hlob ib puag ncig).

Qhia me me

CD - puas yog thaum koj nyuam qhuav thawb, thiab txhua yam twb poob rau tus neeg siv khoom?

CI / CD yog dab tsi thiab vim li cas koj xav tau - koj tuaj yeem yooj yim google nws. Nrhiav cov ntaub ntawv tiav ntawm kev teeb tsa cov kav dej hauv GitLab kuj yooj yim. Ntawm no kuv yuav luv luv thiab, yog tias ua tau, tsis muaj qhov tsis zoo piav qhia txog cov txheej txheem ntawm cov kab ke los ntawm tus noog qhov muag pom:

  • tus tsim tawm xa kev cog lus rau lub chaw cia khoom, tsim kev sib koom ua ke los ntawm qhov chaw, los yog nyob rau hauv lwm txoj kev, qhia meej los yog implicitly pib lub pipeline,
  • txhua txoj haujlwm raug xaiv los ntawm kev teeb tsa, cov xwm txheej uas tso cai rau lawv los ua haujlwm hauv cov ntsiab lus muab,
  • cov hauj lwm raug teeb tsa raws li lawv cov theem,
  • theem raug tua nyob rau hauv lem - i.e. nyob mus tib seem tag nrho cov haujlwm ntawm theem no tau ua tiav,
  • yog tias theem tsis ua haujlwm (piv txwv li, tsawg kawg yog ib qho ntawm cov haujlwm ntawm theem tsis ua haujlwm), cov kav dej nres (yuav luag ib txwm),
  • yog tias tag nrho cov theem tau ua tiav tiav, lub raj xa dej tau suav tias ua tiav.

Yog li, peb muaj:

  • pipeline - ib txheej ntawm cov dej num npaj rau hauv cov theem uas koj tuaj yeem tsim, sim, pob code, xa ib qho kev tsim tiav rau kev pabcuam huab, thiab lwm yam,
  • theem (theem) - pipeline organization unit, muaj 1+ txoj hauj lwm,
  • txoj haujlwm (txoj hauj lwm) yog ib chav ua haujlwm hauv cov kav dej. Nws muaj cov ntawv sau (yuav tsum tau), tso tawm cov xwm txheej, teeb tsa rau kev tshaj tawm / caching artifacts, thiab ntau ntxiv.

Raws li, txoj haujlwm thaum teeb tsa CI / CD nqis los tsim cov haujlwm uas siv txhua yam tsim nyog rau kev tsim, kuaj thiab tshaj tawm cov lej thiab cov khoom cuav.

Ua ntej pib: vim li cas?

  • Vim li cas Gitlab?

Vim tias thaum nws tsim nyog los tsim cov chaw khaws khoom ntiag tug rau cov phiaj xwm tsiaj, lawv tau them rau GitHub, thiab kuv tau ntshaw. Cov chaw khaws cia tau ua dawb, tab sis txog tam sim no qhov no tsis yog vim li cas txaus rau kuv tsiv mus rau GitHub.

  • Vim li cas ho tsis Azure DevOps Pipelines?

Vim tias muaj qhov chaw yog theem pib - kev paub ntawm kab hais kom ua tsis tas yuav tsum tau ua. Kev koom ua ke nrog cov neeg muab kev pabcuam git sab nraud - hauv ob peb lub clicks, ntshuam ntawm SSH cov yuam sij xa cov lus cog tseg rau lub chaw cia khoom - ib yam nkaus, cov raj xa dej tau yooj yim teeb tsa txawm tias tsis yog los ntawm tus qauv.

Pib txoj hauj lwm: yam koj muaj thiab yam koj xav tau

Peb muaj:

  • repository hauv GitLab.

Peb xav tau:

  • kev sib dhos tsis siv neeg thiab kev sim rau txhua qhov kev thov sib koom ua ke,
  • tsim cov pob khoom rau txhua qhov kev thov sib koom ua ke thiab thawb mus rau tus tswv, muab tias muaj qee txoj kab hauv cov lus cog lus,
  • xa cov pob tsim los rau kev pub noj ntiag tug hauv Azure DevOps,
  • Kev sib sau ua ke ntawm cov ntaub ntawv thiab kev tshaj tawm hauv GitLab Nplooj ntawv,
  • npe! 11

Cov lus piav qhia yuav tsum muaj nyob rau hauv cov qauv hauv qab no:

  • Kauj Ruam 1 - Kev sib dhos
    • Peb sau cov cai, luam tawm cov ntaub ntawv tso tawm raws li cov khoom cuav
  • Theem 2 - kuaj
    • Peb tau txais artifacts los ntawm cov theem tsim, khiav kev xeem, sau cov ntaub ntawv kev pab them nqi code
  • Kauj Ruam 3 - Xa
    • Txoj Haujlwm 1 - tsim cov pob nuget thiab xa mus rau Azure DevOps
    • Txoj Haujlwm 2 - peb sau lub xaib los ntawm xmldoc hauv qhov chaws thiab tshaj tawm hauv GitLab Nplooj ntawv

Cia peb pib!

Sau cov configuration

Npaj cov nyiaj

  1. Tsim ib tus account hauv Microsoft Azure

  2. Mus rau Azure DevOps

  3. Peb tsim ib qhov project tshiab

    1. Lub npe - ib qho
    2. Visibility - ib qho
      Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

  4. Thaum koj nyem rau ntawm Tsim khawm, qhov project yuav raug tsim thiab koj yuav raug xa mus rau nws nplooj ntawv. Ntawm nplooj ntawv no, koj tuaj yeem lov tes taw cov yam ntxwv tsis tsim nyog los ntawm kev mus rau qhov chaw teeb tsa (qis txuas hauv cov npe ntawm sab laug -> Txheej txheem cej luam -> Azure DevOps Services thaiv)
    Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

  5. Mus rau Atrifacts, nyem Tsim pub

    1. Sau lub npe ntawm qhov chaw
    2. Xaiv qhov pom kev
    3. Uncheck suav nrog cov pob khoom los ntawm cov chaw pej xeem, kom lub hauv paus tsis tig mus rau hauv lub pob tseg nuget clone
      Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

  6. Nyem Txuas mus pub, xaiv Visual Studio, luam qhov chaw los ntawm Tshuab Teeb thaiv
    Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

  7. Mus rau tus account nqis, xaiv Tus Kheej Access Token
    Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

  8. Tsim ib tug tshiab nkag token

    1. Lub npe - arbitrary
    2. Lub koom haum - tam sim no
    3. Siv tau rau ntau tshaj 1 xyoos
    4. Scope - Ntim / Nyeem & Sau
      Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

  9. Luam the created token - tom qab lub qhov rais modal raug kaw, tus nqi yuav tsis muaj

  10. Mus rau qhov chaw khaws cia hauv GitLab, xaiv qhov chaw CI / CD
    Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

  11. Nthuav cov Variables thaiv, ntxiv ib qho tshiab

    1. Lub npe - yam tsis muaj qhov chaw (yuav muaj nyob rau hauv lub plhaub hais kom ua)
    2. Tus nqi - nkag token los ntawm kab lus 9
    3. Xaiv Mask variable
      Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

Qhov no ua tiav qhov pre-configuration.

Npaj lub moj khaum configuration

Los ntawm lub neej ntawd, CI / CD teeb tsa hauv GitLab siv cov ntaub ntawv .gitlab-ci.yml los ntawm lub hauv paus ntawm lub repository. Koj tuaj yeem teeb tsa txoj hauv kev rau cov ntaub ntawv no hauv qhov chaw khaws cia, tab sis qhov no nws tsis tsim nyog.

Raws li koj tuaj yeem pom los ntawm qhov txuas ntxiv, cov ntaub ntawv muaj kev teeb tsa hauv hom YAML. Cov ntaub ntawv cov ntsiab lus uas cov yuam sij tuaj yeem muaj nyob rau theem sab saum toj ntawm kev teeb tsa, thiab ntawm txhua qib nested.

Ua ntej, cia peb ntxiv qhov txuas mus rau cov duab docker hauv cov ntaub ntawv teeb tsa, uas yuav ua tiav cov haujlwm. Rau qhov no peb nrhiav .Net Core duab nplooj ntawv ntawm Docker Hub. Cov GitHub muaj cov lus qhia ntxaws txog cov duab twg los xaiv rau cov haujlwm sib txawv. Ib daim duab nrog .Net Core 3.1 yog tsim rau peb tsim, yog li xav tias dawb ntxiv thawj kab rau kev teeb tsa

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

Tam sim no, thaum lub raj xa dej tau pib los ntawm Microsoft lub chaw cia khoom, cov duab teev yuav raug rub tawm, uas txhua txoj haujlwm los ntawm kev teeb tsa yuav raug tua.

Cov kauj ruam tom ntej yog ntxiv theem's. Los ntawm lub neej ntawd, GitLab txhais 5 theem:

  • .pre - ua tau mus txog rau txhua theem,
  • .post - ua tiav tom qab txhua theem,
  • build - thawj tom qab .pre theem,
  • test - theem ob,
  • deploy - theem peb.

Txawm li cas los xij, tsis muaj dab tsi txwv tsis pub koj tshaj tawm lawv. Qhov kev txiav txim uas cov kauj ruam tau teev tseg cuam tshuam rau qhov kev txiav txim uas lawv tau ua. Kom tiav, cia peb ntxiv rau qhov kev teeb tsa:

stages:
  - build
  - test
  - deploy

Rau kev debugging, nws ua rau kev nkag siab kom tau txais cov ntaub ntawv hais txog ib puag ncig uas cov haujlwm tau ua tiav. Cia peb ntxiv cov txheej txheem thoob ntiaj teb uas yuav tsum tau ua ua ntej txhua txoj haujlwm nrog before_script:

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

Nws tseem yuav ntxiv yam tsawg kawg ib txoj hauj lwm kom thaum cov commits raug xa mus, cov kav dej yuav pib. Txog tam sim no, cia peb ntxiv ib txoj haujlwm khoob los ua kom pom:

dummy job:
  script:
    - echo ok

Peb pib validation, peb tau txais cov lus hais tias txhua yam zoo, peb cog lus, peb thawb, peb saib cov txiaj ntsig ntawm lub xaib ... Thiab peb tau txais tsab ntawv yuam kev - bash: .PSVersion: command not found. wtf?

Txhua yam yog qhov laj thawj - los ntawm lub neej ntawd, cov neeg khiav dej num (lub luag haujlwm rau kev ua cov ntawv sau ua haujlwm thiab muab los ntawm GitLab) siv bash kom ua tiav cov lus txib. Koj tuaj yeem kho qhov no los ntawm kev qhia meej meej hauv cov lus piav qhia ua haujlwm dab tsi cov cim npe rau kev khiav dej num yuav tsum muaj:

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

Zoo heev! Lub raj xa dej tam sim no tau ua haujlwm.

Tus neeg nyeem ntawv zoo siab, tau rov ua cov kauj ruam qhia, yuav pom tias txoj haujlwm tau ua tiav hauv theem test, txawm tias peb tsis tau qhia txog theem. Raws li koj yuav twv test yog lub neej ntawd kauj ruam.

Cia peb txuas ntxiv tsim cov pob txha pob txha los ntawm kev ntxiv tag nrho cov haujlwm tau piav qhia saum toj no:

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

Peb tau txais ib qho tsis tshwj xeeb ua haujlwm, tab sis txawm li cas los xij yog cov kav dej.

Kev teeb tsa triggers

Vim qhov tseeb tias tsis muaj cov ntxaij lim dej tau teev tseg rau ib qho ntawm cov dej num, lub raj xa dej yuav tag nrho raug tua txhua lub sij hawm ib qho kev cog lus raug thawb mus rau qhov chaw cia khoom. Txij li qhov no tsis yog tus cwj pwm xav tau feem ntau, peb yuav teeb tsa cov lim dej rau cov haujlwm.

Cov lim tuaj yeem teeb tsa hauv ob hom: nkaus xwb/tsuas yog ΠΈ kev cai. Luv luv, only/except tso cai rau koj los teeb tsa cov ntxaij lim dej los ntawm kev cuam tshuam (merge_request, piv txwv li - teev cov hauj lwm yuav tsum tau ua txhua zaus ib tug rub thov thiab txhua lub sij hawm commits raug xa mus rau cov ceg uas yog lub hauv paus rau kev sib koom ua ke thov) thiab ceg npe (nrog rau kev siv cov lus hais tsis tu ncua); rules tso cai rau koj los kho cov xwm txheej thiab, xaiv tau, hloov cov haujlwm ua haujlwm raws li kev ua tiav ntawm cov haujlwm dhau los (when hauv GitLab CI/CD).

Cia peb nco qab txog cov txheej txheem uas yuav tsum tau ua - kev sib dhos thiab kev sim tsuas yog rau kev thov sib koom ua ke, ntim thiab xa mus rau Azure DevOps - rau kev thov sib koom ua ke thiab thawb mus rau tus tswv, tsim cov ntaub ntawv - rau kev thawb rau tus tswv.

Ua ntej, cia peb teeb tsa txoj cai tsim ua haujlwm los ntawm kev ntxiv txoj cai uas tua hluav taws tsuas yog ntawm kev thov sib koom ua ke:

build job:
  # snip
  only:
    - merge_request

Tam sim no cia peb teeb tsa lub ntim ua haujlwm kom tua hluav taws ntawm qhov kev thov sib koom ua ke thiab ntxiv cov lus cog tseg rau tus tswv:

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

Raws li koj tau pom, txhua yam yog yooj yim thiab ncaj.

Koj tuaj yeem teeb tsa txoj haujlwm kom tua hluav taws nkaus xwb yog tias qhov kev thov sib koom ua ke raug tsim nrog lub hom phiaj tshwj xeeb lossis cov ceg:

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

Hauv cov xwm txheej, koj tuaj yeem siv variables teev ntawm no; txoj cai rules incompatible nrog cov cai only/except.

Configuring Artifact Txuag

Thaum ua haujlwm build job peb yuav muaj cov khoom qub uas tuaj yeem rov qab siv tau hauv cov haujlwm tom ntej. Txhawm rau ua qhov no, koj yuav tsum ntxiv txoj hauv kev rau kev teeb tsa ua haujlwm, cov ntaub ntawv nrog rau koj yuav tsum tau txuag thiab rov siv dua hauv cov haujlwm hauv qab no, mus rau qhov tseem ceeb. artifacts:

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

Paths txhawb cov wildcards, uas twv yuav raug hu ua rau lawv yooj yim dua.

Yog tias ib txoj haujlwm tsim cov khoom qub, tom qab ntawd txhua txoj haujlwm tom ntej yuav nkag mus rau lawv - lawv yuav nyob rau hauv tib txoj kev txheeb ze rau lub hauv paus repository uas tau sau los ntawm cov haujlwm qub. Artifacts kuj muaj rau rub tawm ntawm lub xaib.

Tam sim no peb muaj cov txheej txheem kev teeb tsa npaj (thiab sim), peb tuaj yeem mus ua tiag sau ntawv rau cov haujlwm.

Peb sau ntawv

Tej zaum, ib zaug dhau los, hauv galaxy deb, deb, lub tsev ua haujlwm (xws li cov hauv .net) los ntawm kab hais kom ua yog mob. Tam sim no koj tuaj yeem tsim, sim thiab tshaj tawm qhov project hauv 3 pawg:

dotnet build
dotnet test
dotnet pack

Lawm, muaj qee qhov nuances vim tias peb yuav nyuaj rau cov lus txib me ntsis.

  1. Peb xav kom muaj kev tso tawm, tsis yog kev debug tsim, yog li peb ntxiv rau txhua qhov lus txib -c Release
  2. Thaum kuaj, peb xav khaws cov ntaub ntawv pov thawj code, yog li peb yuav tsum suav nrog cov ntsuas ntsuas hauv cov tsev qiv ntawv xeem:
    1. Ntxiv cov pob rau txhua lub tsev qiv ntawv xeem coverlet.msbuild: dotnet add package coverlet.msbuild los ntawm qhov project folder
    2. Ntxiv rau qhov kev xeem khiav hais kom ua /p:CollectCoverage=true
    3. Ntxiv tus yuam sij rau qhov kev sim ua haujlwm kom tau txais cov txiaj ntsig tau txais txiaj ntsig (saib hauv qab)
  3. Thaum ntim cov code rau hauv pob khoom nuget, teeb tsa cov ntawv tso zis rau cov pob khoom: -o .

Sau cov ntaub ntawv pov thawj code

Tom qab khiav cov kev xeem, Coverlet luam tawm cov txheeb cais mus rau lub 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 tso cai rau koj los qhia cov lus qhia tsis tu ncua kom tau txais kev txheeb cais, uas tuaj yeem tau txais hauv daim ntawv cim npe. Cov lus qhia tsis tu ncua yog teev nyob rau hauv qhov chaw ua haujlwm nrog tus yuam sij coverage; cov lus qhia yuav tsum muaj ib pab pawg ntes, tus nqi uas yuav raug xa mus rau cov paib:

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

Ntawm no peb tau txais txheeb cais los ntawm ib kab nrog tag nrho cov kab kev pab them nqi.

Tshaj tawm pob khoom thiab cov ntaub ntawv

Ob qhov kev nqis tes ua yog teem rau theem kawg ntawm cov kav dej - txij li kev sib sau ua ke thiab kev sim tau dhau los, peb tuaj yeem qhia peb txoj kev txhim kho rau lub ntiaj teb.

Ua ntej, xav txog kev tshaj tawm rau pob khoom:

  1. Yog hais tias qhov project tsis muaj ib tug nuget configuration file (nuget.config), tsim ib qho tshiab: dotnet new nugetconfig

    Rau dab tsi: cov duab yuav tsis muaj kev nkag mus rau thoob ntiaj teb (neeg siv thiab tshuab) configurations. Txhawm rau kom tsis txhob ua yuam kev, peb tsuas yog tsim ib qho kev teeb tsa hauv zos tshiab thiab ua haujlwm nrog nws.

  2. Cia peb ntxiv ib lub pob tshiab rau qhov kev teeb tsa hauv zos: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - lub npe hauv zos, tsis tseem ceeb
    2. url - URL ntawm qhov chaw los ntawm theem "Pib nyiaj", p. 6
    3. organization - Lub koom haum npe hauv Azure DevOps
    4. gitlab variable - lub npe ntawm qhov sib txawv nrog rau kev nkag mus token ntxiv rau GitLab ("Pib nyiaj", p. 11). Lawm, nyob rau hauv hom $variableName
    5. -StorePasswordInClearText - hack los hla kev nkag tsis pom qhov yuam kev (Kuv tsis yog thawj tus uas tau nqis los ntawm tus rake no)
    6. Nyob rau hauv cov ntaub ntawv tsis raug, nws yuav pab tau ntxiv -verbosity detailed
  3. Xa lub pob mus rau qhov chaw: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Peb xa tag nrho cov pob khoom los ntawm cov npe tam sim no, yog li *.nupkg.
    2. name - los ntawm cov kauj ruam saum toj no.
    3. key - tej kab. Hauv Azure DevOps, hauv Connect to feed window, piv txwv yog ib txwm kab az.
    4. -skipduplicate - thaum sim xa ib pob uas twb muaj lawm yam tsis muaj tus yuam sij no, qhov chaw yuav rov qab ua qhov yuam kev 409 Conflict; nrog tus yuam sij, xa yuav hla.

Tam sim no cia peb teeb tsa kev tsim cov ntaub ntawv:

  1. Ua ntej, nyob rau hauv lub repository, nyob rau hauv lub tswv ceg, peb pib docfx project. Ua li no, khiav cov lus txib los ntawm lub hauv paus docfx init thiab sib tham sib teeb tsa cov ntsiab lus tseem ceeb rau kev tsim cov ntaub ntawv. Cov lus piav qhia ntxaws txog qhov kev teeb tsa qhov tsawg kawg nkaus no.
    1. Thaum configuring, nws yog ib qho tseem ceeb uas yuav tau qhia kom meej cov zis directory ..public - GitLab los ntawm lub neej ntawd yuav siv cov ntsiab lus ntawm cov ntaub ntawv pej xeem hauv lub hauv paus ntawm qhov chaw khaws cia ua qhov chaw rau Nplooj ntawv. Vim qhov project yuav nyob rau hauv ib daim nplaub tshev nested nyob rau hauv lub repository - ntxiv cov zis mus rau theem nyob rau hauv txoj kev.
  2. Cia peb thawb cov kev hloov pauv rau GitLab.
  3. Ntxiv ib txoj haujlwm rau kev teeb tsa kav dej pages (cov lus tshwj tseg rau qhov chaw tshaj tawm cov haujlwm hauv GitLab Nplooj ntawv):
    1. Tsab ntawv:
      1. nuget install docfx.console -version 2.51.0 - nruab docfx; lub version tau teev tseg los xyuas kom meej tias lub pob installation txoj kev yog lawm.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - sau cov ntaub ntawv
    2. Node artifacts:

pages:
  # snip
  artifacts:
    paths:
      - public

Lyrical digression txog docfx

Yav dhau los, thaum teeb tsa ib qhov project, kuv tau teev cov lej code rau cov ntaub ntawv ua cov ntaub ntawv daws teeb meem. Qhov tsis zoo tseem ceeb yog cov ntaub ntawv tseem raug tsim los rau cov haujlwm sim. Yog tias qhov no tsis tsim nyog, koj tuaj yeem teeb tsa tus nqi no rau ntawm node metadata.src:

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

  1. metadata.src.src: "../" - peb mus rau ib theem nce txheeb ze rau qhov chaw docfx.json, vim hauv cov qauv, tshawb nrhiav cov ntoo directory tsis ua haujlwm.
  2. metadata.src.files: ["**/*.csproj"] - tus qauv thoob ntiaj teb, peb sau tag nrho C # tej yaam num los ntawm tag nrho cov npe.
  3. metadata.src.exclude: ["*.tests*/**"] - qauv thoob ntiaj teb, cais txhua yam ntawm folders nrog .tests Hauv lub npe

Rhuav tagnrho

Xws li kev teeb tsa yooj yim tuaj yeem tsim nyob rau hauv ib nrab ib teev thiab ob peb khob kas fes, uas yuav tso cai rau koj los xyuas tias cov cai tau tsim thiab cov kev xeem dhau, tsim ib pob tshiab, hloov kho cov ntaub ntawv thiab thov lub qhov muag zoo nkauj. cov ntawv cim hauv README ntawm qhov project nrog txhua qhov kev thov sib koom ua ke thiab xa mus rau tus tswv.

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

Hais txog cov paib

Vim yog lawv, tom qab tag nrho, txhua yam tau pib!

Cov paib nrog cov xwm txheej hauv raj xa dej thiab cov lej them nyiaj muaj nyob hauv GitLab hauv CI / CD teeb tsa hauv Gtntral pipelines thaiv:

Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

Kuv tsim ib daim paib nrog qhov txuas rau cov ntaub ntawv ntawm lub platform shields.io - Txhua yam yog qhov yooj yim heev, koj tuaj yeem tsim koj tus kheej daim paib thiab tau txais nws los ntawm kev thov.

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

Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

Azure DevOps Artifacts kuj tso cai rau koj los tsim cov paib rau pob khoom nrog cov ntawv tshiab kawg. Txhawm rau ua qhov no, hauv qhov chaw ntawm Azure DevOps qhov chaw, koj yuav tsum nyem rau ntawm Tsim cov ntawv cim rau cov pob xaiv thiab luam cov cim kos npe:

Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

Daim ntawv qhia rau CI / CD hauv GitLab rau (yuav luag) tus pib tshiab

Ntxiv kev zoo nkauj

Highlighting Common Configuration Fragments

Thaum sau cov kev teeb tsa thiab tshawb nrhiav los ntawm cov ntaub ntawv, kuv tuaj hla ib qho kev nthuav dav ntawm YAML - rov siv cov khoom tawg.

Raws li koj tuaj yeem pom los ntawm cov chaw ua haujlwm, lawv txhua tus xav tau lub cim npe windows ntawm tus khiav, thiab tau tshwm sim thaum qhov kev thov sib koom ua ke raug xa mus rau tus tswv / tsim (tshwj tsis yog cov ntaub ntawv). Cia peb ntxiv qhov no rau qhov seem uas peb yuav rov siv dua:

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

Thiab tam sim no peb tuaj yeem ntxig cov ntu uas tau tshaj tawm ua ntej hauv cov lus piav qhia ua haujlwm:

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

Fragment npe yuav tsum pib nrog ib tug dot, thiaj li tsis tau txhais raws li ib tug hauj lwm.

Package versioning

Thaum tsim ib pob, lub compiler xyuas cov kab hais kom ua keyboards, thiab nyob rau hauv lawv tsis muaj, cov ntaub ntawv project; thaum nws pom Version node, nws yuav siv nws tus nqi raws li lub version ntawm lub pob tau tsim. Nws hloov tawm hais tias txhawm rau tsim ib pob nrog cov tshiab version, koj yuav tsum tau hloov kho nws hauv qhov project file lossis dhau nws raws li kev sib cav kab lus.

Cia peb ntxiv ib qho Wishlist ntxiv - cia tus me me ob tus lej hauv version yog lub xyoo thiab tsim hnub ntawm pob, thiab ntxiv cov ntawv tso tawm ua ntej. Tau kawg, koj tuaj yeem ntxiv cov ntaub ntawv no rau hauv qhov project file thiab tshawb xyuas ua ntej txhua qhov kev xa tawm - tab sis koj tuaj yeem ua nws hauv cov raj xa dej, sau cov pob version los ntawm cov ntsiab lus thiab dhau nws los ntawm kev sib cav kab lus.

Cia peb pom zoo tias yog cov lus cog lus muaj kab zoo li release (v./ver./version) <version number> (rev./revision <revision>)?, ces peb yuav muab lub version ntawm pob los ntawm kab no, ntxiv nws nrog hnub tam sim no thiab dhau nws raws li kev sib cav rau cov lus txib dotnet pack. Thaum tsis muaj kab, peb tsuas yog yuav tsis sau cov pob.

Cov ntawv hauv qab no daws qhov teeb meem no:

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

Ntxiv ib tsab ntawv rau ib txoj haujlwm pack and deploy job thiab saib xyuas lub rooj sib txoos ntawm cov pob khoom nruj me ntsis nyob rau hauv lub xub ntiag ntawm ib txoj hlua muab rau hauv cov lus cog lus.

Tag nrho

Tom qab siv li ib nrab ib teev lossis ib teev sau cov teeb tsa, kev debugging hauv lub zos powershell thiab, tejzaum nws, ob peb qhov kev ua tsis tiav, peb tau txais kev teeb tsa yooj yim rau kev ua haujlwm niaj hnub ua haujlwm.

Tau kawg, GitLab CI / CD yog qhov dav thiab ntau dua li nws yuav zoo li tom qab nyeem phau ntawv qhia no - qhov ntawd tsis muaj tseeb kiag li. Muaj txawm Auto DevOps yogtso cai

cia li ntes, tsim, sim, xa tawm, thiab saib xyuas koj daim ntawv thov

Tam sim no cov phiaj xwm yog los teeb tsa lub raj xa dej rau kev xa cov ntawv thov rau Azure, siv Pulumi thiab txiav txim siab lub hom phiaj ib puag ncig, uas yuav tau hais hauv tsab xov xwm tom ntej.

Tau qhov twg los: www.hab.com

Ntxiv ib saib