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:

Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

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

Jẹ ki a bẹrẹ!

Gbigba iṣeto ni

Ngbaradi awọn iroyin

  1. Ṣẹda iroyin ni Microsoft Azure

  2. Lọ si DevOps Azure

  3. A ṣẹda titun kan ise agbese

    1. Orukọ - eyikeyi
    2. Hihan - eyikeyi
      Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

  4. 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ẹ)
    Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

  5. Lọ si Awọn abuda, tẹ Ṣẹda kikọ sii

    1. Tẹ orukọ orisun naa sii
    2. Yan hihan
    3. 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
      Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

  6. Tẹ Sopọ si ifunni, yan Studio Visual, daakọ Orisun lati Àkọsílẹ Oṣo ẹrọ
    Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

  7. Lọ si awọn eto akọọlẹ, yan Àmi Wiwọle Ti ara ẹni
    Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

  8. Ṣẹda titun wiwọle àmi

    1. Orukọ - lainidii
    2. Agbari - Lọwọlọwọ
    3. Wulo fun o pọju 1 odun
    4. Dopin - Iṣakojọpọ/Ka & Kọ
      Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

  9. Daakọ aami ti a ṣẹda - lẹhin ti awọn modal window ti wa ni pipade, iye yoo wa ni ko si

  10. Lọ si awọn eto ibi ipamọ ni GitLab, yan awọn eto CI / CD
    Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

  11. Faagun bulọọki Awọn iyipada, ṣafikun ọkan tuntun

    1. Orukọ - eyikeyi laisi awọn aaye (yoo wa ninu ikarahun aṣẹ)
    2. Iye - ami wiwọle lati paragirafi 9
    3. Yan oniyipada Boju
      Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

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:

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

Bi o ti le ri, ohun gbogbo ni o rọrun ati ki o taara.

O tun le ṣeto iṣẹ-ṣiṣe si ina nikan ti ibeere apapọ kan ba ṣẹda pẹlu ibi-afẹde kan pato tabi ẹka orisun:

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

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:

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

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.

  1. A fẹ kọ idasilẹ, kii ṣe kọ yokokoro, nitorinaa a ṣafikun si aṣẹ kọọkan -c Release
  2. Nigba idanwo, a fẹ lati gba data agbegbe koodu, nitorinaa a nilo lati ṣafikun olutupalẹ agbegbe ninu awọn ile-ikawe idanwo:
    1. Fi package kun si gbogbo awọn ile-ikawe idanwo coverlet.msbuild: dotnet add package coverlet.msbuild lati folda ise agbese
    2. Fi si aṣẹ ṣiṣe idanwo /p:CollectCoverage=true
    3. Ṣafikun bọtini kan si iṣeto iṣẹ ṣiṣe idanwo lati gba awọn abajade agbegbe (wo isalẹ)
  3. Nigbati o ba n ṣajọ koodu naa sinu awọn idii nuget, ṣeto ilana iṣelọpọ fun awọn idii: -o .

Gbigba data agbegbe koodu

Lẹhin ṣiṣe awọn idanwo naa, awọn atẹjade Coverlet nṣiṣẹ awọn iṣiro si 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 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:

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

  2. 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
    1. name - orukọ orisun agbegbe, kii ṣe pataki
    2. url - URL ti orisun lati ipele "Ngbaradi awọn akọọlẹ", oju-iwe 6
    3. organization - orukọ agbari ni Azure DevOps
    4. 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
    5. -StorePasswordInClearText - gige kan lati fori aṣiṣe iwọle ti a kọ (Emi kii ṣe ẹni akọkọ lati tẹ lori rake yii)
    6. Ni ọran ti awọn aṣiṣe, o le wulo lati ṣafikun -verbosity detailed
  3. Fifiranṣẹ package si orisun: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. A fi gbogbo jo lati lọwọlọwọ liana, rẹ *.nupkg.
    2. name - lati igbese loke.
    3. key - eyikeyi ila. Ni Azure DevOps, ni Sopọ si window ifunni, apẹẹrẹ jẹ laini nigbagbogbo az.
    4. -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ṣẹ:

  1. 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.
    1. 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.
  2. Jẹ ki a Titari awọn ayipada si GitLab.
  3. Ṣ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):
    1. Iwe afọwọkọ:
      1. 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.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - gbigba iwe
    2. 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": "../",
          "files": [
            "**/*.csproj"
          ],
          "exclude":[
            "*.tests*/**"
          ]
        }
      ],
      // --- snip ---
    },
    // --- snip ---
  ],
  // --- snip ---
}

  1. 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ṣẹ.
  2. metadata.src.files: ["**/*.csproj"] - apẹẹrẹ agbaye, a gba gbogbo awọn iṣẹ akanṣe C # lati gbogbo awọn ilana.
  3. 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:

Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

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)

Itọsọna kan si CI/CD ni GitLab fun olubere pipe (fere).

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:

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

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:

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

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.

orisun: www.habr.com

Fi ọrọìwòye kun