(පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

එසේත් නැතිනම් පහසු කේතීකරණයකින් එක සැන්දෑවක ඔබේ ව්‍යාපෘතිය සඳහා අලංකාර ලාංඡන ලබා ගන්නේ කෙසේද

සමහර විට, අවම වශයෙන් එක් සුරතල් ව්‍යාපෘතියක් ඇති සෑම සංවර්ධකයෙකුටම යම් අවස්ථාවක දී තත්ත්‍වයන්, කේත ආවරණය, පැකේජ අනුවාද සහිත නූගට් සහිත ලස්සන ලාංඡන ගැන කැසීමක් ඇත ... තවද මෙම කැසීම මෙම ලිපිය ලිවීමට මා යොමු කළේය. එය ලිවීමට සූදානම් වීමේදී, මගේ එක් ව්‍යාපෘතියකින් මට මෙම අලංකාරය ලැබුණි:

(පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

මෙම ලිපිය GitLab හි .Net Core පන්ති පුස්තකාල ව්‍යාපෘතියක් සඳහා අඛණ්ඩ ඒකාබද්ධ කිරීම සහ බෙදා හැරීම, GitLab පිටු වෙත ලේඛන ප්‍රකාශනය කිරීම සහ Azure DevOps හි පුද්ගලික සංග්‍රහයකට සාදන ලද පැකේජ තල්ලු කිරීම පිළිබඳ මූලික සැකසුම හරහා ඔබව ගෙන යනු ඇත.

VS කේතය දිගුව සමඟ සංවර්ධන පරිසරය ලෙස භාවිතා කරන ලදී GitLab කාර්ය ප්රවාහය (සංවර්ධන පරිසරයෙන් සෘජුවම සිටුවම් ගොනුව වලංගු කිරීම සඳහා).

කෙටි හැඳින්වීම

CD - එය ඔබ තල්ලු කළ විට සහ සෑම දෙයක්ම දැනටමත් සේවාදායකයා මත වැටී තිබේද?

CI / CD යනු කුමක්ද සහ ඔබට එය අවශ්‍ය වන්නේ ඇයි - ඔබට එය පහසුවෙන් ගූගල් කළ හැකිය. GitLab හි නල මාර්ග වින්‍යාස කිරීම පිළිබඳ සම්පූර්ණ ලියකියවිලි සොයන්න ද පහසු ය. මෙන්න මම කෙටියෙන් සහ, හැකි නම්, අඩුපාඩු නොමැතිව, කුරුල්ලන්ගේ ඇසින් පද්ධතියේ ක්රියාවලිය විස්තර කරමි:

  • සංවර්ධකයා ගබඩාවට කැපවීමක් යවයි, වෙබ් අඩවිය හරහා ඒකාබද්ධ කිරීමේ ඉල්ලීමක් නිර්මාණය කරයි, හෝ වෙනත් ආකාරයකින්, පැහැදිලිව හෝ ව්යංගයෙන් නල මාර්ගය ආරම්භ කරයි,
  • සියලුම කාර්යයන් වින්‍යාසයෙන් තෝරා ගනු ලැබේ, ලබා දී ඇති සන්දර්භය තුළ ඒවා දියත් කිරීමට ඉඩ සලසන කොන්දේසි,
  • කාර්යයන් ඔවුන්ගේ අදියර අනුව සංවිධානය කර ඇත,
  • අදියර ක්‍රියාත්මක වේ - i.e. සමාන්තරයි මෙම අදියරේ සියලුම කාර්යයන් සම්පූර්ණ කර ඇත,
  • අදියර අසාර්ථක වුවහොත් (එනම්, අවම වශයෙන් අදියරෙහි එක් කාර්යයක් අසාර්ථක වුවහොත්), නල මාර්ගය නතර වේ (සෑම විටම පාහේ),
  • සියලුම අදියර සාර්ථකව නිම කර ඇත්නම්, නල මාර්ගය සාර්ථක ලෙස සලකනු ලැබේ.

මේ අනුව, අපට ඇත්තේ:

  • නල මාර්ගය - ඔබට ගොඩ නැගීම, පරීක්ෂා කිරීම, පැකේජ කේතය, වලාකුළු සේවාවක් සඳහා නිමි ගොඩනැගීමක් යෙදවීම යනාදිය හැකි අදියරවලට සංවිධානය කර ඇති කාර්යයන් සමූහයකි.
  • අදියර (අදියර) - නල මාර්ග සංවිධාන ඒකකය, 1+ කාර්ය අඩංගු,
  • කාර්ය (රැකියා) යනු නල මාර්ගයේ වැඩ කරන ඒකකයකි. එය ස්ක්‍රිප්ට් (අනිවාර්‍ය), දියත් කිරීමේ කොන්දේසි, කෞතුක වස්තු ප්‍රකාශනය/හැඹිලිගත කිරීම සඳහා සැකසුම් සහ තවත් බොහෝ දේවලින් සමන්විත වේ.

ඒ අනුව, CI / CD පිහිටුවීමේදී කාර්යය වන්නේ කේතය සහ පුරාවස්තු ගොඩනැගීම, පරීක්ෂා කිරීම සහ ප්‍රකාශයට පත් කිරීම සඳහා අවශ්‍ය සියලුම ක්‍රියා ක්‍රියාත්මක කරන කාර්යයන් සමූහයක් නිර්මාණය කිරීමයි.

ආරම්භ කිරීමට පෙර: ඇයි?

  • ඇයි Gitlab?

මොකද pet projects වලට private repositories හදන්න අවශ්‍ය උනාම GitHub එකෙන් සල්ලි දීලා මම ගිජු වුනා. ගබඩා නිදහස් වී ඇත, නමුත් මෙතෙක් මට GitHub වෙත යාමට මෙය ප්‍රමාණවත් හේතුවක් නොවේ.

  • Azure DevOps නල මාර්ග නොවන්නේ ඇයි?

එහි සැකසුම මූලික වන නිසා - විධාන රේඛාව පිළිබඳ දැනුම පවා අවශ්ය නොවේ. බාහිර git සපයන්නන් සමඟ ඒකාබද්ධ වීම - ක්ලික් කිරීම් කිහිපයකින්, ගබඩාවට කැපවීම් යැවීමට SSH යතුරු ආයාත කිරීම - ද, නල මාර්ගය සැකිල්ලකින් නොව පහසුවෙන් වින්‍යාසගත වේ.

ආරම්භක ස්ථානය: ඔබ සතුව ඇති දේ සහ ඔබට අවශ්ය දේ

අපට ඇත්තේ:

  • GitLab හි ගබඩාව.

අපට අවශ්යයි:

  • එක් එක් ඒකාබද්ධ කිරීමේ ඉල්ලීම සඳහා ස්වයංක්‍රීය එකලස් කිරීම සහ පරීක්ෂා කිරීම,
  • එක් එක් ඒකාබද්ධ කිරීමේ ඉල්ලීම සඳහා පැකේජ ගොඩනඟා ප්‍රධානියා වෙත තල්ලු කිරීම, කැපවීමේ පණිවිඩයේ නිශ්චිත රේඛාවක් තිබේ නම්,
  • Azure DevOps හි පුද්ගලික සංග්‍රහයකට සාදන ලද පැකේජ යැවීම,
  • GitLab පිටු වල ලේඛන එකලස් කිරීම සහ ප්‍රකාශනය,
  • ලාංඡන!11

විස්තර කර ඇති අවශ්‍යතා ඓන්ද්‍රීයව පහත නල මාර්ග ආකෘතියට වැටේ:

  • අදියර 1 - එකලස් කිරීම
    • අපි කේතය එකතු කර, ප්‍රතිදාන ගොනු කෞතුක වස්තු ලෙස ප්‍රකාශයට පත් කරන්නෙමු
  • අදියර 2 - පරීක්ෂණය
    • අපි ගොඩනැගීමේ අදියරෙන් කෞතුක වස්තු ලබා ගනිමු, පරීක්ෂණ ධාවනය කරන්න, කේත ආවරණ දත්ත රැස් කරන්න
  • අදියර 3 - ඉදිරිපත් කරන්න
    • කාර්යය 1 - nuget පැකේජය සාදා එය Azure DevOps වෙත යවන්න
    • කාර්යය 2 - අපි වෙබ් අඩවිය xmldoc වෙතින් මූලාශ්‍ර කේතයෙන් එකතු කර GitLab පිටු තුළ ප්‍රකාශ කරන්නෙමු.

ආරම්භ කරමු!

වින්යාසය එකතු කිරීම

ගිණුම් සකස් කිරීම

  1. තුළ ගිණුමක් සාදන්න මයික්රොසර් ඇස්ජර්

  2. යන්න Azure DevOps

  3. අපි නව ව්යාපෘතියක් නිර්මාණය කරමු

    1. නම - ඕනෑම
    2. දෘශ්යතාව - ඕනෑම
      (පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

  4. ඔබ Create බොත්තම මත ක්ලික් කළ විට, ව්‍යාපෘතිය නිර්මාණය වී ඔබව එහි පිටුවට හරවා යවනු ලැබේ. මෙම පිටුවෙහි, ඔබට ව්‍යාපෘති සැකසීම් වෙත යාමෙන් අනවශ්‍ය විශේෂාංග අක්‍රිය කළ හැක (වමේ ඇති ලැයිස්තුවේ පහළ සබැඳිය -> දළ විශ්ලේෂණය -> Azure DevOps Services block)
    (පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

  5. Atrifacts වෙත ගොස්, Create feed ක්ලික් කරන්න

    1. මූලාශ්‍රයේ නම ඇතුළත් කරන්න
    2. දෘශ්‍යතාව තෝරන්න
    3. පරීක්ෂා නොකරන්න පොදු පොදු මූලාශ්‍රවලින් පැකේජ ඇතුළත් කරන්න, මූලාශ්‍රය ඩම්ප් nuget ක්ලෝනයක් බවට පත් නොවන පරිදි
      (පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

  6. පෝෂණය කිරීමට සම්බන්ධ කරන්න ක්ලික් කරන්න, Visual Studio තෝරන්න, Machine Setup block වෙතින් මූලාශ්‍රය පිටපත් කරන්න
    (පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

  7. ගිණුම් සැකසීම් වෙත යන්න, පුද්ගලික ප්‍රවේශ ටෝකනය තෝරන්න
    (පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

  8. නව ප්‍රවේශ ටෝකනයක් සාදන්න

    1. නම - හිතුවක්කාර
    2. සංවිධානය - වත්මන්
    3. උපරිම වසර 1ක් සඳහා වලංගු වේ
    4. විෂය පථය - ඇසුරුම් කිරීම/කියවීම සහ ලිවීම
      (පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

  9. සාදන ලද ටෝකනය පිටපත් කරන්න - මාදිලි කවුළුව වසා දැමීමෙන් පසු, අගය ලබා ගත නොහැක

  10. GitLab හි ගබඩා සැකසුම් වෙත යන්න, CI / CD සැකසුම් තෝරන්න
    (පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

  11. Variables block එක Expand කරන්න, අලුත් එකක් add කරන්න

    1. නම - හිස්තැන් නොමැතිව ඕනෑම එකක් (විධාන කවචයේ ඇත)
    2. අගය - 9 ඡේදයෙන් ප්‍රවේශ ටෝකනය
    3. Mask විචල්‍යය තෝරන්න
      (පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

මෙය පූර්ව වින්‍යාසය සම්පූර්ණ කරයි.

වින්යාස රාමුව සකස් කිරීම

පෙරනිමියෙන්, GitLab හි CI/CD වින්‍යාසය ගොනුව භාවිතා කරයි .gitlab-ci.yml ගබඩාවේ මූලයෙන්. ගබඩා සැකසුම් තුළ ඔබට මෙම ගොනුවට අත්තනෝමතික මාර්ගයක් සැකසිය හැක, නමුත් මෙම අවස්ථාවේදී එය අවශ්ය නොවේ.

දිගුවෙන් ඔබට පෙනෙන පරිදි, ගොනුවේ ආකෘතියේ වින්‍යාසයක් අඩංගු වේ YAML. වින්‍යාසයේ ඉහළ මට්ටමේ සහ එක් එක් කැදලි මට්ටම් වල අඩංගු විය හැකි යතුරු ලේඛන විස්තර කරයි.

පළමුව, වින්‍යාස ගොනුවේ ඇති ඩොකර් රූපයට සබැඳියක් එක් කරමු, එහි කාර්යයන් සිදු කෙරේ. මේ සඳහා අපි සොයා ගනිමු Docker Hub හි .Net Core පින්තූර පිටුව. මෙම GitHub විවිධ කාර්යයන් සඳහා තෝරා ගත යුතු රූපය පිළිබඳ සවිස්තරාත්මක මාර්ගෝපදේශයක් තිබේ. .Net Core 3.1 සහිත රූපයක් අපට ගොඩනැගීමට සුදුසුය, එබැවින් වින්‍යාසයට පළමු පේළිය එක් කිරීමට නිදහස් වන්න

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

දැන්, මයික්‍රොසොෆ්ට් රූප ගබඩාවෙන් නල මාර්ගය දියත් කරන විට, නිශ්චිත රූපය බාගත කරනු ඇත, එහිදී වින්‍යාසයෙන් සියලුම කාර්යයන් ක්‍රියාත්මක වේ.

ඊළඟ පියවර වන්නේ එකතු කිරීමයි අදියරගේ. පෙරනිමියෙන්, GitLab අදියර 5 ක් නිර්වචනය කරයි:

  • .pre - සියලුම අදියර දක්වා සිදු කරනු ලැබේ,
  • .post - සියලුම අදියර වලින් පසුව සිදු කරනු ලැබේ,
  • build - මුලින්ම පසුව .pre අදියර,
  • test - දෙවන අදියර,
  • deploy - තුන්වන අදියර.

කෙසේ වෙතත්, ඒවා පැහැදිලිව ප්‍රකාශ කිරීමෙන් කිසිවක් ඔබව වළක්වන්නේ නැත. පියවර ලැයිස්තුගත කර ඇති අනුපිළිවෙල ඒවා සම්පූර්ණ කරන ලද අනුපිළිවෙලට බලපායි. සම්පූර්ණත්වය සඳහා, අපි වින්‍යාසයට එකතු කරමු:

stages:
  - build
  - test
  - deploy

නිදොස්කරණය සඳහා, කාර්යයන් ක්රියාත්මක කරන පරිසරය පිළිබඳ තොරතුරු ලබා ගැනීම අර්ථවත් කරයි. එක් එක් කාර්යයට පෙර ක්‍රියාත්මක කෙරෙන ගෝලීය විධාන කට්ටලයක් එකතු කරමු before_script:

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

අවම වශයෙන් එක් කාර්යයක් එකතු කිරීමට ඉතිරිව ඇති අතර එමඟින් කැපවීම් යවන විට නල මාර්ගය ආරම්භ වේ. දැනට, නිරූපණය කිරීමට හිස් කාර්යයක් එකතු කරමු:

dummy job:
  script:
    - echo ok

අපි වලංගු කිරීම ආරම්භ කරමු, සියල්ල හොඳින් ඇති බවට පණිවිඩයක් අපට ලැබේ, අපි කැප වෙමු, අපි තල්ලු කරමු, අපි වෙබ් අඩවියේ ප්‍රතිඵල දෙස බලමු ... තවද අපට ස්ක්‍රිප්ට් දෝෂයක් ලැබේ - bash: .PSVersion: command not found. wtf?

සෑම දෙයක්ම තාර්කිකයි - පෙරනිමියෙන්, ධාවකයන් (කාර්ය ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම සඳහා වගකිව යුතු සහ GitLab විසින් සපයනු ලැබේ) භාවිතා කරයි bash විධාන ක්‍රියාත්මක කිරීමට. ක්‍රියාත්මක කරන නල මාර්ග ධාවකයට තිබිය යුතු ටැග් මොනවාදැයි කාර්ය විස්තරයේ පැහැදිලිව සඳහන් කිරීමෙන් ඔබට මෙය නිවැරදි කළ හැකිය:

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

මහා! නල මාර්ගය දැන් ක්රියාත්මක වේ.

අවධානයෙන් සිටින පාඨකයෙකු, දක්වා ඇති පියවර නැවත නැවත කිරීමෙන් පසු, කාර්යය අදියරේදී අවසන් කර ඇති බව දකිනු ඇත test, අපි වේදිකාව සඳහන් නොකළත්. ඔබ අනුමාන කළ හැකි පරිදි test පෙරනිමි පියවර වේ.

ඉහත විස්තර කර ඇති සියලුම කාර්යයන් එකතු කිරීමෙන් වින්‍යාස ඇටසැකිල්ල නිර්මාණය කිරීම දිගටම කරගෙන යමු:

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

අපට විශේෂයෙන් ක්‍රියාකාරී නොවන නමුත් නිවැරදි නල මාර්ගයක් ලැබුණි.

ප්‍රේරක පිහිටුවීම

කිසිදු කාර්යයක් සඳහා ප්‍රේරක පෙරහන් නිශ්චිතව දක්වා නොමැති නිසා, නල මාර්ගය එසේ වනු ඇත සම්පූර්ණයෙන්ම කැපවීමක් ගබඩාවට තල්ලු කරන සෑම අවස්ථාවකම ක්‍රියාත්මක වේ. මෙය සාමාන්‍යයෙන් අපේක්ෂිත හැසිරීම නොවන බැවින්, අපි කාර්යයන් සඳහා ප්‍රේරක පෙරහන් සකසන්නෙමු.

පෙරහන් ආකෘති දෙකකින් වින්‍යාසගත කළ හැක: පමණක් / හැර и නීති. කෙටියෙන්, only/except ප්‍රේරක මගින් පෙරහන් වින්‍යාස කිරීමට ඔබට ඉඩ සලසයි (merge_request, උදාහරණයක් ලෙස - ඇදීමේ ඉල්ලීමක් සාදන සෑම අවස්ථාවකම ක්‍රියාත්මක කළ යුතු කාර්යය සකසයි සහ ඒකාබද්ධ ඉල්ලීමේ මූලාශ්‍රය වන ශාඛාවට යවන සෑම අවස්ථාවකදීම සහ ශාඛා නාම (සාමාන්‍ය ප්‍රකාශන භාවිතා කිරීම ඇතුළුව); rules ඔබට කොන්දේසි මාලාවක් අභිරුචිකරණය කිරීමට සහ, විකල්පයක් ලෙස, පෙර කාර්යයන් වල සාර්ථකත්වය මත පදනම්ව කාර්යය ක්රියාත්මක කිරීමේ තත්ත්වය වෙනස් කිරීමට ඉඩ සලසයි (when GitLab CI/CD හි).

අවශ්‍යතා මාලාවක් - එකලස් කිරීම සහ පරීක්ෂා කිරීම ඒකාබද්ධ කිරීමේ ඉල්ලීම සඳහා පමණක්, ඇසුරුම් කිරීම සහ Azure DevOps වෙත යැවීම - ඒකාබද්ධ ඉල්ලීම සහ මාස්ටර් වෙත තල්ලු කිරීම, ප්‍රලේඛන උත්පාදනය - මාස්ටර් වෙත තල්ලු කිරීම සඳහා අපි මතක් කරමු.

පළමුව, ඒකාබද්ධ කිරීමේ ඉල්ලීම මත පමණක් ක්‍රියාත්මක වන රීතියක් එක් කිරීමෙන් කේත ගොඩනැගීමේ කාර්යය සකසමු:

build job:
  # snip
  only:
    - merge_request

දැන් අපි ඒකාබද්ධ කිරීමේ ඉල්ලීමට වෙඩි තැබීමට සහ මාස්ටර් වෙත කැපවීම් එකතු කිරීමට ඇසුරුම් කාර්යය සකස් කරමු:

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

ඔබට පෙනෙන පරිදි, සෑම දෙයක්ම සරල හා සරල ය.

ඔබට කාර්යය වෙඩි තැබීමට සැකසිය හැක්කේ නිශ්චිත ඉලක්කයක් හෝ මූලාශ්‍ර ශාඛාවක් සමඟ ඒකාබද්ධ කිරීමේ ඉල්ලීමක් සාදනු ලැබුවහොත් පමණි:

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

කොන්දේසි යටතේ, ඔබට භාවිතා කළ හැකිය මෙහි ලැයිස්තුගත කර ඇති විචල්‍යයන්; නීති rules නීති සමග නොගැලපේ only/except.

කෞතුක භාණ්ඩ සුරැකීම වින්‍යාස කිරීම

කාර්යයක් අතරතුර build job අපි පසුකාලීන කාර්යයන් සඳහා නැවත භාවිතා කළ හැකි පුරාවස්තු ගොඩනඟමු. මෙය සිදු කිරීම සඳහා, ඔබට කාර්ය වින්‍යාසයට මාර්ග, ඔබට පහත කාර්යයන් සුරැකීමට සහ නැවත භාවිතා කිරීමට අවශ්‍ය ලිපිගොනු යතුරට එක් කළ යුතුය. artifacts:

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

මාර්ග Wildcards සඳහා සහය දක්වයි, එය අනිවාර්යයෙන්ම ඒවා සැකසීමට පහසු කරයි.

කාර්යයක් කෞතුක වස්තු නිර්මාණය කරන්නේ නම්, එක් එක් ඊළඟ කාර්යයට ඒවාට ප්‍රවේශ වීමට හැකි වනු ඇත - ඒවා මුල් කාර්යයෙන් එකතු කරන ලද ගබඩා මූලයට සාපේක්ෂව එකම මාර්ග ඔස්සේ පිහිටා ඇත. කෞතුක වස්තු ද වෙබ් අඩවියෙන් බාගත හැකිය.

දැන් අපට වින්‍යාස රාමුවක් සූදානම් (සහ පරීක්‍ෂා කර ඇත) ඇති බැවින්, අපට කාර්යයන් සඳහා ස්ක්‍රිප්ට් ලිවීමට යා හැකිය.

අපි ස්ක්‍රිප්ට් ලියනවා

සමහර විට, වරක්, ඈත, ඈත මන්දාකිණියක, විධාන රේඛාවේ සිට ව්යාපෘති (.net මත ඇති ඒවා ඇතුළුව) ගොඩනැගීම වේදනාවක් විය. දැන් ඔබට කණ්ඩායම් 3ක් තුළ ව්‍යාපෘතිය තැනීමට, පරීක්ෂා කිරීමට සහ ප්‍රකාශ කිරීමට හැකිය:

dotnet build
dotnet test
dotnet pack

ස්වාභාවිකවම, සමහර සූක්ෂ්මතා ඇති නිසා අපි විධාන තරමක් සංකීර්ණ කරමු.

  1. අපට අවශ්‍ය වන්නේ නිදොස් ගොඩනැගීමක් නොව නිකුතු ගොඩනැගීමකි, එබැවින් අපි එක් එක් විධානයට එකතු කරමු -c Release
  2. පරීක්ෂා කරන විට, අපට කේත ආවරණ දත්ත රැස් කිරීමට අවශ්‍ය වේ, එබැවින් අපට පරීක්ෂණ පුස්තකාලවල ආවරණ විශ්ලේෂකයක් ඇතුළත් කිරීමට අවශ්‍ය වේ:
    1. සියලුම පරීක්ෂණ පුස්තකාල වෙත පැකේජය එක් කරන්න coverlet.msbuild: dotnet add package coverlet.msbuild ව්‍යාපෘති ෆෝල්ඩරයෙන්
    2. ටෙස්ට් ධාවන විධානයට එක් කරන්න /p:CollectCoverage=true
    3. ආවරණ ප්‍රතිඵල ලබා ගැනීමට පරීක්ෂණ කාර්ය වින්‍යාසයට යතුරක් එක් කරන්න (පහත බලන්න)
  3. කේතය nuget පැකේජවලට ඇසුරුම් කරන විට, පැකේජ සඳහා ප්‍රතිදාන නාමාවලිය සකසන්න: -o .

කේත ආවරණ දත්ත රැස් කිරීම

පරීක්ෂණ ක්‍රියාත්මක කිරීමෙන් පසු, Coverlet මුද්‍රණ කොන්සෝලය වෙත සංඛ්‍යාලේඛන ධාවනය කරයි:

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 ඔබට සංඛ්‍යාලේඛන ලබා ගැනීම සඳහා නිත්‍ය ප්‍රකාශනයක් නියම කිරීමට ඉඩ සලසයි, පසුව එය ලාංඡනයක ආකාරයෙන් ලබා ගත හැක. නිත්‍ය ප්‍රකාශනය යතුර සමඟ කාර්ය සැකසුම් තුළ නියම කර ඇත coverage; ප්‍රකාශනයේ ග්‍රහණ කණ්ඩායමක් අඩංගු විය යුතු අතර, එහි අගය ලාංඡනය වෙත යවනු ලැබේ:

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

මෙහිදී අපි සම්පූර්ණ රේඛා ආවරණය සහිත රේඛාවකින් සංඛ්‍යාලේඛන ලබා ගනිමු.

පැකේජ සහ ලියකියවිලි ප්‍රකාශයට පත් කරන්න

ක්‍රියා දෙකම නල මාර්ගයේ අවසාන අදියර සඳහා සැලසුම් කර ඇත - එකලස් කිරීම සහ පරීක්ෂණ සමත් වී ඇති බැවින්, අපට අපගේ වර්ධනයන් ලෝකය සමඟ බෙදා ගත හැකිය.

පළමුව, පැකේජ මූලාශ්‍රය වෙත ප්‍රකාශනය කිරීම සලකා බලන්න:

  1. ව්‍යාපෘතියට nuget වින්‍යාස ගොනුවක් නොමැති නම් (nuget.config), නව එකක් සාදන්න: dotnet new nugetconfig

    කුමක් සඳහා ද: රූපයට ගෝලීය (පරිශීලක සහ යන්ත්‍ර) වින්‍යාසයන්ට ලිවීමේ ප්‍රවේශය නොතිබිය හැකිය. දෝෂ අල්ලා නොගැනීම සඳහා, අපි නව දේශීය වින්‍යාසයක් නිර්මාණය කර එය සමඟ වැඩ කරන්නෙමු.

  2. දේශීය වින්‍යාසයට නව පැකේජ මූලාශ්‍රයක් එක් කරමු: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - දේශීය මූලාශ්‍ර නම, විවේචනාත්මක නොවේ
    2. url - "ගිණුම් සකස් කිරීම" අදියරෙන් මූලාශ්‍රයේ URL, පි. 6
    3. organization - Azure DevOps හි සංවිධානයේ නම
    4. gitlab variable - GitLab වෙත එකතු කරන ලද ප්‍රවේශ ටෝකනය සහිත විචල්‍යයේ නම ("ගිණුම් සකස් කිරීම", p. 11). ස්වාභාවිකවම, ආකෘතියෙන් $variableName
    5. -StorePasswordInClearText - ප්‍රවේශය ප්‍රතික්ෂේප කරන ලද දෝෂය මඟ හැරීමට හැක් කිරීම (මේ පෝරුවට පා තැබූ පළමු පුද්ගලයා මම නොවේ)
    6. දෝෂ ඇති විට, එය එකතු කිරීම ප්රයෝජනවත් විය හැකිය -verbosity detailed
  3. මූලාශ්රය වෙත පැකේජය යැවීම: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. අපි දැනට පවතින නාමාවලියෙන් සියලුම පැකේජ යවන්නෙමු *.nupkg.
    2. name - ඉහත පියවරෙන්.
    3. key - ඕනෑම රේඛාවක්. Azure DevOps හි, Connect to feed කවුළුවෙහි, උදාහරණය සෑම විටම රේඛාව වේ az.
    4. -skipduplicate - මෙම යතුර නොමැතිව දැනටමත් පවතින පැකේජයක් යැවීමට උත්සාහ කරන විට, මූලාශ්‍රය දෝෂයක් ලබා දෙනු ඇත 409 Conflict; යතුර සමඟ, යැවීම මඟ හරිනු ඇත.

දැන් අපි ලේඛන නිර්මාණය සකස් කරමු:

  1. පළමුව, නිධිය තුළ, ප්රධාන ශාඛාව තුළ, අපි docfx ව්යාපෘතිය ආරම්භ කරමු. මෙය සිදු කිරීම සඳහා, root වෙතින් විධානය ක්රියාත්මක කරන්න docfx init සහ ගොඩනැගිලි ලේඛන සඳහා ප්‍රධාන පරාමිතීන් අන්තර්ක්‍රියාකාරීව සකසන්න. අවම ව්යාපෘති සැකසුම පිළිබඳ සවිස්තර විස්තරය මෙහි.
    1. වින්‍යාස කිරීමේදී, ප්‍රතිදාන නාමාවලිය සඳහන් කිරීම වැදගත් වේ ..public - GitLab පෙරනිමියෙන් පිටු සඳහා මූලාශ්‍රයක් ලෙස ගබඩාවේ මූලයේ ඇති පොදු ෆෝල්ඩරයේ අන්තර්ගතය ගනී. නිසා මෙම ව්‍යාපෘතිය ගබඩාවේ තැන්පත් කර ඇති ෆෝල්ඩරයක පිහිටා ඇත - මාර්ගයේ ඉහළ මට්ටමට ප්‍රතිදානයක් එක් කරන්න.
  2. අපි වෙනස්කම් GitLab වෙත තල්ලු කරමු.
  3. නල මාර්ග වින්‍යාසයට කාර්යයක් එක් කරන්න pages (GitLab පිටු වල අඩවි ප්‍රකාශන කාර්යයන් සඳහා වෙන් කළ වචනය):
    1. පිටපත:
      1. nuget install docfx.console -version 2.51.0 - docfx ස්ථාපනය කරන්න; පැකේජ ස්ථාපනය කිරීමේ මාර්ග නිවැරදි බව සහතික කිරීම සඳහා අනුවාදය නියම කර ඇත.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ලේඛන එකතු කිරීම
    2. නෝඩ් කෞතුක භාණ්ඩ:

pages:
  # snip
  artifacts:
    paths:
      - public

docfx ගැන ගීතමය අපගමනය

මීට පෙර, ව්‍යාපෘතියක් සැකසීමේදී, මම විසඳුම් ගොනුවක් ලෙස ලේඛනගත කිරීම සඳහා කේත මූලාශ්‍රය නියම කළෙමි. ප්රධාන අවාසිය නම් පරීක්ෂණ ව්යාපෘති සඳහා ලියකියවිලි ද නිර්මාණය කර ඇත. මෙය අවශ්ය නොවේ නම්, ඔබට මෙම අගය node වෙත සැකසිය හැක metadata.src:

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

  1. metadata.src.src: "../" - අපි ස්ථානයට සාපේක්ෂව එක් මට්ටමකට යන්නෙමු docfx.json, නිසා රටා තුළ, නාමාවලි ගස සෙවීම ක්‍රියා නොකරයි.
  2. metadata.src.files: ["**/*.csproj"] - ගෝලීය රටාවක්, අපි සියලුම නාමාවලි වලින් සියලුම C # ව්‍යාපෘති එකතු කරමු.
  3. metadata.src.exclude: ["*.tests*/**"] - ගෝලීය රටාව, ෆෝල්ඩර වලින් සියල්ල බැහැර කරන්න .tests මාතෘකාව තුළ

එකතුව

එවැනි සරල වින්‍යාසයක් පැය භාගයකින් සහ කෝපි කෝප්ප කිහිපයකින් නිර්මාණය කළ හැකි අතර, එමඟින් කේතය ගොඩනඟා ඇත්ද සහ පරීක්ෂණ සමත් වී ඇත්දැයි පරීක්ෂා කිරීමට, නව පැකේජයක් තැනීමට, ලේඛන යාවත්කාලීන කිරීමට සහ අලංකාරයෙන් ඇස සතුටු කිරීමට ඔබට ඉඩ සලසයි. එක් එක් ඒකාබද්ධ කිරීමේ ඉල්ලීම සමඟ ව්‍යාපෘතියේ README හි ලාංඡන සහ ප්‍රධානියා වෙත යැවීම.

අවසාන .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

ලාංඡන ගැන කතා කරනවා

ඔවුන් නිසා, සියල්ලට පසු, සියල්ල ආරම්භ විය!

නල මාර්ග තත්ත්‍වයන් සහ කේත ආවරණය සහිත ලාංඡන GitLab හි Gtntral නල මාර්ග කොටසෙහි CI/CD සැකසුම් තුළ ඇත:

(පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

මම වේදිකාවේ ලේඛනගත කිරීමට සබැඳියක් සහිත ලාංඡනයක් නිර්මාණය කළෙමි shields.io - එහි සෑම දෙයක්ම තරමක් සරල ය, ඔබට ඔබේම ලාංඡනයක් සාදා එය ඉල්ලීමක් භාවිතයෙන් ලබා ගත හැකිය.

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

(පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

Azure DevOps කෞතුක භාණ්ඩ නවතම අනුවාදය සමඟ පැකේජ සඳහා ලාංඡන නිර්මාණය කිරීමට ද ඔබට ඉඩ සලසයි. මෙය සිදු කිරීම සඳහා, Azure DevOps වෙබ් අඩවියේ මූලාශ්‍රය තුළ, ඔබ විසින් තෝරාගත් පැකේජය සඳහා සාදන්න ලාංඡනය මත ක්ලික් කර සලකුණු සලකුණු පිටපත් කළ යුතුය:

(පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

(පාහේ) නිරපේක්ෂ ආරම්භකයින් සඳහා GitLab හි CI/CD සඳහා මාර්ගෝපදේශයක්

අලංකාරය එකතු කිරීම

පොදු වින්‍යාස කොටස් ඉස්මතු කිරීම

වින්‍යාසය ලිවීමේදී සහ ලේඛන හරහා සෙවීමේදී, මට YAML හි සිත්ගන්නා අංගයක් හමු විය - කොටස් නැවත භාවිතා කිරීම.

කාර්ය සැකසුම් වලින් ඔබට පෙනෙන පරිදි, ඔවුන් සියල්ලටම ටැගය අවශ්ය වේ windows ධාවකයේදී, සහ ඒකාබද්ධ කිරීමේ ඉල්ලීමක් ප්‍රධානියා වෙත යවන විට/සාදන ලද (ලේඛනගත කිරීම හැර) ක්‍රියාරම්භ කරනු ලැබේ. අපි නැවත භාවිතා කරන කොටසට මෙය එකතු කරමු:

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

දැන් අපට කාර්ය විස්තරයේ කලින් ප්‍රකාශ කරන ලද කොටස ඇතුළු කළ හැකිය:

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

කාර්යයක් ලෙස අර්ථකථනය නොකිරීමට, ඛණ්ඩක නම් තිතකින් ආරම්භ විය යුතුය.

පැකේජ අනුවාදනය

පැකේජයක් නිර්මාණය කරන විට, සම්පාදකය විධාන රේඛා ස්විචයන් පරීක්ෂා කරයි, සහ ඒවා නොමැති විට, ව්යාපෘති ගොනු; එය අනුවාද නෝඩයක් සොයාගත් විට, එය ගොඩනඟන පැකේජයේ අනුවාදය ලෙස එහි අගය ගනී. නව අනුවාදයක් සමඟ පැකේජයක් තැනීම සඳහා, ඔබ එය ව්‍යාපෘති ගොනුව තුළ යාවත්කාලීන කිරීමට හෝ විධාන රේඛා තර්කයක් ලෙස සම්මත කිරීමට අවශ්‍ය බව පෙනේ.

අපි තවත් පැතුම් ලැයිස්තුවක් එකතු කරමු - අනුවාදයේ ඇති කුඩා අංක දෙක පැකේජයේ වසර සහ ගොඩනඟන දිනය වීමට ඉඩ හරින්න, සහ පූර්ව නිකුතු අනුවාද එකතු කරන්න. ඇත්ත වශයෙන්ම, ඔබට මෙම දත්ත ව්‍යාපෘති ගොනුවට එකතු කර එක් එක් ඉදිරිපත් කිරීමට පෙර පරීක්ෂා කළ හැකිය - නමුත් ඔබට එය නල මාර්ගයේද කළ හැකිය, පැකේජ අනුවාදය සන්දර්භයෙන් එකතු කර විධාන රේඛා තර්කය හරහා එය සම්මත කරන්න.

කමිට් මැසේජ් එකේ වගේ ලයින් එකක් තියෙනවා නම් අපි එකඟ වෙමු release (v./ver./version) <version number> (rev./revision <revision>)?, එවිට අපි මෙම පේළියෙන් පැකේජයේ අනුවාදය ගෙන එය වත්මන් දිනය සමඟ අතිරේක කර එය විධානයට තර්කයක් ලෙස ලබා දෙන්නෙමු. dotnet pack. රේඛාවක් නොමැති විට, අපි හුදෙක් පැකේජය එකතු නොකරමු.

පහත පිටපත මෙම ගැටළුව විසඳයි:

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

කාර්යයකට පිටපතක් එකතු කිරීම pack and deploy job සහ කැපවීම් පණිවිඩයේ දී ඇති තන්තුවක් ඉදිරියේ පැකේජ එකලස් කිරීම දැඩි ලෙස නිරීක්ෂණය කරන්න.

එකතුව

වින්‍යාසය ලිවීමෙන් පැය භාගයක් හෝ පැයක් පමණ වැය කිරීමෙන්, දේශීය බලපත‍්‍රයේ දෝෂහරණය කිරීමෙන් සහ අසාර්ථක දියත් කිරීම් කිහිපයකින් පසු, සාමාන්‍ය කාර්යයන් ස්වයංක්‍රීය කිරීම සඳහා අපට සරල වින්‍යාසයක් ලැබුණි.

ඇත්ත වශයෙන්ම, GitLab CI / CD මෙම මාර්ගෝපදේශය කියවීමෙන් පසු පෙනෙනවාට වඩා බොහෝ පුළුල් සහ බහුවිධ වේ - එය කිසිසේත්ම සත්‍ය නොවේ. එහි පවා Auto DevOps යනුඉඩ දෙනවා

ඔබගේ යෙදුම් ස්වයංක්‍රීයව හඳුනා ගැනීම, ගොඩ නැගීම, පරීක්ෂා කිරීම, යෙදවීම සහ අධීක්ෂණය කිරීම

දැන් සැලසුම් කර ඇත්තේ Azure වෙත යෙදුම් යෙදවීම, Pulumi භාවිතා කිරීම සහ ඉලක්ක පරිසරය ස්වයංක්‍රීයව තීරණය කිරීම සඳහා නල මාර්ගයක් සැකසීමයි, එය ඊළඟ ලිපියෙන් ආවරණය කෙරේ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න