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:
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,
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.
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
Nyem Txuas mus pub, xaiv Visual Studio, luam qhov chaw los ntawm Tshuab Teeb thaiv
Mus rau tus account nqis, xaiv Tus Kheej Access Token
Tsim ib tug tshiab nkag token
Lub npe - arbitrary
Lub koom haum - tam sim no
Siv tau rau ntau tshaj 1 xyoos
Scope - Ntim / Nyeem & Sau
Luam the created token - tom qab lub qhov rais modal raug kaw, tus nqi yuav tsis muaj
Mus rau qhov chaw khaws cia hauv GitLab, xaiv qhov chaw CI / CD
Nthuav cov Variables thaiv, ntxiv ib qho tshiab
Lub npe - yam tsis muaj qhov chaw (yuav muaj nyob rau hauv lub plhaub hais kom ua)
Tus nqi - nkag token los ntawm kab lus 9
Xaiv Mask variable
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:
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:
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:
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.
Xa lub pob mus rau qhov chaw: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
Peb xa tag nrho cov pob khoom los ntawm cov npe tam sim no, yog li *.nupkg.
name - los ntawm cov kauj ruam saum toj no.
key - tej kab. Hauv Azure DevOps, hauv Connect to feed window, piv txwv yog ib txwm kab az.
-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:
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.
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.
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:
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:
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.
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.
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.