Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

Ko yadda ake samun kyawawan bajoji don aikinku a cikin maraice ɗaya na annashuwa

Wataƙila, kowane mai haɓakawa wanda ke da aƙalla aikin dabba ɗaya a wani lokaci yana da ƙaiƙayi game da kyawawan bajoji tare da statuses, ɗaukar hoto, nau'ikan fakiti a cikin nuget ... Kuma wannan ƙaiƙayi ya sa na rubuta wannan labarin. A cikin shirye-shiryen rubuta shi, na sami wannan kyawun a cikin ɗayan ayyukana:

Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

Wannan labarin zai rufe ainihin saitin ci gaba da haɗin kai da bayarwa don aikin ɗakin karatu na .Net Core a GitLab, buga takardu zuwa GitLab Shafukan da aika fakitin da aka tattara zuwa abinci mai zaman kansa a Azure DevOps.

An yi amfani da lambar VS azaman yanayin haɓakawa tare da haɓakawa GitLab Aikin Aiki (don inganta fayil ɗin saituna kai tsaye daga yanayin haɓakawa).

Gabatarwa a takaice

CD - shin lokacin da kuka tura kawai, kuma komai ya riga ya faɗi akan abokin ciniki?

Menene CI / CD kuma me yasa kuke buƙatar shi - zaku iya google shi cikin sauƙi. Nemo cikakkun bayanai akan daidaita bututun mai a GitLab kuma mai sauki. Anan zan taƙaice kuma, idan zai yiwu, ba tare da lahani ba ya bayyana tsarin tsarin daga kallon idon tsuntsu:

  • mai haɓakawa ya aika da alƙawarin zuwa ma'ajiyar, ya ƙirƙiri buƙatun haɗin kai ta gidan yanar gizon, ko kuma ta wata hanya, a bayyane ko a fakaice fara bututun,
  • An zaɓi duk ayyuka daga tsarin, yanayin da ke ba da damar ƙaddamar da su a cikin mahallin da aka ba,
  • ana tsara ayyuka gwargwadon matakansu.
  • ana aiwatar da matakai bi da bi - watau. a layi daya an kammala dukkan ayyukan wannan mataki,
  • idan matakin ya gaza (watau akalla daya daga cikin ayyukan matakin ya kasa), bututun ya tsaya (kusan ko da yaushe),
  • idan an kammala dukkan matakai cikin nasara, ana ɗaukar bututun mai nasara.

Don haka, muna da:

  • bututun saitin ayyuka ne da aka tsara cikin matakai wanda zaku iya tarawa, gwadawa, lambar fakiti, tura taron da aka gama zuwa sabis na girgije, da sauransu.
  • mataki (mataki) - Ƙungiyar ƙungiyar bututu, ta ƙunshi ɗawainiya 1+,
  • aiki (aiki) rukunin aiki ne a cikin bututun mai. Ya ƙunshi rubutun (wajibi), yanayin ƙaddamarwa, saiti don bugawa / adana kayan tarihi, da ƙari mai yawa.

Saboda haka, aikin lokacin da aka kafa CI / CD ya sauko don ƙirƙirar jerin ayyuka waɗanda ke aiwatar da duk ayyukan da suka dace don haɗawa, gwaji da buga lambar da kayan tarihi.

Kafin farawa: me yasa?

  • Me yasa Gitlab?

Domin lokacin da ake buƙatar ƙirƙirar ɗakunan ajiya masu zaman kansu don ayyukan dabbobi, an biya su akan GitHub, kuma na kasance m. Ma'ajiyoyin sun zama 'yanci, amma a yanzu wannan bai isa ba dalili na ƙaura zuwa GitHub.

  • Me yasa ba bututun Azure DevOps ba?

Domin saitin yana da sauƙi - ba kwa buƙatar sanin layin umarni. Haɗin kai tare da masu samar da git na waje - a cikin dannawa biyu, shigo da maɓallan SSH don aikawa zuwa ma'ajiyar - kuma, ana daidaita bututun cikin sauƙi koda ba tare da samfuri ba.

Matsayin farawa: abin da kuke da shi da abin da kuke so

Muna da:

  • wurin ajiya a GitLab.

Muna so:

  • haɗuwa ta atomatik da gwaji don kowane buƙatun haɗin kai,
  • fakitin gini don kowane buƙatun haɗaka da turawa zuwa ga maigidan, muddin akwai takamaiman layi a cikin saƙon ƙaddamarwa,
  • aika fakitin da aka tattara zuwa abinci mai zaman kansa a cikin Azure DevOps,
  • taro na takardu da bugawa a cikin Shafukan GitLab,
  • bugu!11

Abubuwan buƙatun da aka bayyana sun dace da dabi'a cikin ƙirar bututun mai zuwa:

  • Mataki na 1 - taro
    • Muna tattara lambar, buga fayilolin fitarwa azaman kayan tarihi
  • Mataki na 2 - gwaji
    • Muna karɓar kayan tarihi daga matakin ginin, gudanar da gwaje-gwaje, tattara bayanan ɗaukar hoto
  • Mataki na 3 - Gabatarwa
    • Aiki 1 - Gina kunshin nuget kuma aika shi zuwa Azure DevOps
    • Aiki 2 - muna tattara rukunin yanar gizon daga xmldoc a cikin lambar tushe kuma mu buga shi a Shafukan GitLab

Bari mu fara!

Tattara daidaitawa

Ana shirya asusun

  1. Ƙirƙiri asusu a ciki microsoft Azure

  2. Je zuwa Devure na Azure

  3. Ƙirƙiri sabon aiki

    1. Suna - kowane
    2. Ganuwa - kowane
      Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

  4. Lokacin da ka danna maɓallin Ƙirƙiri, za a ƙirƙira aikin kuma za a tura ka zuwa shafinsa. A wannan shafin, zaku iya musaki abubuwan da ba dole ba ta hanyar zuwa saitunan aikin (ƙananan hanyar haɗi a cikin jeri a hagu -> Bayani -> Katange Sabis na Azure DevOps)
    Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

  5. Je zuwa Halaye, danna Ƙirƙiri ciyarwa

    1. Shigar da sunan tushen
    2. Zaɓi ganuwa
    3. Cire alamar akwatin Haɗa fakiti daga tushen jama'a gama gari, don kada tushen ya juya zuwa juji nuget clone
      Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

  6. Danna Haɗa don ciyarwa, zaɓi Kayayyakin Kayayyakin Kayayyakin Kayayyakin, kwafi Source daga Katangar Saitin Inji
    Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

  7. Je zuwa saitunan asusu, zaɓi Alamar Samun dama ta Keɓaɓɓu
    Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

  8. Ƙirƙiri sabon alamar shiga

    1. Suna - sabani
    2. Ƙungiya - halin yanzu
    3. Yana aiki har tsawon shekara 1
    4. Iyakar - Marufi/Karanta & Rubuta
      Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

  9. Kwafi alamar da aka ƙirƙira - bayan an rufe taga modal, ƙimar ba za ta kasance ba

  10. Jeka saitunan ma'ajin a GitLab, zaɓi saitunan CI / CD
    Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

  11. Fadada toshe Variables kuma ƙara sabo

    1. Suna - duk wanda ba tare da sarari ba (zai kasance a cikin harsashin umarni)
    2. Ƙimar ita ce alamar samun dama daga mataki na 9
    3. Zaɓi canjin abin rufe fuska
      Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

Wannan yana kammala tsarin saiti.

Ana shirya tsarin tsari

Ta hanyar tsoho, fayil ɗin da ake amfani da shi don saita CI/CD a cikin GitLab shine .gitlab-ci.yml daga tushen ma'ajiyar. Kuna iya saita hanyar al'ada zuwa wannan fayil a cikin saitunan ma'ajin, amma a wannan yanayin ba lallai bane.

Kamar yadda kake gani daga tsawo, fayil ɗin yana ƙunshe da tsari a cikin tsari YAML. Takardun ya bayyana dalla-dalla abin da maɓallai za a iya ƙunshe a saman matakin daidaitawa, kuma a cikin kowane matakan gida.

Da farko, bari mu ƙara hanyar haɗi zuwa hoton docker a cikin fayil ɗin daidaitawa, wanda za a aiwatar da ayyukan. Don yin wannan mun sami .Net Core images a kan Docker Hub. A GitHub akwai cikakken jagora akan wane hoton da za a zaɓa don ayyuka daban-daban. Hoto tare da .Net Core 3.1 ya dace da mu don ginawa, don haka jin daɗin ƙara layin farko zuwa daidaitawa.

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

Yanzu, lokacin da kuka fara bututun, za a zazzage hoton da aka kayyade daga wurin ajiyar hoton Microsoft, inda za a aiwatar da dukkan ayyuka daga tsarin.

Mataki na gaba shine ƙarawa mataki's. Ta hanyar tsoho, GitLab yana bayyana matakai 5:

  • .pre - za'ayi zuwa duk matakai,
  • .post - an yi bayan duk matakai,
  • build - na farko bayan .pre mataki,
  • test - kashi na biyu,
  • deploy - mataki na uku.

Babu wani abu da zai hana ku bayyana su a sarari, duk da haka. Tsarin da aka jera matakan yana shafar tsarin da aka yi su. Don cikawa, bari mu ƙara zuwa daidaitawa:

stages:
  - build
  - test
  - deploy

Don gyara kuskure, yana da ma'ana don samun bayanai game da yanayin da ake aiwatar da ayyukan. Bari mu ƙara jerin umarni na duniya waɗanda za a aiwatar da su kafin kowane ɗawainiya da su before_script:

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

Ya rage don ƙara aƙalla ɗawainiya ta yadda lokacin da aka aika ayyukan, bututun zai fara. A yanzu, bari mu ƙara aikin fanko don nunawa:

dummy job:
  script:
    - echo ok

Mun fara tabbatarwa, samun saƙo cewa komai yana da kyau, ƙaddamarwa, turawa, duba sakamakon akan shafin ... Kuma muna samun kuskuren rubutun - bash: .PSVersion: command not found. wtf ba?

Komai yana da ma'ana - ta tsohuwa, masu gudu (masu alhakin aiwatar da rubutun ayyuka da GitLab ya bayar) suna amfani da su. bash don aiwatar da umarni. Kuna iya gyara wannan ta hanyar ƙayyadaddun ƙayyadaddun ayyuka a cikin bayanin aikin abin da ya kamata mai aiwatar da bututun mai ya samu:

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

Mai girma! Yanzu dai bututun yana gudana.

Mai karatu mai hankali, bayan maimaita matakan da aka nuna, zai lura cewa an kammala aikin a cikin mataki test, kodayake ba mu bayyana matakin ba. Kamar yadda kuke tsammani test shine matakin tsoho.

Bari mu ci gaba da ƙirƙirar kwarangwal ɗin daidaitawa ta ƙara duk ayyukan da aka bayyana a sama:

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

Mun samu ba musamman aiki, amma duk da haka daidai bututu.

Saita abubuwan jan hankali

Saboda gaskiyar cewa ba a kayyade masu tacewa don kowane ɗayan ayyukan ba, bututun zai yi cikakke aiwatar da duk lokacin da aka aika aika aika zuwa ma'ajiyar. Tunda wannan ba shine halin da ake so gabaɗaya ba, za mu saita masu tacewa don ayyuka.

Ana iya daidaita matattarar ta cikin tsari biyu: kawai/sai dai и dokoki. A takaice, only/except yana ba ku damar saita masu tacewa ta hanyar faɗakarwa (merge_request, alal misali - yana tsara aikin da za a aiwatar a duk lokacin da aka ƙirƙiri buƙatun haɗin kai kuma duk lokacin da aka aika zuwa reshe wanda shine tushen a cikin buƙatar haɗin gwiwa) da sunayen reshe (ciki har da yin amfani da maganganu na yau da kullum); rules yana ba ku damar tsara saitin yanayi kuma, ba zaɓi ba, canza yanayin aiwatar da aikin dangane da nasarar ayyukan da suka gabata (when a cikin GitLab CI/CD).

Bari mu tuna da saitin buƙatun - taro da gwaji kawai don buƙatun haɗuwa, marufi da aikawa zuwa Azure DevOps - don haɗa buƙatun da turawa ga maigidan, tsararru na takardu - don turawa ga maigidan.

Da farko, bari mu saita aikin gina lambar ta ƙara ƙa'idar da ke ƙonewa kawai akan buƙatar haɗuwa:

build job:
  # snip
  only:
    - merge_request

Yanzu bari mu saita aikin marufi don kunna wuta akan buƙatun haɗaka kuma ƙara sadaukarwa ga maigidan:

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

Kamar yadda kake gani, komai yana da sauƙi kuma madaidaiciya.

Hakanan zaka iya saita aikin don ƙonewa kawai idan an ƙirƙiri buƙatar haɗaka tare da takamaiman manufa ko reshen tushe:

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

A karkashin yanayi, zaka iya amfani masu canji da aka jera a nan; dokoki rules rashin jituwa da dokoki only/except.

Yana Haɓaka Ajiye Kayan Aikin Gaggawa

Lokacin aiki build job za mu sami gine-ginen kayan tarihi waɗanda za a iya sake amfani da su a ayyuka na gaba. Don yin wannan, kuna buƙatar ƙara hanyoyin zuwa tsarin aiki, fayilolin da kuke buƙatar adanawa da sake amfani da su a cikin ayyuka masu zuwa, zuwa maɓallin. artifacts:

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

Hanyoyi suna goyan bayan katunan daji, wanda tabbas zai sauƙaƙa saita su.

Idan wani aiki ya haifar da kayan tarihi, to kowane aiki na gaba zai iya samun damar yin amfani da su - za su kasance tare da hanyoyi guda ɗaya dangane da tushen ma'ajin da aka tattara daga ainihin aikin. Hakanan ana samun kayan tarihi don saukewa akan gidan yanar gizon.

Yanzu da muna da tsarin daidaitawa a shirye (kuma an gwada), za mu iya ci gaba zuwa ainihin rubuta rubutun don ayyuka.

Muna rubuta rubutun

Wataƙila, sau ɗaya a wani lokaci, a cikin galaxy mai nisa, mai nisa, ayyukan gine-gine (ciki har da waɗanda ke kan .net) daga layin umarni yana da zafi. Yanzu zaku iya ginawa, gwadawa da buga aikin cikin ƙungiyoyi 3:

dotnet build
dotnet test
dotnet pack

A zahiri, akwai wasu nuances saboda waɗanda za mu rikitar da umarni kaɗan.

  1. Muna son ginin saki, ba ginin gyara kuskure ba, don haka muna ƙara zuwa kowane umarni -c Release
  2. Lokacin gwaji, muna son tattara bayanan ɗaukar hoto, don haka muna buƙatar haɗa mai nazarin ɗaukar hoto a cikin ɗakunan karatu na gwaji:
    1. Ya kamata a ƙara kunshin zuwa duk ɗakunan karatu na gwaji coverlet.msbuild: dotnet add package coverlet.msbuild daga babban fayil ɗin aikin
    2. Ƙara zuwa umarnin gudu na gwaji /p:CollectCoverage=true
    3. Ƙara maɓalli zuwa tsarin aikin gwaji don samun sakamakon ɗaukar hoto (duba ƙasa)
  3. Lokacin tattara lambar a cikin fakitin nuget, saita jagorar fitarwa don fakitin: -o .

Tattara bayanan ɗaukar hoto

Bayan gudanar da gwaje-gwajen, Coverlet yana buga ƙididdiga masu gudana zuwa na'ura mai kwakwalwa:

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 yana ba ku damar ƙididdige magana ta yau da kullun don samun ƙididdiga, wanda za'a iya samu ta hanyar lamba. An ƙayyade furci na yau da kullum a cikin saitunan ɗawainiya tare da maɓalli coverage; furucin dole ne ya ƙunshi rukunin kama, wanda ƙimarsa za a canza shi zuwa lamba:

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

Anan muna samun ƙididdiga daga layi mai jimlar ɗaukar hoto.

Muna buga fakiti da takardu

Dukkan ayyukan biyu an tsara su ne don mataki na ƙarshe na bututun mai - tun lokacin da taro da gwaje-gwaje sun wuce, za mu iya raba abubuwan da muke faruwa tare da duniya.

Da farko, la'akari da bugawa zuwa tushen fakitin:

  1. Idan aikin ba shi da fayil ɗin sanyi na nuget (nuget.config), ƙirƙirar sabo: dotnet new nugetconfig

    Don me: Hoton na iya zama ba shi da damar yin rubutu zuwa jeri na duniya (mai amfani da na'ura). Domin kada mu kama kurakurai, muna kawai ƙirƙirar sabon tsarin gida kuma muyi aiki da shi.

  2. Bari mu ƙara sabon tushen fakitin zuwa tsarin gida: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - sunan tushen gida, ba mahimmanci ba
    2. url - URL na tushen daga mataki "Shirya asusu", shafi 6
    3. organization - sunan kungiya a cikin Azure DevOps
    4. gitlab variable - sunan mai canzawa tare da alamar shiga da aka ƙara zuwa GitLab ("Shirya asusu", shafi 11). A zahiri, a cikin tsari $variableName
    5. -StorePasswordInClearText - hack don ƙetare kuskuren samun damar da aka hana (Ba ni ne farkon fara taka wannan rake ba)
    6. Idan akwai kurakurai, yana iya zama da amfani don ƙarawa -verbosity detailed
  3. Aika fakitin zuwa tushen: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Muna aika duk fakiti daga kundin adireshi na yanzu, don haka *.nupkg.
    2. name - daga mataki na sama.
    3. key - kowane layi. A cikin Azure DevOps, a cikin Haɗin zuwa taga ciyarwa, layin misali koyaushe ne az.
    4. -skipduplicate - lokacin ƙoƙarin aika kunshin da ya riga ya kasance ba tare da wannan maɓalli ba, tushen zai dawo da kuskure 409 Conflict; tare da maɓalli, za a tsallake aikawa.

Yanzu bari mu saita ƙirƙirar takaddun:

  1. Don farawa, a cikin ma'ajiya, a cikin babban reshe, mun fara aikin docfx. Don yin wannan, kuna buƙatar gudanar da umarni daga tushen docfx init kuma ta hanyar haɗin gwiwa saita maɓalli masu mahimmanci don takardun gini. Cikakken bayanin mafi ƙarancin saitin aikin a nan.
    1. Lokacin kafawa, yana da mahimmanci a saka kundin adireshin fitarwa ..public - GitLab ta tsohuwa yana ɗaukar abubuwan da ke cikin babban fayil ɗin jama'a a tushen ma'ajiyar azaman tushen Shafukan. Domin aikin zai kasance a cikin babban fayil ɗin da aka ajiye a cikin ma'ajin - ƙara hanyar fita zuwa mataki na gaba zuwa hanya.
  2. Bari mu tura canje-canje zuwa GitLab.
  3. Ƙara ɗawainiya zuwa tsarin bututun mai pages (Kalmar da aka keɓe don ayyukan bugu na rukunin yanar gizo a cikin Shafukan GitLab):
    1. Rubutun:
      1. nuget install docfx.console -version 2.51.0 - shigar da docfx; An ba da sigar don tabbatar da cewa hanyoyin shigar da kunshin daidai ne.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - tattara takardu
    2. Kumburin kayan tarihi:

pages:
  # snip
  artifacts:
    paths:
      - public

Digression na magana game da docfx

A baya can, lokacin da ake kafa aiki, na ayyana tushen lambar don takardu azaman fayil ɗin mafita. Babban hasara shi ne cewa an ƙirƙiri takardu don ayyukan gwaji. Idan wannan bai zama dole ba, zaku iya saita wannan ƙimar zuwa kumburi metadata.src:

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

  1. metadata.src.src: "../" - tafi mataki ɗaya sama dangane da wurin docfx.json, saboda a cikin alamu, bincika bishiyar directory baya aiki.
  2. metadata.src.files: ["**/*.csproj"] - tsarin duniya, muna tattara duk ayyukan C # daga duk kundayen adireshi.
  3. metadata.src.exclude: ["*.tests*/**"] - tsarin duniya, ware komai daga manyan fayiloli tare da .tests A cikin take

Canji

Za'a iya ƙirƙirar wannan tsari mai sauƙi a cikin rabin sa'a da kofuna biyu na kofi, wanda zai ba ku damar bincika kowane buƙatun haɗin kai kuma aika shi zuwa ga maigidan cewa ana tattara lambar kuma gwaje-gwajen suna wucewa, suna haɗa sabon. kunshin, sabunta takaddun da kuma faranta ido tare da kyawawan bajoji a cikin aikin README.

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

Magana akan baji

Don su ne aka fara komai!

Ana samun baji tare da ma'aunin bututun bututu da murfin lamba a cikin GitLab a cikin saitunan CI/CD a cikin toshe bututun Gtntral:

Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

Na ƙirƙiri lamba tare da hanyar haɗi zuwa takaddun akan dandamali Garkuwa.io - komai yana da sauƙi a can, zaku iya ƙirƙirar alamar ku kuma karɓe ta ta amfani da buƙata.

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

Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

Azure DevOps Artifacts kuma yana ba ku damar ƙirƙirar baji don fakitin da ke nuna sabon sigar. Don yin wannan, a cikin tushen akan gidan yanar gizon Azure DevOps, kuna buƙatar danna kan Ƙirƙiri lamba don fakitin da aka zaɓa kuma kwafi alamar alamar:

Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari

Ƙara kyau

Muna haskaka ɓangarorin daidaitawa gama gari

Yayin rubuta tsari da bincike ta cikin takaddun, na ci karo da wani abu mai ban sha'awa na YAML - sake amfani da gutsuttsura.

Kamar yadda kuke gani daga saitunan ɗawainiya, duk suna buƙatar alamar windows a mai gudu, kuma ana haifar da su lokacin da aka aika buƙatar haɗakarwa zuwa maigidan/halitta (sai dai takaddun shaida). Bari mu ƙara wannan zuwa guntun da za mu sake amfani da shi:

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

Kuma yanzu za mu iya saka guntun da aka bayyana a baya a cikin bayanin aikin:

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

Dole ne sunayen guntu su fara da wani lokaci don gujewa fassara su azaman ɗawainiya.

Sigar fakitin

Lokacin ƙirƙirar kunshin, mai tarawa yana duba madaidaicin layin umarni, kuma a cikin rashi, fayilolin aikin; lokacin da ya sami kumburin Sigar, yana ɗaukar ƙimarsa azaman sigar fakitin da ake ginawa. Ya bayyana cewa don gina kunshin tare da sabon sigar, kuna buƙatar ko dai sabunta shi a cikin fayil ɗin aikin ko wuce shi azaman gardamar layin umarni.

Bari mu ƙara ƙarin jerin buri guda ɗaya - bari ƙananan lambobi biyu a cikin sigar su zama shekara da gina ranar fakitin, kuma a ƙara juzu'in farko. Tabbas, zaku iya ƙara wannan bayanan zuwa fayil ɗin aikin kuma bincika kafin kowane ƙaddamarwa - amma kuna iya yin shi a cikin bututun, tattara sigar fakitin daga mahallin kuma ku wuce ta hanyar gardamar layin umarni.

Mu yarda cewa idan sakon ya ƙunshi layi kamar release (v./ver./version) <version number> (rev./revision <revision>)?, to, za mu ɗauki nau'in kunshin daga wannan layin, ƙara shi tare da kwanan wata kuma mu wuce shi azaman hujja ga umarnin. dotnet pack. Idan babu layi, kawai ba za mu tattara kunshin ba.

Rubutun mai zuwa yana magance wannan matsala:

# регулярное выражение для поиска строки с версией
$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

Ƙara rubutun zuwa ɗawainiya pack and deploy job kuma ku kiyaye taron fakiti sosai a gaban wata kirtani da aka bayar a cikin saƙon ƙaddamarwa.

Jimlar

Bayan shafe kusan rabin sa'a ko sa'a guda rubuta tsarin daidaitawa, yin gyara a cikin wutar lantarki na gida kuma, mai yiwuwa, wasu ƙaddamar da ba su yi nasara ba, mun sami tsari mai sauƙi don sarrafa ayyukan yau da kullun.

Tabbas, GitLab CI/CD ya fi yawa kuma yana da yawa fiye da yadda ake iya gani bayan karanta wannan jagorar - hakan ba gaskiya bane ko kadan. Akwai ma Auto DevOps ehkyalewa

ganowa ta atomatik, ginawa, gwadawa, turawa, da saka idanu akan aikace-aikacenku

Yanzu shirye-shiryen shine saita bututu don tura aikace-aikace zuwa Azure, ta amfani da Pulumi da kuma tantance yanayin da ake niyya ta atomatik, wanda za a rufe a labarin na gaba.

source: www.habr.com

Add a comment