Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

Ma ọ bụ ka esi enweta baajị mara mma maka ọrụ gị n'otu mgbede nke nzuzo nzuzo

Eleghị anya, onye nrụpụta ọ bụla nke nwere ma ọ dịkarịa ala otu ọrụ anụ ụlọ n'oge ụfọdụ nwere itching maka baajị mara mma na statuses, mkpuchi koodu, ụdị ngwugwu na nuget… Na itching a mere ka m dee akụkọ a. N'ime usoro nkwadebe ide ya, enwetara m ịma mma a n'otu n'ime ọrụ m:

Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

Edemede a ga-ekpuchi ntọala ntọala nke ntinye na nnyefe na-aga n'ihu maka ọrụ ọbá akwụkwọ klas .Net Core na GitLab, na-ebipụta akwụkwọ na ibe GitLab na izipu ngwugwu anakọtara na nri nkeonwe na Azure DevOps.

Ejiri koodu VS nwere ndọtị ahụ dịka ebe mmepe GitLab arụ ọrụ (iji kwado faịlụ ntọala ozugbo site na gburugburu mmepe).

Mbido dị mkpirikpi

CD bụ mgbe naanị ịkwanye, mana onye ahịa enweelarị ihe niile?

Gịnị bụ CI/CD na gịnị mere o ji dị mkpa? Ị nwere ike mfe google ya. Chọta akwụkwọ zuru oke maka ịtọ pipeline na GitLab dịkwa mfe. N'ebe a, m ga-eme nkenke na, ọ bụrụ na ọ ga-ekwe omume, na-enweghị ntụpọ, kọwaa usoro nke usoro ahụ site na anya nnụnụ:

  • onye nrụpụta na-ezipụ ntinye aka na ebe nchekwa ahụ, mepụta arịrịọ njikọ site na webụsaịtị, ma ọ bụ n'ụzọ ọzọ n'ụzọ doro anya ma ọ bụ n'ezoghị ọnụ na-ebupụta pipeline,
  • site na nhazi ahụ, a na-ahọrọ ọrụ niile nke ọnọdụ ha na-enye ohere ka ha malite n'otu ọnọdụ,
  • A na-ahazi ọrụ dịka usoro ha si dị,
  • A na-eme usoro ahụ n'aka - i.e. yiri arụrụ ọrụ niile nke ọkwa a,
  • ọ bụrụ na ogbo dara (ya bụ, ọ dịkarịa ala otu n'ime ọrụ nke ogbo ahụ dara) - pipeline na-akwụsị (ọ fọrọ nke nta ka ọ bụrụ mgbe niile),
  • Ọ bụrụ na emechara usoro niile nke ọma, a na-ewere pipeline nke ọma.

Ya mere, anyị nwere:

  • pipeline bụ otu ọrụ ahaziri n'ime nkebi nke ị nwere ike ịgbakọta, nwalee, koodu ngwugwu, tinye ọgbakọ emechara na ọrụ igwe ojii, wdg.
  • ogbo (ogbo) - unit nke pipeline nzukọ, nwere ọrụ 1+,
  • ọrụ (ọrụ) bụ akụkụ nke ọrụ na pipeline. Ihe mejupụtara edemede (chọrọ), ọnọdụ mmalite, ntọala maka ibipụta/ịkwado arịa na ọtụtụ ndị ọzọ.

N'ihi ya, ọrụ ahụ mgbe ị na-edozi CI / CD na-agbadata ịmepụta otu ọrụ nke na-emejuputa omume niile dị mkpa maka ikpokọta, nyocha na mbipụta koodu na ihe arịa.

Tupu anyị amalite: gịnị kpatara?

  • Gịnị kpatara GitLab?

N'ihi na mgbe ọ dị mkpa ka ịmepụta ebe nchekwa nzuzo maka ọrụ anụ ụlọ, a na-akwụ ha ụgwọ na GitHub, enwere m anyaukwu. Ụlọ nkwakọba ihe aghọwo n'efu, ma ugbu a nke a abụghị ezigbo ihe mere m ga-eji kwaga GitHub.

  • Kedu ihe kpatara na ọ bụghị Azure DevOps Pipeline?

N'ihi na ntọlite ​​​​dị mfe - ị chọghịdị ihe ọmụma ahịrị iwu. Njikọ na ndị na-enye git mpụga - na ọnụọgụ abụọ, mbubata igodo SSH maka izipu na-etinye aka na ebe nchekwa - kwa, a na-ahazi pipeline n'ụzọ dị mfe ọbụlagodi na-enweghị ndebiri.

Ọnọdụ mmalite: ihe ị nwere na ihe ị chọrọ

Anyị nwere:

  • ebe nchekwa na GitLab.

Anyị chọrọ:

  • mgbakọ akpaka na nnwale maka arịrịọ ọ bụla jikọrọ ọnụ,
  • ngwugwu ụlọ maka arịrịọ ọ bụla jikọrọ ọnụ na ịkwanye nna ukwu, ọ bụrụhaala na enwere ahịrị ụfọdụ na ozi itinye,
  • izipu ngwugwu anakọtara na nri nkeonwe na Azure DevOps,
  • mkpokọta akwụkwọ na mbipụta na ibe GitLab,
  • baaj!11

Ihe ndị a akọwapụtara dabara adabara na ụdị pipeline ndị a:

  • Nkeji 1 - mgbakọ
    • Anyị na-anakọta koodu, na-ebipụta faịlụ mmepụta dị ka arịa
  • Nkeji 2 - ule
    • Anyị na-enweta ihe arịa site na ụlọ nrụpụta, na-eme nnwale, na-anakọta data mkpuchi koodu
  • Nkeji 3 - izipu
    • Ọrụ 1 - chịkọta ngwugwu nuget wee ziga ya na Azure DevOps
    • Ọrụ 2 - anyị na-achịkọta saịtị ahụ site na xmldoc na koodu isi mmalite wee bipụta ya na ibe GitLab

Ka anyị bido!

Ịchịkọta nhazi ahụ

Na-akwado akaụntụ

  1. Mepụta akaụntụ n'ime Microsoft Azure

  2. Gaa na Azure DevOps

  3. Mepụta oru ngo ọhụrụ

    1. Aha - ọ bụla
    2. Visibiliti - ọ bụla
      Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

  4. Mgbe ị pịrị bọtịnụ Mepụta, a ga-emepụta ọrụ ahụ, a ga-akpọrọ gị gaa na ibe ya. Na ibe a, ị nwere ike gbanyụọ atụmatụ ndị na-adịghị mkpa site na ịga na ntọala ọrụ (njikọ dị ala na listi dị n'aka ekpe -> Nleba anya -> ngọngọ Ọrụ Azure DevOps)
    Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

  5. Gaa na Atrifacts, pịa Mepụta ndepụta

    1. Tinye aha isi mmalite
    2. Họrọ visibiliti
    3. Mepee igbe ahụ akara Tinye ngwungwu sitere na isi mmalite ọhanke mere na isi iyi ahụ ghara ịghọ ihe mkpofu nke nuget clone
      Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

  6. Pịa Jikọọ ka ị nweta nri, họrọ Visual Studio, detuo Isi Iyi sitere na ngọngọ Ntọala igwe
    Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

  7. Gaa na ntọala akaụntụ, họrọ Token nnweta nkeonwe
    Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

  8. Mepụta akara nnweta ọhụrụ

    1. Aha - aka ike
    2. Nhazi - ugbu a
    3. Oge nkwado: kacha 1 afọ
    4. Oke - Nkwakọ ngwaahịa/gụọ & dee
      Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

  9. Detuo akara ngosi emepụtara - mgbe emechiri windo modal uru agaghị adị

  10. Gaa na ntọala nchekwa dị na GitLab, họrọ ntọala CI/CD
    Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

  11. Gbasaa ngọngọ Variables wee tinye nke ọhụrụ

    1. Aha - nke ọ bụla na-enweghị oghere (ga-adị na shei iwu)
    2. Uru bụ akara nnweta site na nzọụkwụ 9
    3. Họrọ mgbanwe nkpuchi
      Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

Nke a na-emecha nhazi mbido.

Na-akwado nhazi nhazi

Site na ndabara, faịlụ a na-eji hazie CI/CD na GitLab bụ .gitlab-ci.yml site na mgbọrọgwụ nke ebe nchekwa. Ị nwere ike ịhazi ụzọ omenala na faịlụ a na ntọala nchekwa, ma na nke a ọ dịghị mkpa.

Dị ka a pụrụ ịhụ site na ndọtị, faịlụ nwere nhazi na usoro YAML. Akwụkwọ ahụ na-akọwa n'ụzọ zuru ezu ihe igodo nwere ike ịdị na ọkwa dị elu nke nhazi ahụ, na nke ọ bụla n'ime ọkwa akwụrụ.

Nke mbụ, ka anyị gbakwunye na faịlụ nhazi njikọ na foto docker nke a ga-arụ ọrụ ndị ahụ. Iji mee nke a anyị na-ahụ .Net Core onyoonyo ibe na Docker Hub. The GitHub Enwere ntuziaka zuru ezu nke onyonyo ị ga-ahọrọ maka ọrụ dị iche iche. Ihe onyonyo nwere .Net Core 3.1 dabara maka anyị iwulite, yabụ nweere onwe gị ịgbakwunye ya dị ka ahịrị mbụ na nhazi ahụ.

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

Ugbu a, mgbe ịmalitere pipeline, a ga-ebudata onyonyo akọwapụtara na ebe nchekwa ihe oyiyi Microsoft, nke a ga-arụ ọrụ niile sitere na nhazi ahụ.

Nzọụkwụ ọzọ bụ ịgbakwunye ogbo's. Site na ndabara, GitLab na-akọwa usoro 5:

  • .pre - a na-eme ya n'ụzọ niile;
  • .post - emechara usoro niile,
  • build - mbụ mgbe .pre ogbo,
  • test - nkeji nke abụọ,
  • deploy - nke atọ ogbo.

Ọ dịghị ihe na-egbochi gị ikwupụta ha nke ọma, agbanyeghị. Usoro nke edepụtara usoro ndị a na-emetụta usoro nke emechara. Maka izu oke, ka anyị gbakwunye na nhazi ahụ:

stages:
  - build
  - test
  - deploy

Maka nbibi, ọ bụ ihe ezi uche dị na ya ịnweta ozi gbasara gburugburu ebe a na-arụ ọrụ. Ka anyị tinye usoro iwu zuru ụwa ọnụ nke a ga-eme tupu ọrụ ọ bụla ejiri before_script:

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

Ọ na-anọgide na-agbakwunye ma ọ dịkarịa ala otu ọrụ nke mere na mgbe ezigara ọrụ, pipeline ga-amalite. Maka ugbu a, ka anyị gbakwunye ọrụ efu maka ngosipụta:

dummy job:
  script:
    - echo ok

Anyị na-amalite nkwado, nweta ozi na ihe niile dị mma, tinye aka, gbanye, lelee nsonaazụ na saịtị ahụ ... Na anyị na-enweta njehie edemede - bash: .PSVersion: command not found. WTF?

Ihe niile bụ ihe ezi uche dị na ya - na ndabara, ndị na-agba ọsọ (nwere ọrụ maka ime ihe ederede ọrụ yana GitLab nyere) jiri. bash ime iwu. Ị nwere ike idozi nke a site n'igosipụta nke ọma na nkọwa ọrụ ihe mkpado onye na-agba ọsọ pipeline kwesịrị inwe:

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

Nnukwu! Pipeline na-agba ọsọ ugbu a.

Onye na-agụ nke ọma, na-emeghachi usoro ndị a, ga-achọpụta na arụchara ọrụ ahụ na ọkwa test, ọ bụ ezie na anyị akọwaghị ogbo ahụ. Dị ka ị nwere ike iche, test bụ ndabara nzọụkwụ.

Ka anyị gaa n'ihu na-eke skeleton nhazi site na ịgbakwunye ọrụ niile akọwara n'elu:

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

Anyị nwetara ọrụ adịghị arụ ọrụ nke ọma, mana ka o sina dị ezi pipeline.

Ịtọlite ​​mkpalite

N'ihi n'eziokwu na ọ dịghị ihe nzacha na-akpali akpali akọwapụtara maka ọrụ ọ bụla, pipeline ga- zuru oke E gburu oge ọ bụla a na-ezigara ya na ebe nchekwa. Ebe ọ bụ na nke a abụghị omume a chọrọ n'ozuzu, anyị ga-ahazi ihe nzacha na-akpalite maka ọrụ.

Enwere ike ịhazi ihe nzacha n'ụdị abụọ: naanị/ma ewezuga и iwu. Na mpempe, only/except na-enye gị ohere ịhazi ihe nzacha site na mkpalite (merge_request, dịka ọmụmaatụ - na-ahazi ọrụ a ga-arụ n'oge ọ bụla e mepụtara arịrịọ njikọ na oge ọ bụla a na-ezigara alaka ụlọ ọrụ bụ isi iyi na arịrịọ njikọ) na aha alaka (gụnyere iji okwu mgbe niile); rules na-enye gị ohere ịhazi usoro nke ọnọdụ yana, nhọrọ, gbanwee ọnọdụ mmezu ọrụ dabere na ịga nke ọma nke ọrụ ndị gara aga (when na GitLab CI/CD).

Ka anyị cheta ihe ndị a chọrọ - mgbakọ na ịnwale naanị maka ịrịọ arịrịọ, nkwakọ ngwaahịa na iziga na Azure DevOps - maka ịrịọ arịrịọ na ịkwanye nna ukwu, ọgbọ nke akwụkwọ - maka ịkwanye nna ukwu.

Nke mbụ, ka anyị guzobe ọrụ mgbakọ koodu site n'ịgbakwunye iwu na-akpalite naanị na-akpalite arịrịọ njikọ:

build job:
  # snip
  only:
    - merge_request

Ugbu a, ka anyị hazie ọrụ nkwakọ ngwaahịa iji kpalite arịrịọ njikọ ma tinye aka na nna ukwu:

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

Dị ka ị pụrụ ịhụ, ihe niile dị mfe ma kwụ ọtọ.

Ị nwekwara ike hazie ọrụ ahụ ka ọ kpalite naanị ma ọ bụrụ na ejiri otu ebumnuche ma ọ bụ alaka isi mmalite mepụta arịrịọ njikọ:

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

N'ọnọdụ enwere ike iji ya mgbanwe ndị edepụtara ebe a; iwu rules ekwekọghị na iwu only/except.

Na-ahazi Nchekwa Artifact

Mgbe ọrụ ahụ na-arụ ọrụ build job anyị ga-enwe ihe arụrụ arụ arụrụ arụ nke enwere ike ijikwa ya na ọrụ ndị ọzọ. Iji mee nke a, ịkwesịrị ịgbakwunye ụzọ na nhazi ọrụ, faịlụ ndị a ga-echekwa ma jiri ya mee ihe na ọrụ ndị ọzọ, na igodo. artifacts:

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

Ụzọ na-akwado kaadị ọhịa, nke na-eme ka ọ dị mfe ịtọ.

Ọ bụrụ na ọrụ na-emepụta ihe arịa, mgbe ahụ, ọrụ ọ bụla na-esote ga-enwe ike ịnweta ha - ha ga-adị n'otu ụzọ ahụ metụtara mgbọrọgwụ nchekwa nke a nakọtara site na ọrụ mbụ. Ọdịiche dị maka nbudata na webụsaịtị.

Ugbu a na anyị nwere usoro nhazi dị njikere (ma kwadoro), anyị nwere ike ịga n'ihu na-ede edemede maka ọrụ.

Anyị na-ede scripts

Ikekwe, n'otu oge, na ụyọkọ kpakpando dị anya, dị anya, ọrụ ụlọ (gụnyere .net ndị) site na akara iwu bụ ihe mgbu. Ugbu a, ị nwere ike ịgbakọta, nwalee ma bipụta ọrụ a n'ime otu atọ:

dotnet build
dotnet test
dotnet pack

Dị ka o kwesịrị ịdị, enwere ụfọdụ nuances n'ihi nke anyị ga-eme ka iwu ahụ sie ike.

  1. Anyị chọrọ ntọhapụ, ọ bụghị debug, wuo, yabụ anyị na-agbakwunye na iwu ọ bụla -c Release
  2. Mgbe a na-anwale ule, anyị chọrọ ịnakọta data na mkpuchi koodu, yabụ anyị kwesịrị ijikọ ihe nyocha mkpuchi na ọba akwụkwọ nnwale:
    1. Ekwesịrị ịgbakwunye ngwugwu ahụ na ọba akwụkwọ nyocha niile coverlet.msbuild: dotnet add package coverlet.msbuild site na folda oru ngo
    2. Tinye na iwu mmalite nnwale /p:CollectCoverage=true
    3. Ka anyị tinye igodo na nhazi ọrụ nnwale iji nweta nsonaazụ mkpuchi (lee n'okpuru)
  3. Mgbe ị na-akwakọba koodu ahụ n'ime ngwugwu nuget, anyị ga-edobe ndekọ mmepụta maka ngwugwu: -o .

Na-anakọta data mkpuchi koodu

Mgbe emechara ule ahụ, Coverlet na-egosiputa ọnụ ọgụgụ mmalite na njikwa:

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 na-enye gị ohere ịkọwapụta okwu oge niile iji nweta ọnụ ọgụgụ, nke enwere ike nweta ya n'ụdị baajị. A na-akọwapụta okwu oge niile na ntọala ọrụ yana igodo coverage; okwu ahụ ga-enwerịrị otu njide, uru nke a ga-ebufe na baajị:

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

N'ebe a, anyị na-enweta ọnụ ọgụgụ site na ahịrị nwere mkpokọta mkpuchi site na ahịrị.

Anyị na-ebipụta ngwugwu na akwụkwọ

Anyị nwere omume abụọ e kenyere na ọkwa ikpeazụ nke pipeline - ebe ọ bụ na mgbakọ na ule agafeela, anyị nwere ike ịkọrọ ụwa anyị mmepe.

Nke mbụ, ka anyị leba anya na ibipụta na isi mmalite ngwugwu:

  1. Ọ bụrụ na ọrụ ahụ enweghị faịlụ nhazi nuget (nuget.config), mepụta nke ọhụrụ: dotnet new nugetconfig

    Maka gịnị: Onyonyo a nwere ike ọ gaghị enwe ohere ide ihe nhazi zuru ụwa ọnụ (onye ọrụ na igwe). Ka ị ghara ijide njehie, anyị ga-emepụta nhazi mpaghara ọhụrụ ma rụọ ọrụ na ya.

  2. Ka anyị tinye isi iyi ngwugwu ọhụrụ na nhazi mpaghara: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - aha isi obodo, ọ bụghị ihe dị mkpa
    2. url - URL nke isi mmalite sitere na ọkwa "Ịkwadebe akaụntụ", nzọụkwụ 6
    3. organization - aha nke nzukọ na Azure DevOps
    4. gitlab variable - aha nke mgbanwe na ntinye ohere agbakwunyere na GitLab ("Ịkwadebe akaụntụ", p. 11). Dị ka o kwesịrị ịdị, na usoro $variableName
    5. -StorePasswordInClearText - mbanye anataghị ikike ịgafe njehie anabataghị ohere (Abụghị m onye mbụ na-azọ ụkwụ na rake a)
    6. Ọ bụrụ na enwere mmejọ ọ nwere ike ịba uru ịgbakwunye -verbosity detailed
  3. Anyị na-eziga ngwugwu ahụ na isi mmalite: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Anyị na-eziga ngwugwu niile site na ndekọ aha ugbu a, ya mere *.nupkg.
    2. name - site na nzọụkwụ n'elu.
    3. key - ahịrị ọ bụla. Na Azure DevOps, na Jikọọ na mpio nri, ahịrị ihe atụ na-adị mgbe niile az.
    4. -skipduplicate - ọ bụrụ na ị nwaa izipu ngwugwu dị adị na-enweghị igodo a, isi iyi ga-eweghachi njehie 409 Conflict; na igodo ahụ, a ga-awụpụ nzipu ahụ.

Ugbu a, ka anyị melite mmepụta nke akwụkwọ:

  1. Iji malite, na ebe nchekwa, na ngalaba nna ukwu, anyị na-amalite ọrụ docfx. Iji mee nke a, ịkwesịrị ịgba ọsọ iwu site na mgbọrọgwụ docfx init ma na-emekọrịta ihe na-edozi isi ihe maka ịchịkọta akwụkwọ ahụ. Nkọwa zuru ezu nke nhazi ọrụ pere mpe ebe a.
    1. Mgbe ị na-edozi, ọ dị mkpa ịkọwapụta ndekọ mmepụta ..public - GitLab na ndabara na-ewere ọdịnaya nke folda ọha na mgbọrọgwụ nke ebe nchekwa dị ka isi mmalite maka ibe. N'ihi na oru ngo a ga-adi na nchekwa akwu n'ime ebe nchekwa - tinye ụzọ ọpụpụ na-esote larịị na ụzọ.
  2. Ka anyị tinye mgbanwe na GitLab.
  3. Tinye ọrụ na nhazi pipeline pages (okwu echekwara maka ọrụ mbipụta saịtị na ibe GitLab):
    1. Ederede:
      1. nuget install docfx.console -version 2.51.0 - tinye docfx; Enyere ụdị ahụ iji hụ na ụzọ nrụnye ngwugwu ziri ezi.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ịnakọta akwụkwọ
    2. Ọnụ ihe nka:

pages:
  # snip
  artifacts:
    paths:
      - public

Ntughari egwu egwu gbasara docfx

Na mbụ, mgbe ị na-ahazi ọrụ, akọwapụtara m koodu isi maka akwụkwọ dị ka faịlụ ngwọta. Ihe na-adịghị mma bụ na a na-emepụtakwa akwụkwọ maka ọrụ nyocha. Ọ bụrụ na nke a adịghị mkpa, ị nwere ike ịtọ uru a na ọnụ ọnụ metadata.src:

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

  1. metadata.src.src: "../" - gaa otu ọkwa elu n'ihe gbasara ebe ahụ docfx.json, n'ihi na Ịchọ osisi ndekọ anaghị arụ ọrụ na ụkpụrụ.
  2. metadata.src.files: ["**/*.csproj"] - usoro zuru ụwa ọnụ, anyị na-anakọta ọrụ C # niile site na akwụkwọ ndekọ aha niile.
  3. metadata.src.exclude: ["*.tests*/**"] - ụkpụrụ zuru ụwa ọnụ, wepụ ihe niile na nchekwa nwere .tests Na aha

Subtotal

Enwere ike ịmepụta nhazi a dị mfe n'ụzọ nkịtị na ọkara otu awa na iko kọfị abụọ, nke ga-enye gị ohere ịlele arịrịọ ọ bụla jikọrọ ọnụ wee ziga ya na nna ukwu na a na-achịkọta koodu ahụ na ule na-agafe, na-agbakọta ọhụrụ. ngwugwu, na-emelite akwụkwọ ahụ ma na-amasị anya na baajị mara mma na ọrụ ahụ README.

Ikpeazụ .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

Na-ekwu maka baajị

Ọ bụ n’ihi ha ka e ji malite ihe niile!

Baji nwere ọkwa pipeline na mkpuchi koodu dị na GitLab na ntọala CI/CD na ngọngọ Gtntral pipeline:

Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

M mepụtara baajị nwere njikọ na akwụkwọ n'elu ikpo okwu ọta.io - ihe niile kwụ ọtọ ebe ahụ, ị ​​nwere ike mepụta baajị nke gị wee nweta ya site na iji arịrịọ.

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

Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

Azure DevOps Artifacts na-enyekwa gị ohere ịmepụta baajị maka ngwugwu na-egosi ụdị ọhụrụ. Iji mee nke a, na isi mmalite na weebụsaịtị Azure DevOps, ịkwesịrị pịa Mepụta baajị maka ngwugwu ahọpụtara ma detuo akara akara:

Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

Ntuziaka maka CI/CD na GitLab maka Newbie zuru oke (ihe fọrọ nke nta ka ọ bụrụ).

Na-agbakwụnye mma

Anyị na-akọwapụta iberibe nhazi nkịtị

Mgbe m na-ede nhazi ahụ ma na-enyocha akwụkwọ ahụ, ahụrụ m otu njirimara YAML na-atọ ụtọ - iji mpekere.

Dịka ị na-ahụ site na ntọala ọrụ, ha niile chọrọ mkpado windows site na onye na-agba ọsọ, ma na-akpalite mgbe ị na-eziga arịrịọ njikọ na nna ukwu / ịmepụta arịrịọ njikọ (ma e wezụga akwụkwọ). Ka anyị tinye nke a na iberibe anyị ga-eji ọzọ:

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

Ma ugbu a, anyị nwere ike itinye iberibe nke ekwuputara na mbụ na nkọwa ọrụ:

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

Aha iberibe ga-amalite n'otu oge ka a ghara ịkọwa ya dị ka ọrụ.

Ụdị ngwugwu

Mgbe ị na-emepụta ngwugwu, onye na-achịkọta na-enyocha akara akara iwu, na n'ebe ha nọ, faịlụ faịlụ; N'ịbụ onye chọtara ọnụ ụdịdị ahụ, ọ na-ewe uru ya dị ka ụdị ngwugwu a na-ewu. Ọ tụgharịrị na iji wuo ngwugwu nwere ụdị ọhụrụ, ịkwesịrị imelite ya na faịlụ ọrụ ma ọ bụ nyefee ya dị ka arụmụka ahịrị iwu.

Ka anyị gbakwunye otu ọchịchọ - ka ọnụọgụ abụọ kacha ala na ụdị ahụ bụrụ afọ na ụbọchị nke ngwugwu ahụ wuo, ma tinye ụdị ntọhapụ mbụ. N'ezie, ị nwere ike itinye data a na faịlụ ọrụ ma lelee ya tupu ntinye nke ọ bụla - ma ị nwekwara ike ime nke a na pipeline, na-anakọta ngwugwu ngwugwu site na ọnọdụ ahụ ma na-agafe ya na arụmụka ahịrị iwu.

Ka anyị kwenye na ọ bụrụ na ozi nbanye nwere ahịrị dị ka release (v./ver./version) <version number> (rev./revision <revision>)?, mgbe ahụ, anyị ga-ewepụ ụdị ngwugwu ahụ site na ahịrị a, tinye ya na ụbọchị dị ugbu a ma nyefee ya dị ka arụmụka na iwu ahụ. dotnet pack. Na enweghị ahịrị, anyị agaghị achịkọta ngwugwu ahụ.

Edemede a na-edozi nsogbu 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

Na-agbakwụnye edemede na ọrụ pack and deploy job ma na-edebe mgbakọ nke ngwugwu nke ọma ma ọ bụrụ na e nwere ahịrị enyere na ozi itinye.

Ọnụ

Mgbe anyị nọrọ ihe dị ka ọkara otu awa ruo otu awa na-ede nhazi ahụ, na-emezigharị na powershell mpaghara na, ikekwe, mmalite ole na ole na-enweghị ihe ịga nke ọma, anyị nwetara nhazi dị mfe maka ịmegharị ọrụ oge niile.

N'ezie, GitLab CI/CD dị ọtụtụ na ọtụtụ akụkụ karịa ka ọ nwere ike iyi ka ọ gụchara ntuziaka a - nke ahụ abụghị eziokwu ma ọlị. Enwere ọbụna Auto DevOps eekwere

chọpụta na-akpaghị aka, wuo, nwalee, bugharịa ma nyochaa ngwa gị

Ugbu a atụmatụ a ga-ahazi pipeline maka ibuga ngwa na Azure, na-eji Pulumi na-achọpụta ebe a na-achọsi ike, nke a ga-ekpuchi n'isiokwu na-esote.

isi: www.habr.com

Tinye a comment