He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

A i ʻole pehea e loaʻa ai nā hōʻailona nani no kāu papahana i hoʻokahi ahiahi o ka coding maʻalahi

Malia paha, ʻo kēlā me kēia mea hoʻomohala i loaʻa ma kahi liʻiliʻi hoʻokahi papahana holoholona i kekahi manawa he ʻeha e pili ana i nā hōʻailona nani me nā statuses, code coverage, package versions in nuget ... A ua alakaʻi kēia itch iaʻu e kākau i kēia ʻatikala. I ka hoʻomākaukau ʻana no ke kākau ʻana, ua loaʻa iaʻu kēia nani ma kekahi o kaʻu mau papahana:

He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

E alakaʻi kēia ʻatikala iā ʻoe ma o ka hoʻonohonoho kumu o ka hoʻohui mau ʻana a me ka hāʻawi ʻana no kahi papahana waihona papa .Net Core ma GitLab, ka paʻi ʻana i nā palapala i GitLab Pages, a me ka hoʻouka ʻana i nā pūʻolo i kūkulu ʻia i kahi hānai pilikino ma Azure DevOps.

Ua hoʻohana ʻia ʻo VS Code e like me ke kaiapuni hoʻomohala me ka hoʻonui Ke Kaʻina Hana GitLab (no ka hōʻoia ʻana i ka faila hoʻonohonoho pololei mai ke kaiapuni hoʻomohala).

Nā hoʻolauna pōkole

CD - ʻo ia ka wā āu i hoʻokuke wale ai, a ua hāʻule nā ​​​​mea āpau i ka mea kūʻai aku?

He aha ka CI / CD a no ke aha ʻoe e pono ai - hiki iā ʻoe ke maʻalahi iā Google. E ʻimi i nā palapala piha no ka hoʻonohonoho ʻana i nā pipeline ma GitLab maʻalahi hoʻi. Eia wau e wehewehe pōkole a, inā hiki, me ka ʻole o nā hemahema e wehewehe i ke kaʻina hana o ka ʻōnaehana mai ka maka o ka manu:

  • Hoʻouna ka mea hoʻomohala i kahi hana i ka waihona, hana i kahi noi hoʻohui ma o ka pūnaewele, a i ʻole ma kekahi ʻano ʻē aʻe, e hoʻomaka a i ʻole implicitly i ka pipeline,
  • koho ʻia nā hana a pau mai ka hoʻonohonoho ʻana, nā kūlana e hiki ai iā lākou ke hoʻomaka i ka pōʻaiapili i hāʻawi ʻia,
  • Hoʻonohonoho ʻia nā hana e like me kā lākou pae,
  • hoʻokō ʻia nā pae ma ka huli ʻana - i.e. kūlike pau na hana o keia pae,
  • inā hāʻule ka pae (ʻo ia hoʻi.aneane mau),
  • inā hoʻopau maikaʻi ʻia nā pae āpau, manaʻo ʻia ua holomua ka pipeline.

No laila, loaʻa iā mākou:

  • pipeline - kahi hoʻonohonoho o nā hana i hoʻonohonoho ʻia i nā pae e hiki ai iā ʻoe ke kūkulu, hoʻāʻo, code package, hoʻonohonoho i kahi hana i hoʻopau ʻia i kahi lawelawe kapua, etc.,
  • kahua (ke kahua) - hui hui paipu, aia 1+ hana,
  • hana (oihana) he mahele o ka hana ma ka paipu. Loaʻa iā ia kahi palapala (pono), nā kūlana hoʻomaka, nā hoʻonohonoho no ka paʻi ʻana/caching artifacts, a me nā mea hou aku.

No laila, ʻo ka hana i ka wā e hoʻonohonoho ai iā CI / CD e iho i lalo i ka hana ʻana i kahi hoʻonohonoho o nā hana e hoʻokō i nā hana pono āpau no ke kūkulu ʻana, hoʻāʻo a hoʻopuka i nā code a me nā mea hana.

Ma mua o ka hoʻomaka: no ke aha?

  • No ke aha ʻo Gitlab?

No ka mea, i ka wā i lilo ai i mea pono e hana i nā waihona pilikino no nā papahana holoholona, ​​ua uku ʻia lākou ma GitHub, a ua kuko wau. Ua manuahi nā waihona, akā ʻaʻole lawa kēia kumu noʻu e neʻe ai i GitHub.

  • No ke aha ʻaʻole ʻo Azure DevOps Pipelines?

No ka mea ma laila ke kumu o ka hoʻonohonoho - ʻaʻole koi ʻia ka ʻike o ka laina kauoha. Hoʻohui pū me nā mea hoʻolako git waho - i nā kaomi ʻelua, lawe mai i nā kī SSH e hoʻouna i nā hana i ka waihona - ʻo ia hoʻi, ua maʻalahi ka hoʻonohonoho ʻana o ka pipeline ʻoiai ʻaʻole mai kahi template.

Ke kūlana hoʻomaka: he aha kāu a me kāu makemake

Aia iā mākou:

  • waihona ma GitLab.

Makemake mākou:

  • hui 'akomi a ho'āʻo no kēlā me kēia noi hoʻohui,
  • ke kūkulu ʻana i nā pūʻolo no kēlā me kēia noi hoʻohui a hoʻokuʻi ʻia i ka haku, inā aia kekahi laina i ka memo commit,
  • ka hoʻouna ʻana i nā pūʻolo i kūkulu ʻia i kahi hānai pilikino ma Azure DevOps,
  • hui o nā palapala a me ka hoʻolaha ʻana ma GitLab Pages,
  • nā hōʻailona!11

ʻO nā koi i wehewehe ʻia e hāʻule maoli i ke kumu hoʻohālike pipeline:

  • Papa 1 - Hui
    • E hōʻiliʻili mākou i ke code, hoʻopuka i nā faila hoʻopuka ma ke ʻano he kiʻi
  • Ka Papa 2 - ho'āʻo
    • Loaʻa iā mākou nā mea kiʻi mai ke kahua kūkulu, holo i nā hoʻokolohua, hōʻiliʻili i ka ʻikepili uhi code
  • Ka Papa 3 - Hoʻouna
    • Hana 1 - kūkulu i ka pūʻolo nuget a hoʻouna iā Azure DevOps
    • Hana 2 - hōʻiliʻili mākou i ka pūnaewele mai xmldoc i ke kumu kumu a hoʻolaha iā ia ma GitLab Pages

E hoʻomaka kākou!

ʻOhi ʻana i ka hoʻonohonoho

Hoʻomākaukau i nā moʻolelo

  1. E hana i mooolelo ma Microsoft Azure

  2. E hele ʻO Azure DevOps

  3. Hana mākou i kahi papahana hou

    1. Ka inoa - kekahi
    2. ʻIke ʻia - kekahi
      He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

  4. Ke kaomi ʻoe i ke pihi Create, e hana ʻia ka papahana a e hoʻihoʻi ʻia ʻoe i kona ʻaoʻao. Ma kēia ʻaoʻao, hiki iā ʻoe ke hoʻopau i nā hiʻohiʻona pono ʻole ma ka hele ʻana i nā hoʻonohonoho papahana (loulou haʻahaʻa ma ka papa inoa ma ka hema -> Overview -> Azure DevOps Services block)
    He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

  5. E hele i ka Atrifacts, kaomi i ka Create feed

    1. E hookomo i ka inoa o ke kumu
    2. E koho i ka ʻike
    3. Wehe E hoʻokomo i nā pūʻolo mai nā kumu lehulehu, i ʻole e lilo ke kumu i kahi clone nuget dump
      He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

  6. Kaomi Hoʻohui e hānai, koho i ka Visual Studio, kope i ka Source mai ka poloka Machine Setup
    He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

  7. E hele i nā hoʻonohonoho moʻokāki, koho Personal Access Token
    He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

  8. E hana i kahi hōʻailona komo hou

    1. Ka inoa - kūʻokoʻa
    2. Hui - i kēia manawa
    3. Pono no ka lōʻihi o 1 makahiki
    4. Pāʻani - Packaging/Heluhelu & Kākau
      He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

  9. E kope i ka hōʻailona i hana ʻia - ma hope o ka pani ʻana o ka puka aniani modal, ʻaʻole loaʻa ka waiwai

  10. E hele i nā hoʻonohonoho waihona ma GitLab, koho i nā hoʻonohonoho CI / CD
    He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

  11. E hoʻonui i ka poloka Variables, e hoʻohui i kahi mea hou

    1. Inoa - kekahi me ka ʻole o nā hakahaka (e loaʻa i ka shell command)
    2. Waiwai - hōʻailona komo mai ka paukū 9
    3. E koho i ka hoʻololi mask
      He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

Hoʻopau kēia i ka hoʻonohonoho mua.

Ke hoʻomākaukau nei i ka papa hana hoʻonohonoho

Ma ka maʻamau, hoʻohana ka hoʻonohonoho CI/CD ma GitLab i ka faila .gitlab-ci.yml mai ke kumu o ka waihona. Hiki iā ʻoe ke hoʻonohonoho i kahi ala kūpono ʻole i kēia faila i nā hoʻonohonoho waihona, akā i kēia hihia ʻaʻole pono.

E like me kāu e ʻike ai mai ka hoʻonui ʻana, aia ka faila i kahi hoʻonohonoho i ka ʻano YAML. ʻO nā kikoʻī palapala e hiki ke loaʻa nā kī ma ka pae kiʻekiʻe o ka hoʻonohonoho, a ma kēlā me kēia pae pūnana.

ʻO ka mea mua, e hoʻohui i kahi loulou i ke kiʻi docker i ka faila hoʻonohonoho, kahi e hana ai nā hana. No kēia mea mākou e ʻike ai ʻO ka ʻaoʻao kiʻi .Net Core ma Docker Hub. ka GitHub aia kahi kuhikuhi kikoʻī i ke kiʻi e koho ai no nā hana like ʻole. He kiʻi me ka .Net Core 3.1 kūpono iā mākou e kūkulu, no laila e ʻoluʻolu e hoʻohui i ka laina mua i ka hoʻonohonoho.

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

I kēia manawa, i ka wā e hoʻokuʻu ʻia ai ka pipeline mai ka waihona kiʻi Microsoft, e hoʻoiho ʻia ke kiʻi i ʻōlelo ʻia, kahi e hoʻokō ʻia ai nā hana āpau mai ka hoʻonohonoho.

ʻO ka hana hou e hoʻohui ke kahua's. Ma ka paʻamau, wehewehe ʻo GitLab i nā pae 5:

  • .pre - hana ʻia a hiki i nā pae āpau,
  • .post - hana ʻia ma hope o nā pae āpau,
  • build - mua ma hope .pre kahua,
  • test - ka papa ʻelua,
  • deploy - ke kolu o ka pae.

ʻAʻohe mea e pale aku iā ʻoe mai ka haʻi ʻana aku iā lākou, akā naʻe. ʻO ke kaʻina o ka papa inoa o nā ʻanuʻu e pili ana i ke ʻano o ka hana ʻana. No ka hoʻopiha ʻana, e hoʻohui i ka hoʻonohonoho:

stages:
  - build
  - test
  - deploy

No ka debugging, kūpono ke kiʻi ʻana i ka ʻike e pili ana i ke kaiapuni kahi e hoʻokō ʻia ai nā hana. E hoʻohui i kahi pūʻulu puni honua o nā kauoha e hoʻokō ʻia ma mua o kēlā me kēia hana me before_script:

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

Ke hoʻomau nei e hoʻohui i hoʻokahi hana i ka wā e hoʻouna ʻia ai nā hana, e hoʻomaka ka pipeline. I kēia manawa, e hoʻohui i kahi hana kaʻawale e hōʻike:

dummy job:
  script:
    - echo ok

Hoʻomaka mākou i ka hōʻoia, loaʻa iā mākou kahi leka ua maikaʻi nā mea a pau, hana mākou, paʻi mākou, nānā mākou i nā hopena ma ka pūnaewele ... A loaʻa iā mākou kahi kuhi hewa - bash: .PSVersion: command not found. wtf?

Pono nā mea a pau - ma ka maʻamau, hoʻohana nā mea holo (ke kuleana no ka hoʻokō ʻana i nā palapala hana a hāʻawi ʻia e GitLab) bash e hooko i na kauoha. Hiki iā ʻoe ke hoʻoponopono i kēia ma ka wehewehe kikoʻī ʻana i ka wehewehe hana i nā inoa e pono ai ka mea holo pipeline hoʻokō:

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

Nui! Ke holo nei ka paipu.

ʻO ka mea heluhelu makaʻala, i ka hana hou ʻana i nā ʻanuʻu i hōʻike ʻia, e ʻike ʻo ia ua pau ka hana ma ke kahua test, ʻoiai ʻaʻole mākou i kuhikuhi i ke kahua. E like me kāu e manaʻo ai test ʻo ia ka pae paʻamau.

E hoʻomau kāua i ka hana ʻana i ka iwi hoʻonohonoho ma ka hoʻohui ʻana i nā hana āpau i wehewehe ʻia ma luna.

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

Loaʻa iā mākou kahi paipu kūpono ʻole, akā naʻe.

Hoʻonohonoho i nā mea hoʻomaka

Ma muli o ka ʻike ʻole ʻia o nā kānana trigger no kekahi o nā hana, e hana ka pipeline i piha e hoʻokō ʻia i kēlā me kēia manawa e hoʻolei ʻia kahi commit i ka waihona. No ka mea, ʻaʻole kēia ka hana i makemake nui ʻia, e hoʻonohonoho mākou i nā kānana hoʻomaka no nā hana.

Hiki ke hoʻonohonoho ʻia nā kānana ma nā ʻano ʻelua: wale nō/koe и rula. Pōkole, only/except hiki iā ʻoe ke hoʻonohonoho i nā kānana e nā mea hoʻoiho (merge_request, no ka laʻana - hoʻonohonoho i ka hana e hoʻokō ʻia i kēlā me kēia manawa i hana ʻia kahi noi huki a i kēlā me kēia manawa e hoʻouna ʻia nā hana i ka lālā ʻo ia ke kumu o ka noi hoʻohui) a me nā inoa lālā (me ka hoʻohana ʻana i nā ʻōlelo maʻamau); rules hiki iā ʻoe ke hana i kahi hoʻonohonoho o nā kūlana a, koho, hoʻololi i ke kūlana hoʻokō hana ma muli o ka kūleʻa o nā hana mua (when ma GitLab CI/CD).

E hoʻomanaʻo i kahi hoʻonohonoho o nā koi - hui a hoʻāʻo wale no ka noi hoʻohui, hoʻopili a hoʻouna ʻana iā Azure DevOps - no ka noi hoʻohui a hoʻokuʻu i ka haku, ka hanauna palapala - no ka pana ʻana i ka haku.

ʻO ka mea mua, e hoʻonohonoho kāua i ka hana kūkulu code ma ka hoʻohui ʻana i kahi lula e puhi wale ʻia ma ke noi hoʻohui:

build job:
  # snip
  only:
    - merge_request

I kēia manawa, e hoʻonohonoho kāua i ka hana ʻeke e puhi i ka noi hoʻohui a hoʻohui i nā commits i ka haku:

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

E like me kāu e ʻike ai, maʻalahi a maʻalahi nā mea a pau.

Hiki iā ʻoe ke hoʻonoho i ka hana i ke ahi wale nō inā hana ʻia kahi noi hoʻohui me kahi pahuhopu a i ʻole lālā kumu:

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

Ma lalo o nā kūlana, hiki iā ʻoe ke hoʻohana helu ʻia ma ʻaneʻi; rula rules kulike ole me na rula only/except.

Ke hoʻonohonoho nei i ka mālama ʻana i nā mea hana

I ka wā o kahi hana build job e kūkulu mākou i nā mea hana i hiki ke hoʻohana hou ʻia i nā hana ma hope. No ka hana ʻana i kēia, pono ʻoe e hoʻohui i nā ala i ka hoʻonohonoho hana, nā faila āu e pono ai e mālama a hoʻohana hou i nā hana aʻe, i ke kī. artifacts:

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

Kākoʻo nā ala i nā wildcards, kahi e maʻalahi ai ka hoʻonohonoho ʻana.

Inā hana kahi hana i nā mea kiʻi, a laila hiki i kēlā me kēia hana ma hope ke komo iā lākou - e loaʻa iā lākou ma nā ala like e pili ana i ke kumu waihona i hōʻiliʻili ʻia mai ka hana kumu. Loaʻa nā mea kiʻi no ka hoʻoiho ʻana ma ka pūnaewele.

I kēia manawa ua mākaukau mākou i ka hoʻonohonoho hoʻonohonoho (a hoʻāʻo ʻia), hiki iā mākou ke hoʻomau i ka kākau maoli ʻana i nā palapala no nā hana.

Kākau mākou i nā palapala

Malia paha, i kekahi manawa, ma kahi galaxy mamao, mamao loa, he mea ʻeha ke kūkulu ʻana i nā papahana (me nā mea ma .net) mai ka laina kauoha. I kēia manawa hiki iā ʻoe ke kūkulu, hoʻāʻo a hoʻolaha i ka papahana ma 3 mau hui:

dotnet build
dotnet test
dotnet pack

Ma keʻano maoli, aia kekahi mau nuances e hoʻopili ai mākou i nā kauoha.

  1. Makemake mākou i kahi kūkulu hoʻokuʻu, ʻaʻole kahi kūkulu debug, no laila hoʻohui mākou i kēlā me kēia kauoha -c Release
  2. I ka hoʻāʻo ʻana, makemake mākou e hōʻiliʻili i ka ʻikepili hoʻopili code, no laila pono mākou e hoʻokomo i kahi loiloi uhi i nā hale waihona puke hoʻāʻo:
    1. E hoʻohui i ka pūʻolo i nā hale waihona puke hoʻāʻo a pau coverlet.msbuild: dotnet add package coverlet.msbuild mai ka waihona papahana
    2. Hoʻohui i ke kauoha holo hoʻāʻo /p:CollectCoverage=true
    3. Hoʻohui i kahi kī i ka hoʻonohonoho hana hoʻāʻo no ka loaʻa ʻana o nā hopena uhi (e ʻike i lalo)
  3. Ke hoʻokomo ʻana i ke code i loko o nā pūʻolo nuget, e hoʻonohonoho i ka papa kuhikuhi puka no nā pūʻolo: -o .

E hōʻiliʻili i ka ʻikepili uhi code

Ma hope o ka holo ʻana i nā hoʻokolohua, paʻi ʻo Coverlet i nā helu helu i ka 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% |
+---------+--------+--------+--------+

Hāʻawi ʻo GitLab iā ʻoe e kuhikuhi i kahi ʻōlelo maʻamau e kiʻi i nā ʻikepili, a laila hiki ke loaʻa ma ke ʻano o kahi hōʻailona. Hōʻike ʻia ka ʻōlelo maʻamau i nā hoʻonohonoho hana me ke kī coverage; Pono e loaʻa i ka huaʻōlelo kahi pūʻulu hopu, e hāʻawi ʻia ka waiwai o ia mea i ka hōʻailona:

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

Maʻaneʻi e loaʻa iā mākou nā helu mai kahi laina me ka uhi laina āpau.

Hoʻopuka i nā pūʻolo a me nā palapala

Hoʻonohonoho ʻia nā hana ʻelua no ka pae hope loa o ka pipeline - ʻoiai ua hala ka hui a me nā hoʻāʻo, hiki iā mākou ke kaʻana like i kā mākou hoʻomohala ʻana me ka honua.

ʻO ka mea mua, e noʻonoʻo e hoʻopuka i ke kumu pūʻolo:

  1. Inā ʻaʻohe faila hoʻonohonoho nuget (nuget.config), hana i kahi hou: dotnet new nugetconfig

    He aha ke kumu: ʻAʻole hiki i ke kiʻi ke komo kākau i nā hoʻonohonoho honua (mea hoʻohana a me ka mīkini). I ʻole e hopu i nā hewa, hana mākou i kahi hoʻonohonoho kūloko hou a hana pū me ia.

  2. E hoʻohui i kahi kumu pūʻolo hou i ka hoʻonohonoho kūloko: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - inoa kumu kūloko, ʻaʻole koʻikoʻi
    2. url - URL o ke kumu mai ke kahua "Hoʻomākaukau i nā moʻokāki", p. 6
    3. organization - inoa hui ma Azure DevOps
    4. gitlab variable - ka inoa o ka mea hoʻololi me ka hōʻailona komo i hoʻohui ʻia iā GitLab ("Hoʻomākaukau i nā moʻokāki", p. 11). Ma keʻano maʻamau, ma keʻano $variableName
    5. -StorePasswordInClearText - he hack e kāpae i ka hewa i hōʻole ʻia (ʻAʻole wau ka mea mua e hehi i kēia rake)
    6. Inā he hewa, pono paha e hoʻohui -verbosity detailed
  3. E hoʻouna ana i ka pūʻolo i ke kumu: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Hoʻouna mākou i nā pūʻolo āpau mai ka papa kuhikuhi o kēia manawa, no laila *.nupkg.
    2. name - mai ka ʻanuʻu ma luna.
    3. key - kekahi laina. Ma Azure DevOps, ma ka puka hoʻohui e hānai, ʻo ka laʻana ka laina mau az.
    4. -skipduplicate - ke hoʻāʻo nei e hoʻouna i kahi pūʻolo i loaʻa ʻole me kēia kī, e hoʻihoʻi ke kumu i kahi hewa 409 Conflict; me ke kī, e hoʻokuʻu ʻia ka hoʻouna ʻana.

I kēia manawa e hoʻonohonoho i ka hana ʻana i nā palapala:

  1. ʻO ka mea mua, ma ka waihona, ma ka lālā kumu, hoʻomaka mākou i ka papahana docfx. No ka hana ʻana i kēia, e holo i ke kauoha mai ke kumu docfx init a hoʻonohonoho pono i nā ʻāpana koʻikoʻi no ka palapala kūkulu hale. ʻO ka wehewehe kikoʻī o ka hoʻonohonoho papahana haʻahaʻa maanei.
    1. I ka hoʻonohonoho ʻana, he mea nui e kuhikuhi i ka papa kuhikuhi puka ..public - Lawe ʻo GitLab i nā ʻike o ka waihona lehulehu ma ke kumu o ka waihona i kumu no nā ʻaoʻao. No ka mea Aia ka papahana i loko o kahi waihona i hoʻopaʻa ʻia i loko o ka waihona - hoʻohui i kahi huahana i ka pae i luna o ke ala.
  2. E hoʻohuli i nā hoʻololi iā GitLab.
  3. Hoʻohui i kahi hana i ka hoʻonohonoho pipeline pages (huaʻōlelo i mālama ʻia no nā hana hoʻopuka pūnaewele ma GitLab Pages):
    1. Palapala:
      1. nuget install docfx.console -version 2.51.0 - hoʻokomo i ka docfx; ua kuhikuhi ʻia ka mana e hōʻoia i ka pololei o nā ala hoʻokomo pūʻolo.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ohi palapala
    2. Node artifact:

pages:
  # snip
  artifacts:
    paths:
      - public

ʻO nā mele mele e pili ana iā docfx

Ma mua, i ka hoʻonohonoho ʻana i kahi papahana, ua kuhikuhi wau i ke kumu code no ka palapala ma ke ʻano he faila hoʻonā. ʻO ka hemahema nui, ua hana ʻia nā palapala no nā papahana hoʻāʻo. Inā ʻaʻole pono kēia, hiki iā ʻoe ke hoʻonohonoho i kēia waiwai i ka node metadata.src:

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

  1. metadata.src.src: "../" - piʻi mākou i hoʻokahi pae e pili ana i kahi docfx.json, no ka mea i nā mamana, ʻaʻole pono ka huli ʻana i ka lāʻau papa kuhikuhi.
  2. metadata.src.files: ["**/*.csproj"] - he kumu honua, ʻohi mākou i nā papahana C # mai nā papa kuhikuhi āpau.
  3. metadata.src.exclude: ["*.tests*/**"] - ka hoʻohālike honua, hoʻokaʻawale i nā mea āpau mai nā waihona me .tests I ke poʻo inoa

Papahele

Hiki ke hana ʻia kēlā ʻano hoʻonohonoho maʻalahi i loko o ka hapalua hola a me ʻelua mau kīʻaha kofe, e ʻae iā ʻoe e nānā i ke kūkulu ʻia ʻana o ke code a hala nā hoʻokolohua, kūkulu i kahi pōʻai hou, hoʻonui i ka palapala a e ʻoluʻolu i ka maka me ka nani. nā hōʻailona ma ka README o ka papahana me kēlā me kēia noi hoʻohui a hoʻouna i ka haku.

.gitlab-ci.yml hope loa

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

E kamaʻilio ana i nā hōʻailona

Ma muli o lākou, ua hoʻomaka nā mea a pau!

Loaʻa nā hōʻailona me nā kūlana pipeline a me ka uhi code ma GitLab ma nā hoʻonohonoho CI/CD ma ka poloka Gtntral pipelines:

He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

Ua hana au i kahi hōʻailona me kahi loulou i ka palapala ma ka paepae pale.io - ua maʻalahi nā mea a pau ma laila, hiki iā ʻoe ke hana i kāu hōʻailona ponoʻī a loaʻa iā ia me kahi noi.

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

He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

ʻAe ʻo Azure DevOps Artifacts iā ʻoe e hana i nā hōʻailona no nā pūʻolo me ka mana hou loa. No ka hana ʻana i kēia, ma ke kumu ma ka pūnaewele Azure DevOps, pono ʻoe e kaomi i ka hana ʻana i ka hōʻailona no ka pōʻai i koho ʻia a kope i ka markdown markup:

He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

He alakaʻi iā CI/CD ma GitLab no ka mea hoʻomaka (kokoke).

Hoʻohui i ka nani

Hoʻokalaka i nā ʻāpana hoʻonohonoho maʻamau

ʻOiai e kākau ana i ka hoʻonohonoho ʻana a me ka ʻimi ʻana i ka palapala, ʻike wau i kahi hiʻohiʻona hoihoi o YAML - hoʻohana hou i nā ʻāpana.

E like me kāu e ʻike ai mai nā hoʻonohonoho hana, pono lākou āpau i ka tag windows i ka mea kukini, a hoʻomaka ʻia ke hoʻouna ʻia kahi noi hoʻohui i ka haku / hana ʻia (koe wale nā ​​palapala). E hoʻohui i kēia i ka ʻāpana a mākou e hoʻohana hou ai:

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

A i kēia manawa hiki iā mākou ke hoʻokomo i ka ʻāpana i haʻi mua ʻia i ka wehewehe hana:

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

Pono e hoʻomaka nā inoa ʻāpana me kahi kiko, i ʻole e unuhi ʻia he hana.

Hoʻololi pūʻolo

I ka hana ʻana i kahi pūʻolo, nānā ka mea hoʻopili i nā hoʻololi o ka laina kauoha, a i ko lākou haʻalele ʻana, nā faila papahana; ke loaʻa iā ia kahi node Version, lawe ʻo ia i kona waiwai e like me ke ʻano o ka pūʻolo i kūkulu ʻia. ʻIke ʻia i mea e kūkulu ai i kahi pōʻai me kahi mana hou, pono ʻoe e hōʻano hou iā ia i ka faila papahana a i ʻole e hāʻawi iā ia ma ke ʻano he hoʻopaʻapaʻa laina kauoha.

E hoʻohui hou i hoʻokahi papa inoa makemake - e ʻae i nā helu liʻiliʻi ʻelua o ka mana i ka makahiki a kūkulu i ka lā o ka pūʻolo, a hoʻohui i nā mana prerelease. ʻOiaʻiʻo, hiki iā ʻoe ke hoʻohui i kēia ʻikepili i ka faila papahana a nānā ma mua o kēlā me kēia hoʻouna - akā hiki iā ʻoe ke hana i loko o ka pipeline, e hōʻiliʻili i ka mana o ka pōʻai mai ka pōʻaiapili a hāʻawi iā ia ma o ka hoʻopaʻapaʻa laina kauoha.

E ʻae kākou inā loaʻa i ka memo commit kahi laina like release (v./ver./version) <version number> (rev./revision <revision>)?, a laila e lawe mākou i ka mana o ka pōʻai mai kēia laina, hoʻohui iā ia me ka lā o kēia manawa a hāʻawi iā ia i mea hoʻopaʻapaʻa i ke kauoha dotnet pack. I ka nele o kahi laina, ʻaʻole mākou e hōʻiliʻili i ka pōʻai.

Hoʻoponopono kēia ʻatikala i kēia pilikia:

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

Hoʻohui i kahi palapala i kahi hana pack and deploy job a e nānā pono i ka hui ʻana o nā pūʻolo ma ke alo o kahi kaula i hāʻawi ʻia i ka memo commit.

Hōʻuluʻulu

Ma hope o ka hoʻolilo ʻana ma kahi o ka hapalua hola a i ʻole hoʻokahi hola e kākau ai i ka hoʻonohonoho ʻana, ka hoʻopololei ʻana i ka powershell kūloko a, malia paha, ʻelua mau hoʻokuʻu kūleʻa ʻole, ua loaʻa iā mākou kahi hoʻonohonoho maʻalahi no ka hana ʻana i nā hana maʻamau.

ʻOiaʻiʻo, ʻoi aku ka nui o GitLab CI / CD ma mua o ka heluhelu ʻana i kēia alakaʻi - ʻaʻole ʻoiaʻiʻo kēlā. Ma laila nō ʻO Auto DevOpsʻae ʻana

ʻike ʻakomi, kūkulu, hoʻāʻo, kau, a nānā i kāu mau noi

I kēia manawa, e hoʻonohonoho nā hoʻolālā i kahi pipeline no ka hoʻoili ʻana i nā noi iā Azure, me ka hoʻohana ʻana iā Pulumi a me ka hoʻoholo ʻana i ke kaiapuni i manaʻo ʻia, e uhi ʻia i ka ʻatikala aʻe.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka