ProHoster > Блог > Isakoso > Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).
Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).
Tabi bii o ṣe le gba awọn baagi ẹlẹwa fun iṣẹ akanṣe rẹ ni irọlẹ kan ti ifaminsi irọrun
Boya, gbogbo Olùgbéejáde ti o ni o kere kan ọsin ise agbese ni diẹ ninu awọn ojuami ni o ni ohun nyún nipa lẹwa Baajii pẹlu statuses, koodu agbegbe, package awọn ẹya ni nuget ... Ati yi itch mu mi lati kọ yi article. Ni igbaradi fun kikọ rẹ, Mo ni ẹwa yii ni ọkan ninu awọn iṣẹ akanṣe mi:
Nkan yii yoo rin ọ nipasẹ iṣeto ipilẹ ti iṣọpọ ilọsiwaju ati ifijiṣẹ fun iṣẹ ikawe kilasi .Net Core ni GitLab, awọn iwe atẹjade si Awọn oju-iwe GitLab, ati titari awọn idii ti a ṣe si kikọ sii ikọkọ ni Azure DevOps.
A lo koodu VS bi agbegbe idagbasoke pẹlu itẹsiwaju GitLab Ṣiṣẹ Ṣiṣẹ (fun afọwọsi awọn eto faili taara lati awọn idagbasoke ayika).
Ifihan kukuru
CD - o jẹ nigbati o kan titari, ati ohun gbogbo ti tẹlẹ lọ silẹ lori ose?
Kini CI / CD ati idi ti o nilo rẹ - o le ni rọọrun google rẹ. Wa iwe pipe lori atunto awọn opo gigun ti epo ni GitLab tun rọrun. Nibi Emi yoo ni ṣoki ati, ti o ba ṣeeṣe, laisi awọn abawọn ṣe apejuwe ilana ti eto naa lati oju oju eye:
Olùgbéejáde firanṣẹ ifaramo kan si ibi ipamọ, ṣẹda ibeere apapọ nipasẹ aaye naa, tabi ni ọna miiran, ni gbangba tabi ni aiṣedeede bẹrẹ opo gigun ti epo,
Gbogbo awọn iṣẹ-ṣiṣe ni a yan lati iṣeto, awọn ipo eyiti o gba wọn laaye lati ṣe ifilọlẹ ni ipo ti a fun,
Awọn iṣẹ-ṣiṣe ti ṣeto ni ibamu si awọn ipele wọn,
awọn ipele ti wa ni executed ni Tan - i.e. ni afiwe Gbogbo awọn iṣẹ-ṣiṣe ti ipele yii ti pari,
ti ipele naa ba kuna (ie, o kere ju ọkan ninu awọn iṣẹ-ṣiṣe ti ipele naa kuna), opo gigun ti epo duro (fere nigbagbogbo),
ti gbogbo awọn ipele ba pari ni aṣeyọri, opo gigun ti epo ni a gba ni aṣeyọri.
Nitorinaa, a ni:
opo gigun ti epo - ṣeto awọn iṣẹ ṣiṣe ti a ṣeto si awọn ipele ninu eyiti o le kọ, idanwo, koodu package, gbe iṣẹ ṣiṣe ti pari si iṣẹ awọsanma, ati bẹbẹ lọ,
ipele (ipele) - Ẹka agbari opo gigun ti epo, ni awọn iṣẹ-ṣiṣe 1+,
iṣẹ (ise) jẹ ẹyọ iṣẹ kan ninu opo gigun ti epo. O ni iwe afọwọkọ kan (dandan), awọn ipo ifilọlẹ, awọn eto fun titẹjade/awọn ohun-ọṣọ caching, ati pupọ diẹ sii.
Nitorinaa, iṣẹ ṣiṣe nigbati o ba ṣeto CI / CD wa si isalẹ lati ṣiṣẹda ṣeto awọn iṣẹ ṣiṣe ti o ṣe gbogbo awọn iṣe pataki fun kikọ, idanwo ati titẹ koodu ati awọn ohun-ọṣọ.
Ṣaaju ki o to bẹrẹ: kilode?
Kini idi ti Gitlab?
Nitoripe nigbati o di dandan lati ṣẹda awọn ibi ipamọ ikọkọ fun awọn iṣẹ-ọsin, wọn sanwo lori GitHub, ati pe mo ni ojukokoro. Awọn ibi ipamọ ti di ọfẹ, ṣugbọn titi di isisiyi eyi ko to idi fun mi lati gbe lọ si GitHub.
Kilode ti kii ṣe Azure DevOps Pipelines?
Nitoripe nibẹ ni eto naa jẹ alakọbẹrẹ - imọ ti laini aṣẹ ko paapaa nilo. Ijọpọ pẹlu awọn olupese git ita - ni awọn titẹ meji, gbe wọle ti awọn bọtini SSH lati firanṣẹ awọn adehun si ibi ipamọ - paapaa, opo gigun ti epo ni irọrun tunto paapaa kii ṣe lati awoṣe kan.
Ipo ibẹrẹ: ohun ti o ni ati ohun ti o fẹ
A ni:
ibi ipamọ ni GitLab.
A fẹ:
Apejọ aifọwọyi ati idanwo fun ibeere apapọ kọọkan,
awọn idii ile fun ibeere apapọ kọọkan ati titari si oluwa, ti o ba jẹ pe laini kan wa ninu ifiranṣẹ ifaramọ,
fifiranṣẹ awọn idii ti a ṣe si kikọ sii ikọkọ ni Azure DevOps,
apejọ awọn iwe ati atẹjade ni Awọn oju-iwe GitLab,
baagi!11
Awọn ibeere ti a ṣalaye nipa ti ara ṣubu lori awoṣe opo gigun ti epo atẹle:
Ipele 1 - Apejọ
A gba koodu naa, ṣe atẹjade awọn faili ti o jade bi awọn ohun-ọṣọ
Ipele 2 - idanwo
A gba awọn ohun-ọṣọ lati ipele kikọ, ṣiṣe awọn idanwo, gba data agbegbe koodu
Ipele 3 - Fi silẹ
Iṣẹ-ṣiṣe 1 - kọ package nuget ki o firanṣẹ si Azure DevOps
Iṣẹ-ṣiṣe 2 - a gba aaye naa lati xmldoc ni koodu orisun ati ṣe atẹjade ni Awọn oju-iwe GitLab
Nigbati o ba tẹ bọtini Ṣẹda, iṣẹ akanṣe yoo ṣẹda ati pe iwọ yoo darí rẹ si oju-iwe rẹ. Ni oju-iwe yii, o le mu awọn ẹya ti ko wulo nipa lilọ si awọn eto ise agbese (ọna asopọ isalẹ ninu atokọ ni apa osi -> Akopọ -> Awọn iṣẹ Azure DevOps Àkọsílẹ)
Lọ si Awọn abuda, tẹ Ṣẹda kikọ sii
Tẹ orukọ orisun naa sii
Yan hihan
Yọọ kuro Ṣafikun awọn idii lati awọn orisun gbogbogbo ti o wọpọ, ki awọn orisun ko ni tan-sinu kan idalenu nuget oniye
Tẹ Sopọ si ifunni, yan Studio Visual, daakọ Orisun lati Àkọsílẹ Oṣo ẹrọ
Lọ si awọn eto akọọlẹ, yan Àmi Wiwọle Ti ara ẹni
Ṣẹda titun wiwọle àmi
Orukọ - lainidii
Agbari - Lọwọlọwọ
Wulo fun o pọju 1 odun
Dopin - Iṣakojọpọ/Ka & Kọ
Daakọ aami ti a ṣẹda - lẹhin ti awọn modal window ti wa ni pipade, iye yoo wa ni ko si
Lọ si awọn eto ibi ipamọ ni GitLab, yan awọn eto CI / CD
Faagun bulọọki Awọn iyipada, ṣafikun ọkan tuntun
Orukọ - eyikeyi laisi awọn aaye (yoo wa ninu ikarahun aṣẹ)
Iye - ami wiwọle lati paragirafi 9
Yan oniyipada Boju
Eyi pari iṣeto-tẹlẹ.
Ngbaradi awọn ilana iṣeto ni
Nipa aiyipada, iṣeto CI/CD ni GitLab nlo faili naa .gitlab-ci.yml lati gbongbo ti ibi ipamọ. O le ṣeto ọna lainidii si faili yii ni awọn eto ibi ipamọ, ṣugbọn ninu ọran yii kii ṣe dandan.
Bi o ti le rii lati itẹsiwaju, faili naa ni iṣeto ni ọna kika YAML. Awọn alaye iwe eyiti awọn bọtini le wa ni ipele oke ti iṣeto ni, ati ni ọkọọkan awọn ipele itẹ-ẹiyẹ.
Ni akọkọ, jẹ ki a ṣafikun ọna asopọ si aworan docker ninu faili iṣeto, ninu eyiti awọn iṣẹ ṣiṣe yoo ṣee ṣe. Fun eyi a ri .Net Core awọn aworan oju-iwe lori Docker Hub. awọn GitHub Itọsọna alaye wa lori iru aworan lati yan fun awọn iṣẹ ṣiṣe oriṣiriṣi. Aworan kan pẹlu .Net Core 3.1 dara fun wa lati kọ, nitorinaa lero ọfẹ lati ṣafikun laini akọkọ si iṣeto
image: mcr.microsoft.com/dotnet/core/sdk:3.1
Ni bayi, nigbati a ba ṣe ifilọlẹ opo gigun ti epo lati ibi ipamọ aworan Microsoft, aworan ti a sọ ni yoo ṣe igbasilẹ, ninu eyiti gbogbo awọn iṣẹ ṣiṣe lati iṣeto ni yoo ṣe.
Igbesẹ ti o tẹle ni lati ṣafikun ipeles. Nipa aiyipada, GitLab n ṣalaye awọn ipele 5:
.pre - ṣe soke si gbogbo awọn ipele;
.post - ṣe lẹhin gbogbo awọn ipele,
build - akọkọ lẹhin .pre ipele,
test - ipele keji,
deploy - kẹta ipele.
Ko si ohun ti o ṣe idiwọ fun ọ lati kede wọn ni gbangba, sibẹsibẹ. Ilana ti a ṣe akojọ awọn igbesẹ yoo ni ipa lori aṣẹ ti wọn ṣe. Fun pipe, jẹ ki a ṣafikun si iṣeto:
stages:
- build
- test
- deploy
Fun n ṣatunṣe aṣiṣe, o jẹ oye lati gba alaye nipa agbegbe ti awọn iṣẹ-ṣiṣe ti wa ni ṣiṣe. Jẹ ki a ṣafikun eto awọn aṣẹ agbaye ti yoo ṣiṣẹ ṣaaju iṣẹ-ṣiṣe kọọkan pẹlu before_script:
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
O wa lati ṣafikun o kere ju iṣẹ-ṣiṣe kan pe nigbati awọn iṣẹ ba ti firanṣẹ, opo gigun ti epo yoo bẹrẹ. Ni bayi, jẹ ki a ṣafikun iṣẹ-ṣiṣe ofo lati ṣafihan:
dummy job:
script:
- echo ok
A bẹrẹ ijẹrisi, a gba ifiranṣẹ pe ohun gbogbo dara, a ṣe, a titari, a wo awọn abajade lori aaye naa ... Ati pe a gba aṣiṣe iwe afọwọkọ - bash: .PSVersion: command not found. wtf?
Ohun gbogbo jẹ ọgbọn - nipasẹ aiyipada, awọn asare (lodidi fun ṣiṣe awọn iwe afọwọkọ iṣẹ-ṣiṣe ati ti a pese nipasẹ GitLab) lilo bash lati ṣiṣẹ awọn aṣẹ. O le ṣatunṣe eyi nipa sisọ ni pato ninu apejuwe iṣẹ-ṣiṣe kini awọn afi ti olusare opo gigun ti n ṣiṣẹ yẹ ki o ni:
dummy job on windows:
script:
- echo ok
tags:
- windows
Nla! Opopona epo n ṣiṣẹ ni bayi.
Oluka ti o tẹtisi, ti tun ṣe awọn igbesẹ itọkasi, yoo ṣe akiyesi pe iṣẹ naa ti pari ni ipele naa test, biotilejepe a ko pato ipele. Bi o ṣe le gboju test ni awọn aiyipada igbese.
Jẹ ki a tẹsiwaju ṣiṣẹda egungun iṣeto ni nipa fifi gbogbo awọn iṣẹ ṣiṣe ti a ṣalaye loke:
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
A ko ni iṣẹ ṣiṣe pataki, ṣugbọn sibẹsibẹ opo gigun ti epo ti o tọ.
Ṣiṣeto awọn okunfa
Nitori otitọ pe ko si awọn asẹ ti o nfa ni pato fun eyikeyi awọn iṣẹ ṣiṣe, opo gigun ti epo yoo ni kikun wa ni ṣiṣe ni gbogbo igba ti a ti gbe adehun kan si ibi ipamọ. Niwọn igba ti eyi kii ṣe ihuwasi ti o fẹ ni gbogbogbo, a yoo ṣeto awọn asẹ okunfa fun awọn iṣẹ ṣiṣe.
A le tunto awọn asẹ ni awọn ọna kika meji: nikan / ayafi и ofin. Ni soki, only/except gba ọ laaye lati tunto awọn asẹ nipasẹ awọn okunfa (merge_request, fun apẹẹrẹ - ṣeto iṣẹ-ṣiṣe lati ṣiṣẹ ni igbakugba ti o ba ṣẹda ibeere fifa ati akoko kọọkan ti a fi ranṣẹ si ẹka ti o jẹ orisun ti o wa ninu ibeere iṣọpọ) ati awọn orukọ ẹka (pẹlu lilo awọn ọrọ deede); rules gba ọ laaye lati ṣe akanṣe eto awọn ipo ati, ni yiyan, yi ipo ipaniyan iṣẹ-ṣiṣe pada da lori aṣeyọri ti awọn iṣẹ ṣiṣe iṣaaju (when ni GitLab CI / CD).
Jẹ ki a ranti ṣeto awọn ibeere - apejọ ati idanwo nikan fun ibeere idapọ, apoti ati fifiranṣẹ si Azure DevOps - fun ibeere idapọ ati titari si oluwa, iran iwe - fun awọn titari si oluwa.
Ni akọkọ, jẹ ki a ṣeto iṣẹ ṣiṣe koodu nipasẹ fifi ofin kan kun ti o tan lori ibeere apapọ:
build job:
# snip
only:
- merge_request
Bayi jẹ ki a ṣeto iṣẹ iṣakojọpọ lati ina lori ibeere apapọ ati ṣafikun awọn adehun si oluwa:
Labẹ awọn ipo, o le lo oniyipada akojọ si nibi; awọn ofin rules ko ni ibamu pẹlu awọn ofin only/except.
Tito leto Artifact Nfi
Lakoko iṣẹ kan build job a yoo ni awọn ohun-ọṣọ ti o le ṣee lo ni awọn iṣẹ-ṣiṣe ti o tẹle. Lati ṣe eyi, o nilo lati ṣafikun awọn ọna si iṣeto iṣẹ-ṣiṣe, awọn faili pẹlu eyiti iwọ yoo nilo lati fipamọ ati tun lo ninu awọn iṣẹ ṣiṣe atẹle, si bọtini artifacts:
Awọn ipa-ọna ṣe atilẹyin awọn kaadi igbo, eyiti o jẹ ki wọn rọrun lati ṣeto.
Ti iṣẹ-ṣiṣe kan ba ṣẹda awọn ohun-ọṣọ, lẹhinna iṣẹ-ṣiṣe kọọkan ti o tẹle yoo ni anfani lati wọle si wọn - wọn yoo wa pẹlu awọn ọna kanna ni ibatan si gbongbo ibi-ipamọ ti a gba lati iṣẹ-ṣiṣe atilẹba. Artifacts tun wa fun igbasilẹ lori aaye naa.
Ni bayi pe a ni ilana iṣeto ti o ṣetan (ati idanwo), a le tẹsiwaju lati kọ awọn iwe afọwọkọ nitootọ fun awọn iṣẹ ṣiṣe.
A kọ awọn iwe afọwọkọ
Boya, ni ẹẹkan ni akoko kan, ninu galaxy kan ti o jinna, ti o jinna, awọn iṣẹ ile (pẹlu awọn ti o wa lori .net) lati laini aṣẹ jẹ irora. Bayi o le kọ, ṣe idanwo ati gbejade iṣẹ akanṣe ni awọn ẹgbẹ mẹta:
dotnet build
dotnet test
dotnet pack
Nipa ti, diẹ ninu awọn nuances wa nitori eyiti a yoo ṣe idiju awọn aṣẹ ni itumo.
A fẹ kọ idasilẹ, kii ṣe kọ yokokoro, nitorinaa a ṣafikun si aṣẹ kọọkan -c Release
Nigba idanwo, a fẹ lati gba data agbegbe koodu, nitorinaa a nilo lati ṣafikun olutupalẹ agbegbe ninu awọn ile-ikawe idanwo:
Fi package kun si gbogbo awọn ile-ikawe idanwo coverlet.msbuild: dotnet add package coverlet.msbuild lati folda ise agbese
Fi si aṣẹ ṣiṣe idanwo /p:CollectCoverage=true
Ṣafikun bọtini kan si iṣeto iṣẹ ṣiṣe idanwo lati gba awọn abajade agbegbe (wo isalẹ)
Nigbati o ba n ṣajọ koodu naa sinu awọn idii nuget, ṣeto ilana iṣelọpọ fun awọn idii: -o .
GitLab gba ọ laaye lati pato ikosile deede lati gba awọn iṣiro, eyiti o le gba ni irisi baaji kan. Ọrọ ikosile deede jẹ pato ninu awọn eto iṣẹ-ṣiṣe pẹlu bọtini coverage; ikosile gbọdọ ni ẹgbẹ imudani kan, iye eyiti yoo kọja si baaji naa:
test and cover job:
# snip
coverage: /|s*Totals*|s*(d+[,.]d+%)/
Nibi a gba awọn iṣiro lati ila kan pẹlu laini agbegbe lapapọ.
Ṣe atẹjade awọn idii ati iwe
Awọn iṣe mejeeji ni a ṣeto fun ipele ikẹhin ti opo gigun ti epo - niwọn igba ti apejọ ati awọn idanwo ti kọja, a le pin awọn idagbasoke wa pẹlu agbaye.
Ni akọkọ, ronu titẹjade si orisun package:
Ti iṣẹ akanṣe naa ko ba ni faili iṣeto nuget (nuget.config), ṣẹda titun kan: dotnet new nugetconfig
Fun kini: aworan le ma ni iwọle si kikọ si awọn atunto agbaye (olumulo ati ẹrọ). Ni ibere ki o má ba yẹ awọn aṣiṣe, a nìkan ṣẹda titun kan ti agbegbe iṣeto ni ati ki o ṣiṣẹ pẹlu awọn ti o.
Jẹ ki a ṣafikun orisun package tuntun si iṣeto agbegbe: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
name - orukọ orisun agbegbe, kii ṣe pataki
url - URL ti orisun lati ipele "Ngbaradi awọn akọọlẹ", oju-iwe 6
organization - orukọ agbari ni Azure DevOps
gitlab variable - orukọ oniyipada pẹlu ami iwọle ti a ṣafikun si GitLab (“Ngbaradi awọn akọọlẹ”, p. 11). Nipa ti, ni ọna kika $variableName
key - eyikeyi ila. Ni Azure DevOps, ni Sopọ si window ifunni, apẹẹrẹ jẹ laini nigbagbogbo az.
-skipduplicate - nigbati o n gbiyanju lati firanṣẹ package ti o wa tẹlẹ laisi bọtini yii, orisun yoo da aṣiṣe pada 409 Conflict; pẹlu bọtini, fifiranṣẹ yoo wa ni skipped.
Bayi jẹ ki a ṣeto awọn ẹda ti awọn iwe aṣẹ:
Ni akọkọ, ni ibi ipamọ, ni ẹka titunto si, a bẹrẹ iṣẹ akanṣe docfx. Lati ṣe eyi, ṣiṣe aṣẹ lati gbongbo docfx init ati ibaraenisepo ṣeto awọn ipilẹ bọtini fun awọn iwe ile. Alaye apejuwe ti o kere ise agbese setup nibi.
Nigbati o ba tunto, o jẹ pataki lati pato awọn o wu liana ..public - GitLab nipasẹ aiyipada gba awọn akoonu ti folda ti gbogbo eniyan ni gbongbo ti ibi ipamọ bi orisun fun Awọn oju-iwe. Nitori ise agbese na yoo wa ninu folda ti o wa ni itẹ-ẹiyẹ ni ibi ipamọ - fi abajade kan kun si ipele soke ni ọna.
Jẹ ki a Titari awọn ayipada si GitLab.
Ṣafikun iṣẹ-ṣiṣe kan si iṣeto opo gigun ti epo pages (Ọrọ ti a fi pamọ fun awọn iṣẹ ṣiṣe titẹjade aaye ni Awọn oju-iwe GitLab):
Iwe afọwọkọ:
nuget install docfx.console -version 2.51.0 - fi sori ẹrọ docfx; ẹya ti wa ni pato lati rii daju pe awọn ọna fifi sori package jẹ deede.
.docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - gbigba iwe
Node artifact:
pages:
# snip
artifacts:
paths:
- public
Digression Lyrical nipa docfx
Ni iṣaaju, nigbati o ba ṣeto iṣẹ akanṣe kan, Mo ṣalaye orisun koodu fun iwe bi faili ojutu kan. Alailanfani akọkọ ni pe a tun ṣẹda iwe fun awọn iṣẹ akanṣe idanwo. Ni ọran eyi ko ṣe pataki, o le ṣeto iye yii si ipade metadata.src:
metadata.src.src: "../" - lọ soke ipele ti o ni ibatan si ipo naa docfx.json, nitori ni awọn ilana, wiwa soke igi liana ko ṣiṣẹ.
metadata.src.files: ["**/*.csproj"] - apẹẹrẹ agbaye, a gba gbogbo awọn iṣẹ akanṣe C # lati gbogbo awọn ilana.
metadata.src.exclude: ["*.tests*/**"] - apẹẹrẹ agbaye, yọ ohun gbogbo kuro ninu awọn folda pẹlu .tests Ninu akọle
Isalẹ
Iru iṣeto ti o rọrun le ṣee ṣẹda ni idaji wakati kan ati awọn agolo kọfi meji kan, eyiti yoo gba ọ laaye lati ṣayẹwo pe a ti kọ koodu naa ati awọn idanwo naa kọja, kọ package tuntun, ṣe imudojuiwọn iwe naa ki o wù oju pẹlu ẹwa. awọn baaji ni README ti iṣẹ akanṣe pẹlu ibeere apapọ kọọkan ati fifiranṣẹ si oluwa.
Ipari .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
Soro ti Baajii
Nitori wọn, lẹhinna, ohun gbogbo ti bẹrẹ!
Awọn baagi pẹlu awọn ipo opo gigun ti epo ati agbegbe koodu wa ni GitLab ninu awọn eto CI/CD ni bulọki awọn paipu Gtntral:
Mo ṣẹda baaji pẹlu ọna asopọ kan si iwe lori pẹpẹ Awọn aabo.io - ohun gbogbo jẹ taara nibe, o le ṣẹda baaji tirẹ ki o gba ni lilo ibeere kan.
![Пример с Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps Artifacts tun gba ọ laaye lati ṣẹda awọn baaji fun awọn idii pẹlu ẹya tuntun. Lati ṣe eyi, ni orisun lori aaye Azure DevOps, o nilo lati tẹ lori Ṣẹda baaji fun package ti o yan ati daakọ isamisi isamisi:
Fifi ẹwa
Ifojusi Awọn ajẹkù Iṣeto ni wọpọ
Lakoko kikọ iṣeto ni ati wiwa nipasẹ iwe-ipamọ naa, Mo wa ẹya ti o nifẹ si ti YAML - atunlo awọn ajẹkù.
Bi o ti le rii lati awọn eto iṣẹ-ṣiṣe, gbogbo wọn nilo tag windows ni olusare, ati ki o wa ni jeki nigbati a àkópọ ìbéèrè ti wa ni rán si awọn titunto si / ṣẹda (ayafi iwe). Jẹ ki a ṣafikun eyi si ajẹkù ti a yoo tun lo:
Ati ni bayi a le fi sii ajẹkù ti a sọ tẹlẹ ninu apejuwe iṣẹ-ṣiṣe:
build job:
<<: *common_tags
<<: *common_only
Awọn orukọ ajeku gbọdọ bẹrẹ pẹlu aami kan, ki a má ba ṣe tumọ bi iṣẹ-ṣiṣe kan.
Package versioning
Nigbati o ba ṣẹda package, olupilẹṣẹ n ṣayẹwo awọn iyipada laini aṣẹ, ati ni isansa wọn, awọn faili ise agbese; nigbati o ba ri ipade Version kan, o gba iye rẹ gẹgẹbi ẹya ti package ti a kọ. O wa ni pe lati le kọ package kan pẹlu ẹya tuntun, o nilo lati ṣe imudojuiwọn boya ninu faili iṣẹ akanṣe tabi ṣe bi ariyanjiyan laini aṣẹ.
Jẹ ki a ṣafikun atokọ Ifẹ ọkan diẹ sii - jẹ ki awọn nọmba meji kekere ninu ẹya jẹ ọdun ati ọjọ kikọ ti package, ati ṣafikun awọn ẹya iṣaju iṣaaju. Nitoribẹẹ, o le ṣafikun data yii si faili iṣẹ akanṣe ati ṣayẹwo ṣaaju ifakalẹ kọọkan - ṣugbọn o tun le ṣe ni opo gigun ti epo, gbigba ẹya package lati inu ọrọ-ọrọ ati gbigbe nipasẹ ariyanjiyan laini aṣẹ.
Jẹ ki a gba pe ti ifiranṣẹ ifarabalẹ ba ni laini bii release (v./ver./version) <version number> (rev./revision <revision>)?, lẹhinna a yoo gba ẹya ti package lati laini yii, ṣe afikun rẹ pẹlu ọjọ ti o wa ki o kọja bi ariyanjiyan si aṣẹ naa. dotnet pack. Ni aini laini kan, a ko ni gba package naa.
Iwe afọwọkọ atẹle yii yanju iṣoro yii:
# регулярное выражение для поиска строки с версией
$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
Ṣafikun iwe afọwọkọ kan si iṣẹ-ṣiṣe kan pack and deploy job ki o si ṣe akiyesi apejọ awọn idii ni pipe ni iwaju okun ti a fun ni ifiranṣẹ ifaramọ naa.
Lapapọ
Lẹhin lilo nipa idaji wakati kan tabi wakati kan kikọ iṣeto ni, n ṣatunṣe aṣiṣe ni agbara agbegbe ati, o ṣee ṣe, tọkọtaya awọn ifilọlẹ ti ko ni aṣeyọri, a ni iṣeto ti o rọrun fun adaṣe adaṣe awọn iṣẹ ṣiṣe deede.
Nitoribẹẹ, GitLab CI / CD jẹ lọpọlọpọ ati lọpọlọpọ ju ti o le dabi lẹhin kika itọsọna yii - iyẹn kii ṣe otitọ rara. Nibẹ paapaa Auto DevOps jẹgbigba
ṣe iwari laifọwọyi, kọ, ṣe idanwo, ranṣiṣẹ, ati ṣetọju awọn ohun elo rẹ
Bayi awọn ero ni lati tunto opo gigun ti epo fun gbigbe awọn ohun elo si Azure, ni lilo Pulumi ati ipinnu agbegbe ibi-afẹde laifọwọyi, eyiti yoo bo ni nkan atẹle.