Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

Utawa carane entuk lencana sing apik kanggo proyek sampeyan ing sawijining sore coding santai

Mbokmenawa, saben pangembang sing duwe paling ora siji proyek pet ing sawetara titik duwe gatel kanggo lencana ayu karo status, jangkoan kode, versi paket ing nuget ... Lan gatel iki mimpin kula kanggo nulis artikel iki. Ing proses nyiapake kanggo nulis, aku entuk kaendahan iki ing salah sawijining proyekku:

Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

Artikel iki bakal nutupi persiyapan dhasar integrasi terus-terusan lan pangiriman kanggo proyek perpustakaan kelas .Net Core ing GitLab, nerbitake dokumentasi menyang GitLab Pages lan ngirim paket sing diklumpukake menyang feed pribadi ing Azure DevOps.

Kode VS kanthi ekstensi digunakake minangka lingkungan pangembangan Alur Kerja GitLab (kanggo validasi file setelan langsung saka lingkungan pangembangan).

Pambuka Ringkes

CD nalika sampeyan mung push, nanging klien wis ilang kabeh?

Apa CI/CD lan apa iku dibutuhake? Sampeyan bisa gampang google. Temokake dokumentasi lengkap babagan nyetel pipa ing GitLab uga gampang. Ing kene aku bakal ringkes lan, yen bisa, tanpa cacat, njlèntrèhaké proses sistem saka mripat manuk:

  • pangembang ngirim komitmen menyang repositori, nggawe panjalukan gabungan liwat situs web, utawa kanthi cara liya kanthi eksplisit utawa implisit ngluncurake pipa kasebut,
  • saka konfigurasi, kabeh tugas dipilih sing kondisine ngidini diluncurake ing konteks tartamtu,
  • tugas diatur miturut tahapan,
  • tataran kaleksanan ing siji - i.e. podo karo kabeh tugas ing tahap iki wis rampung,
  • yen tataran gagal (yaiku paling ora salah sawijining tugas panggung gagal) - saluran pipa mandheg (meh tansah),
  • yen kabeh tahapan rampung kanthi sukses, pipa kasebut dianggep sukses.

Mangkono kita duwe:

  • pipeline minangka seperangkat tugas sing diatur dadi tahapan sing sampeyan bisa ngumpul, nyoba, kode paket, masang perakitan sing wis rampung menyang layanan awan, lsp.
  • panggung (panggung) - unit organisasi pipa, ngemot 1+ tugas,
  • tugas (proyek) minangka unit kerja ing pipa. Kasedhiya saka skrip (dibutuhake), kahanan peluncuran, setelan kanggo nerbitake / artefak cache lan liya-liyane.

Patut, tugas nalika nyiyapake CI / CD teka mudhun kanggo nggawe pesawat saka tugas sing ngleksanakake kabeh tumindak perlu kanggo assembling, testing lan nerbitakΓ© kode lan artefak.

Sadurunge miwiti: kenapa?

  • Kenapa GitLab?

Amarga nalika perlu nggawe repositori pribadi kanggo proyek pet, dheweke dibayar ing GitHub, lan aku rakus. Repositori wis dadi gratis, nanging saiki iki dudu alesan sing cukup kanggo aku pindhah menyang GitHub.

  • Napa ora Azure DevOps Pipelines?

Amarga persiyapan iku prasaja - sampeyan malah ora perlu kawruh baris printah. Integrasi karo panyedhiya git eksternal - ing sawetara klik, ngimpor kunci SSH kanggo ngirim komitmen menyang repositori - uga, pipa gampang dikonfigurasi sanajan tanpa cithakan.

Posisi wiwitan: apa sing sampeyan duwe lan apa sing dikarepake

Kita duwe:

  • repositori ing GitLab.

Kita pengin:

  • perakitan lan tes otomatis kanggo saben panyuwunan gabungan,
  • mbangun paket kanggo saben panjalukan gabungan lan push menyang master, yen ana baris tartamtu ing pesen komit,
  • ngirim paket sing diklumpukake menyang feed pribadi ing Azure DevOps,
  • perakitan dokumentasi lan publikasi ing GitLab Pages,
  • lencana!11

Keperluan sing diterangake pas karo model pipa ing ngisor iki:

  • Tahap 1 - perakitan
    • Kita ngumpulake kode kasebut, nerbitake file output minangka artefak
  • Tahap 2 - testing
    • Kita nampa artefak saka tataran mbangun, mbukak tes, ngumpulake data jangkoan kode
  • Tahap 3 - ngirim
    • Tugas 1 - ngumpulake paket nuget lan ngirim menyang Azure DevOps
    • Tugas 2 - kita ngumpulake situs saka xmldoc ing kode sumber lan nerbitake ing GitLab Pages

Ayo miwiti!

Ngrakit konfigurasi

Nyiapake akun

  1. Nggawe akun ing Microsoft Azure

  2. Menyang DevOps Azure

  3. Nggawe proyek anyar

    1. Jeneng - sembarang
    2. Visibilitas - sembarang
      Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

  4. Nalika sampeyan ngeklik tombol Gawe, proyek bakal digawe lan sampeyan bakal digawa menyang kaca. Ing kaca iki, sampeyan bisa mateni fitur sing ora perlu kanthi pindhah menyang setelan proyek (link ngisor ing dhaptar ing sisih kiwa -> Ringkesan -> Blok Layanan Azure DevOps)
    Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

  5. Pindhah menyang Atrifacts, klik Gawe feed

    1. Ketik jeneng sumber
    2. Pilih visibilitas
    3. Busak centhang ing kothak Kalebu paket saka sumber umum umumsupaya sumbere ora dadi tong sampah klon nuget
      Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

  6. Klik Connect to feed, pilih Visual Studio, copy Source from the Machine Setup block
    Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

  7. Pindhah menyang setelan akun, pilih Token Akses Pribadi
    Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

  8. Nggawe token akses anyar

    1. Jeneng - sewenang-wenang
    2. Organisasi - saiki
    3. Periode validitas: maksimal 1 taun
    4. Lingkup - Packaging / Waca & Nulis
      Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

  9. Salin token sing digawe - sawise nutup jendhela modal Nilai ora bakal kasedhiya

  10. Pindhah menyang setelan repositori ing GitLab, pilih setelan CI/CD
    Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

  11. Nggedhekake blok Variabel lan tambahake sing anyar

    1. Jeneng - sembarang tanpa spasi (bakal kasedhiya ing cangkang printah)
    2. Nilai minangka token akses saka langkah 9
    3. Pilih variabel Mask
      Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

Iki ngrampungake persiyapan awal.

Nyiapake kerangka konfigurasi

Secara default, file sing digunakake kanggo ngatur CI/CD ing GitLab yaiku .gitlab-ci.yml saka oyod gudang. Sampeyan bisa ngatur path khusus kanggo file iki ing setelan gudang, nanging ing kasus iki ora perlu.

Kaya sing bisa dideleng saka ekstensi, file kasebut ngemot konfigurasi ing format kasebut YAML. Dokumentasi njlèntrèhaké kanthi rinci apa tombol bisa ana ing tingkat ndhuwur konfigurasi, lan ing saben tingkat nested.

Pisanan, ayo nambah link menyang file konfigurasi menyang gambar docker ing ngendi tugas bakal dieksekusi. Kanggo nindakake iki kita temokake Kaca gambar .Net Core ing Docker Hub. ing GitHub Ana pandhuan rinci babagan gambar sing kudu dipilih kanggo macem-macem tugas. Gambar karo .Net Core 3.1 cocok kanggo kita mbangun, mula aja ragu-ragu nambahake minangka baris pisanan ing konfigurasi.

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

Saiki, nalika sampeyan miwiti pipeline, gambar sing ditemtokake bakal diundhuh saka repositori gambar Microsoft, ing ngendi kabeh tugas saka konfigurasi bakal dieksekusi.

Langkah sabanjure kanggo nambah panggung's. Kanthi gawan, GitLab nemtokake 5 tahapan:

  • .pre - ditindakake ing kabeh tahapan,
  • .post - ditindakake sawise kabeh tahapan,
  • build - pisanan sawise .pre panggung,
  • test - fase kapindho,
  • deploy - tataran katelu.

Nanging, ora ana sing ngalangi sampeyan nyatakake kanthi jelas. Urutan langkah-langkah sing kadhaptar mengaruhi urutan sing wis rampung. Kanggo jangkep, ayo ditambahake menyang konfigurasi:

stages:
  - build
  - test
  - deploy

Kanggo debugging, entuk informasi babagan lingkungan sing ditindakake tugas. Ayo dadi nambah pesawat global printah sing bakal kaleksanan sadurunge saben tugas nggunakake before_script:

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

Sampeyan kudu nambah paling ora siji tugas supaya nalika komit dikirim, pipa bakal diwiwiti. Saiki, ayo nambah tugas kosong kanggo demonstrasi:

dummy job:
  script:
    - echo ok

Kita miwiti validasi, entuk pesen yen kabeh apik, tundhuk, push, deleng asil ing situs ... Lan kita entuk kesalahan skrip - bash: .PSVersion: command not found. WTF?

Kabeh iku logis - kanthi standar, pelari (tanggung jawab kanggo nglakokake skrip tugas lan diwenehake dening GitLab) nggunakake bash kanggo nglakokakΓ© prentah. Sampeyan bisa ndandani iki kanthi jelas nuduhake ing katrangan tugas apa tag sing kudu ana ing pelari pipa eksekusi:

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

apik tenan! Pipa saiki mlaku.

Sing maca enten, mbaleni langkah-langkah iki, bakal weruh yen tugas wis rampung ing tataran test, sanajan kita ora nemtokake panggung. Kaya sing sampeyan duga, test iku langkah gawan.

Ayo terus nggawe kerangka konfigurasi kanthi nambahake kabeh tugas sing diterangake ing ndhuwur:

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

Kita entuk pipa sing ora fungsional, nanging bener.

Nyetel pemicu

Amarga kasunyatan manawa ora ana saringan pemicu sing ditemtokake kanggo tugas apa wae, saluran pipa bakal kanthi dieksekusi saben wektu commit dikirim menyang repositori. Amarga iki dudu prilaku sing dikarepake ing umum, kita bakal ngatur saringan pemicu kanggo tugas.

Filter bisa diatur ing rong format: mung / kajaba ΠΈ aturan. Cekakipun, only/except ngidini sampeyan ngatur saringan kanthi pemicu (merge_request, contone - ngatur tugas sing bakal dileksanakake saben-saben panjalukan gabungan digawe lan saben-saben komit dikirim menyang cabang sing dadi sumber ing panyuwunan gabung) lan jeneng cabang (kalebu nggunakake ekspresi biasa); rules ngidini sampeyan ngatur sakumpulan kahanan lan, kanthi opsional, ngganti kahanan eksekusi tugas gumantung saka sukses tugas sadurunge (when ing GitLab CI/CD).

Ayo dadi elinga pesawat saka syarat - perakitan lan testing mung kanggo gabung panjalukan, packaging lan ngirim kanggo Azure DevOps - kanggo gabung panjalukan lan push kanggo master, generasi dokumentasi - kanggo push kanggo master.

Pisanan, ayo nyiyapake tugas perakitan kode kanthi nambahake aturan pemicu sing mung nyebabake panyuwunan gabungan:

build job:
  # snip
  only:
    - merge_request

Saiki ayo ngatur tugas kemasan kanggo micu panyuwunan gabungan lan nambah komitmen menyang master:

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

Nalika sampeyan bisa ndeleng, kabeh iku prasaja lan langsung.

Sampeyan uga bisa ngatur tugas kanggo micu mung yen panjalukan gabungan digawe karo target utawa cabang sumber tartamtu:

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

Ing kahanan bisa digunakake variabel sing didhaptar ing kene; aturan rules ora cocog karo aturan only/except.

Konfigurasi Simpenan Artefak

Nalika tugas lagi mlaku build job kita bakal nggawe artefak digawe sing bisa digunakake maneh ing tugas sakteruse. Kanggo nindakake iki, sampeyan kudu nambah dalan menyang konfigurasi tugas, file sing kudu disimpen lan digunakake maneh ing tugas sabanjure, menyang tombol. artifacts:

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

Paths ndhukung wildcards, kang temtunipun nggampangake kanggo nyetel.

Yen tugas nggawe artefak, banjur saben tugas sakteruse bakal bisa ngakses - padha bakal dumunung ing sadawane dalan padha relatif kanggo ROOT gudang kang padha diklumpukake saka tugas asli. Artefak uga kasedhiya kanggo diundhuh ing situs web.

Saiki kita duwe kerangka konfigurasi sing siap (lan diverifikasi), kita bisa nerusake nulis skrip kanggo tugas.

Kita nulis skrip

Mbok menawa, biyen, ing galaksi sing adoh, adoh banget, mbangun proyek (kalebu .net) saka baris printah iku rasa sakit. Saiki sampeyan bisa ngumpul, nguji lan nerbitake proyek kasebut ing 3 tim:

dotnet build
dotnet test
dotnet pack

Alami, ana sawetara nuansa amarga kita bakal nggawe rumit perintah kasebut.

  1. Kita pengin release, ora debug, mbangun, supaya kita nambah kanggo saben printah -c Release
  2. Nalika nyoba, kita pengin ngumpulake data babagan jangkoan kode, mula kita kudu nyambungake penganalisa jangkoan menyang perpustakaan tes:
    1. Paket kasebut kudu ditambahake menyang kabeh perpustakaan tes coverlet.msbuild: dotnet add package coverlet.msbuild saka folder proyek
    2. Tambah menyang printah peluncuran test /p:CollectCoverage=true
    3. Ayo nambahake kunci konfigurasi tugas testing kanggo entuk asil jangkoan (ndeleng ngisor)
  3. Nalika ngemas kode menyang paket nuget, kita bakal nyetel direktori output kanggo paket kasebut: -o .

Nglumpukake data jangkoan kode

Sawise nglakokake tes, Coverlet nampilake statistik peluncuran menyang konsol:

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 ngidini sampeyan nemtokake ekspresi reguler kanggo entuk statistik, sing banjur bisa dipikolehi ing bentuk lencana. Ekspresi reguler ditemtokake ing setelan tugas kanthi tombol coverage; ekspresi kasebut kudu ngemot klompok panangkepan, nilai sing bakal ditransfer menyang lencana:

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

Ing kene kita entuk statistik saka garis kanthi jangkoan total kanthi garis.

Kita nerbitake paket lan dokumentasi

Kita duwe loro tumindak sing ditugasake ing tahap pungkasan pipa - amarga perakitan lan tes wis liwati, kita bisa nuduhake pangembangan kita karo jagad iki.

Pisanan, ayo goleki nerbitake menyang sumber paket:

  1. Yen proyek ora duwe file konfigurasi nuget (nuget.config), gawe anyar: dotnet new nugetconfig

    Kanggo apa: Gambar kasebut bisa uga ora duwe akses nulis menyang konfigurasi global (pangguna lan mesin). Supaya ora nyekel kesalahan, kita mung bakal nggawe konfigurasi lokal anyar lan nggarap.

  2. Ayo nambah sumber paket anyar menyang konfigurasi lokal: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - jeneng sumber lokal, ora penting
    2. url - URL sumber saka tahap "Nyiyapake akun", langkah 6
    3. organization - jeneng organisasi ing Azure DevOps
    4. gitlab variable - jeneng variabel kanthi token akses sing ditambahake menyang GitLab ("Nyiyapake akun", p. 11). Alamiah, ing format $variableName
    5. -StorePasswordInClearText - hack kanggo ngliwati kesalahan akses ditolak (Aku dudu sing sepisanan nglangkahi garu iki)
    6. Yen ana kesalahan, bisa uga migunani kanggo nambah -verbosity detailed
  3. Kita ngirim paket menyang sumber: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Kita ngirim kabeh paket saka direktori saiki, supaya *.nupkg.
    2. name - saka langkah ing ndhuwur.
    3. key - sembarang baris. Ing Azure DevOps, ing Connect to feed jendhela, baris conto tansah az.
    4. -skipduplicate - yen sampeyan nyoba ngirim paket sing wis ana tanpa tombol iki, sumber bakal ngasilake kesalahan 409 Conflict; karo tombol, ngirim bakal dilewati.

Saiki ayo nyiyapake nggawe dokumentasi:

  1. Kanggo miwiti, ing repositori, ing cabang master, kita miwiti proyek docfx. Kanggo nindakake iki, sampeyan kudu mbukak printah saka ROOT docfx init lan interaktif nyetel paramèter tombol kanggo ngrakit dokumentasi. Katrangan rinci babagan persiyapan proyek minimal kene.
    1. Nalika nyetel, penting kanggo nemtokake direktori output ..public - GitLab minangka standar njupuk isi folder umum ing oyod repositori minangka sumber kanggo Pages. Amarga project bakal dumunung ing folder nested ing gudang - nambah metu kanggo tingkat sabanjurΓ© kanggo path.
  2. Ayo push owah-owahan menyang GitLab.
  3. Tambah tugas menyang konfigurasi pipa pages (tembung sing dilindhungi kanggo tugas penerbitan situs ing GitLab Pages):
    1. Skrip:
      1. nuget install docfx.console -version 2.51.0 - nginstal docfx; Versi kasedhiya kanggo mesthekake yen path instalasi paket bener.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ngumpulake dokumentasi
    2. Node artefak:

pages:
  # snip
  artifacts:
    paths:
      - public

Digression lirik babagan docfx

Sadurunge, nalika nyiyapake proyek, aku nemtokake sumber kode kanggo dokumentasi minangka file solusi. Kerugian utama yaiku dokumentasi uga digawe kanggo proyek uji coba. Yen iki ora perlu, sampeyan bisa nyetel nilai iki kanggo simpul metadata.src:

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

  1. metadata.src.src: "../" - pindhah siji tingkat munggah relatif kanggo lokasi docfx.json, amarga Nggoleki wit direktori ora bisa digunakake ing pola.
  2. metadata.src.files: ["**/*.csproj"] - pola global, kita ngumpulake kabeh proyek C # saka kabeh direktori.
  3. metadata.src.exclude: ["*.tests*/**"] - pola global, ngilangi kabeh saka folder karo .tests Ing judhul

Subtotal

Konfigurasi prasaja iki bisa digawe kanthi harfiah setengah jam lan sawetara cangkir kopi, sing bakal ngidini sampeyan mriksa saben panyuwunan gabungan lan ngirim menyang master yen kode kasebut dibangun lan tes wis rampung, ngumpulake anyar. paket, nganyari dokumentasi lan nyenengake mripat karo lencana ayu ing README project.

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

Ngomong babagan lencana

Iku kanggo wong-wong mau kabeh diwiwiti!

Lencana kanthi status pipa lan jangkoan kode kasedhiya ing GitLab ing setelan CI/CD ing blok pipa Gtntral:

Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

Aku nggawe badge karo link menyang dokumentasi ing platform Shields.io - kabeh iku cukup suta ana, sampeyan bisa nggawe badge dhewe lan nampa nggunakake panjalukan.

![ΠŸΡ€ΠΈΠΌΠ΅Ρ€ с Shields.io](https://img.shields.io/badge/custom-badge-blue)

Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

Azure DevOps Artefak uga ngidini sampeyan nggawe lencana kanggo paket sing nuduhake versi paling anyar. Kanggo nindakake iki, ing sumber ing situs web Azure DevOps, sampeyan kudu ngeklik Gawe badge kanggo paket sing dipilih lan nyalin markup markup:

Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

Pandhuan CI / CD ing GitLab kanggo (Meh) Newbie Absolute

Nambah kaendahan

Kita nyorot fragmen konfigurasi umum

Nalika nulis konfigurasi lan nelusuri dokumentasi, aku nemokake fitur YAML sing menarik - nggunakake pecahan maneh.

Nalika sampeyan bisa ndeleng saka setelan tugas, kabeh padha mbutuhake tag windows saka runner, lan micu nalika ngirim panjalukan gabungan kanggo master / nggawe request gabungan (kajaba dokumentasi). Ayo ditambahake menyang fragmen sing bakal digunakake maneh:

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

Lan saiki kita bisa nglebokake fragmen sing diumumake sadurunge menyang deskripsi tugas:

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

Jeneng fragmen kudu diwiwiti kanthi titik supaya ora diinterpretasikake minangka tugas.

Versi paket

Nalika nggawe paket, kompiler mriksa saklar baris perintah, lan yen ora ana, file proyek; Sawise nemokake simpul Versi, njupuk regane minangka versi paket sing dibangun. Pranyata supaya bisa mbangun paket karo versi anyar, sampeyan kudu salah siji nganyari ing file project utawa pass minangka argumen baris printah.

Ayo nambah siji pesenan maneh - supaya rong nomer paling murah ing versi dadi taun lan tanggal paket digawe, lan nambah versi prerelease. Mesthi wae, sampeyan bisa nambah data iki menyang file proyek lan mriksa sadurunge saben kiriman - nanging sampeyan uga bisa nindakake iki ing pipa, ngumpulake versi paket saka konteks lan ngliwati argumen baris perintah.

Ayo padha setuju yen pesen commit ngemot baris kaya release (v./ver./version) <version number> (rev./revision <revision>)?, banjur kita bakal njupuk versi paket saka baris iki, nambah karo tanggal saiki lan pass minangka argumen kanggo printah dotnet pack. Yen ora ana garis, kita mung ora bakal ngumpulake paket kasebut.

Skrip ing ngisor iki ngrampungake masalah iki:

# рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для поиска строки с вСрсиСй
$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

Nambahake skrip menyang tugas pack and deploy job lan mirsani DΓ©wan paket strictly yen ana baris diwenehi ing pesen commit.

Total

Sawise mbuwang kira-kira setengah jam nganti jam nulis konfigurasi, debugging ing powershell lokal lan, bisa uga, sawetara peluncuran sing ora sukses, kita nampa konfigurasi sing gampang kanggo ngotomatisasi tugas rutin.

Mesthine, GitLab CI/CD luwih akeh lan macem-macem tinimbang sing katon sawise maca pandhuan iki - iku ora bener. Malah ana Auto DevOps ya, ngidini

ndeteksi, mbangun, nyoba, nyebarake, lan ngawasi aplikasi sampeyan kanthi otomatis

Saiki rencana kanggo ngatur pipa kanggo nyebarake aplikasi ing Azure, nggunakake Pulumi lan kanthi otomatis ndeteksi lingkungan target, sing bakal dibahas ing artikel sabanjure.

Source: www.habr.com

Add a comment