Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

Atanapi kumaha kéngingkeun lencana anu saé pikeun proyék anjeun dina hiji wengi coding anu gampang

Panginten, unggal pamekar anu ngagaduhan sahenteuna hiji proyék piaraan dina sababaraha waktos gaduh gatal-gatal ngeunaan lencana anu éndah kalayan status, sinyalna kode, versi pakét dina nuget ... Sareng gatal ieu nyababkeun kuring nyerat tulisan ieu. Dina préparasi nyeratna, kuring ngagaduhan kaéndahan ieu dina salah sahiji proyék kuring:

Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

Artikel ieu bakal leumpang anjeun ngaliwatan setelan dasar integrasi kontinyu sarta pangiriman pikeun proyék perpustakaan kelas .Net Core di GitLab, dokuméntasi medarkeun ka GitLab Kaca, sarta ngadorong bungkusan diwangun kana feed swasta di Azure DevOps.

VS Code dianggo salaku lingkungan pangembangan kalayan ekstensi Alur Kerja GitLab (pikeun validasi file setelan langsung ti lingkungan ngembangkeun).

Bubuka singget

CD - éta mun anjeun ngan kadorong, sarta sagalana geus fallen on klien nu?

Naon CI / CD sareng kunaon anjeun peryogina - anjeun tiasa gampang google. Manggihan dokuméntasi lengkep dina ngonpigurasikeun pipelines di GitLab ogé gampang. Di dieu kuring bakal sakeudeung sareng, upami mungkin, tanpa cacad ngajelaskeun prosés sistem tina pandangan panon manuk:

  • pamekar ngirim komitmen ka Repository, nyiptakeun pamundut ngahiji ngaliwatan loka, atanapi ku cara anu sanés, sacara eksplisit atanapi implisit ngamimitian pipa,
  • sadaya tugas dipilih tina konfigurasi, kaayaan anu ngamungkinkeun aranjeunna diluncurkeun dina kontéks anu dipasihkeun,
  • tugas disusun dumasar kana tahap-tahapna,
  • tahapan anu dieksekusi dina gilirannana - i.e. sajajar Sadaya pancén dina tahap ieu parantos réngsé,
  • lamun panggung gagal (ie, sahenteuna salah sahiji tugas panggung gagal), pipa eureun (ampir salawasna),
  • lamun sagala tahapan geus réngsé junun, pipa dianggap suksés.

Ku kituna, urang boga:

  • pipeline - sakumpulan tugas anu dikelompokeun kana tahapan dimana anjeun tiasa ngawangun, nguji, kode pakét, nyebarkeun gedong anu réngsé kana jasa awan, jsb.,
  • panggung (panggung) - unit organisasi pipa, ngandung 1+ tugas,
  • tugas (tugas) nyaéta unit gawé dina pipa. Éta diwangun ku naskah (wajib), kaayaan peluncuran, setélan pikeun nyebarkeun/caching artefak, sareng seueur deui.

Sasuai, tugas nalika nyetél CI / CD turun pikeun nyiptakeun sakumpulan tugas anu ngalaksanakeun sagala tindakan anu dipikabutuh pikeun ngawangun, nguji sareng nyebarkeun kode sareng artefak.

Sateuacan ngamimitian: naha?

  • Naha Gitlab?

Kusabab nalika janten perlu nyieun repositories swasta pikeun proyék-proyék piaraan, maranéhanana dibayar dina GitHub, sarta kuring rakus. Repositories parantos bébas, tapi sajauh ieu sanés alesan anu cekap pikeun kuring ngalih ka GitHub.

  • Naha henteu Azure DevOps Pipelines?

Kusabab aya setelan dasar - pangaweruh ngeunaan garis paréntah malah teu diperlukeun. Integrasi sareng panyadia git éksternal - dina sababaraha klik, impor konci SSH pikeun ngirim komitmen ka gudang - ogé, pipa gampang dikonpigurasi sanajan henteu tina citakan.

Posisi awal: naon anu anjeun gaduh sareng naon anu anjeun pikahoyong

Kami gaduh:

  • gudang di GitLab.

Kami hoyong:

  • assembly otomatis tur nguji pikeun tiap pamundut ngagabung,
  • ngawangun bungkusan pikeun tiap ngahijikeun pamundut sareng ngadorong ka master, upami aya garis anu tangtu dina pesen komitmen,
  • ngirim bungkusan diwangun ka feed pribadi di Azure DevOps,
  • Majelis dokuméntasi sareng publikasi dina GitLab Pages,
  • lencana!11

Sarat anu dijelaskeun sacara organik digolongkeun kana modél pipa ieu:

  • Tahap 1 - assembly
    • Kami ngumpulkeun kodeu, nyebarkeun file kaluaran salaku artefak
  • Tahap 2 - nguji
    • Urang meunang artefak tina tahap ngawangun, ngajalankeun tés, ngumpulkeun data sinyalna kode
  • Tahap 3 - Nepikeun
    • Tugas 1 - ngawangun pakét nuget sareng kirimkeun ka Azure DevOps
    • Tugas 2 - urang ngumpulkeun situs ti xmldoc dina kode sumber sarta nyebarkeun eta dina GitLab Pages

Hayu urang mimitian!

Ngumpulkeun konfigurasi

Nyiapkeun rekening

  1. Jieun akun di Microsoft Azure

  2. Pindah ka Azure DevOps

  3. Urang nyieun proyék anyar

    1. Ngaran - naon
    2. Visibilitas - sagala
      Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

  4. Nalika anjeun ngaklik tombol Jieun, proyék bakal didamel sareng anjeun bakal dialihkeun ka halamanna. Dina halaman ieu, anjeun tiasa nganonaktipkeun fitur anu teu dipikabutuh ku jalan ka setélan proyék (link handap dina daptar di kénca -> Tinjauan -> Blok Azure DevOps Services)
    Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

  5. Pindah ka Atrifacts, klik Jieun feed

    1. Lebetkeun nami sumberna
    2. Pilih visibilitas
    3. Pupus centang Ngawengku bungkusan tina sumber umum umum, supaya sumberna teu robah jadi dump nuget clone
      Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

  6. Klik Connect pikeun feed, pilih Visual Studio, nyalin Sumber tina blok Mesin Setup
    Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

  7. Pindah ka setélan akun, pilih Token Aksés Pribadi
    Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

  8. Jieun token aksés anyar

    1. Ngaran - wenang
    2. Organisasi - Ayeuna
    3. Sah pikeun maksimal 1 taun
    4. Lingkup - Bungkusan / Baca & Tulis
      Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

  9. Salin token anu diciptakeun - sanggeus jandela modal ditutup, nilai bakal sadia

  10. Pindah ka setélan gudang di GitLab, pilih setélan CI / CD
    Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

  11. Kembangkeun blok Variabel, tambahkeun anu énggal

    1. Ngaran - sagala tanpa spasi (bakal sadia dina cangkang paréntah)
    2. Nilai - token aksés ti paragraf 9
    3. Pilih variabel Topeng
      Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

Ieu ngalengkepan pra-konfigurasi.

Nyiapkeun kerangka konfigurasi

Sacara standar, konfigurasi CI/CD dina GitLab nganggo file .gitlab-ci.yml tina akar gudang. Anjeun tiasa nyetél jalur sawenang ka file ieu dina setélan Repository, tapi dina hal ieu teu perlu.

Sakumaha anjeun tiasa tingali tina extension, file ngandung konfigurasi dina format YAML. Rincian dokuméntasi mana konci anu tiasa dikandung dina tingkat luhur konfigurasi, sareng dina unggal tingkat anu disarangkeun.

Mimiti, hayu urang tambahkeun tautan kana gambar docker dina file konfigurasi, dimana tugasna bakal dilaksanakeun. Pikeun ieu kami manggihan Kaca gambar .Net Core on Docker Hub. The GitHub Aya pituduh anu lengkep ngeunaan gambar anu kedah dipilih pikeun tugas anu béda. Hiji gambar kalawan .Net Core 3.1 cocog pikeun urang ngawangun, jadi ngarasa Luncat pikeun nambahkeun baris kahiji kana konfigurasi.

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

Ayeuna, nalika jalur pipa diluncurkeun tina gudang gambar Microsoft, gambar anu ditangtukeun bakal diunduh, dimana sadaya pancén tina konfigurasi bakal dieksekusi.

Lengkah saterusna nyaéta nambahkeun panggungurang. Sacara standar, GitLab netepkeun 5 tahap:

  • .pre - dilaksanakeun nepi ka sadaya tahapan,
  • .post - dipigawé sanggeus sagala tahapan,
  • build - kahiji sanggeus .pre panggung,
  • test - fase kadua,
  • deploy - tahap katilu.

Henteu aya anu ngahalangan anjeun pikeun nyatakeun aranjeunna sacara eksplisit. Urutan léngkah-léngkah anu didaptarkeun mangaruhan kana urutan anu dilaksanakeun. Pikeun ngalengkepan, hayu urang tambahkeun kana konfigurasi:

stages:
  - build
  - test
  - deploy

Pikeun debugging, masuk akal pikeun kéngingkeun inpormasi ngeunaan lingkungan dimana tugasna dilaksanakeun. Hayu urang tambahkeun hiji set global paréntah anu bakal dieksekusi saméméh unggal tugas kalawan before_script:

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

Tetep nambihan sahenteuna hiji tugas supados nalika komitna dikirim, jalur pipa bakal ngamimitian. Pikeun ayeuna, hayu urang tambahkeun tugas kosong pikeun nunjukkeun:

dummy job:
  script:
    - echo ok

Kami ngamimitian validasi, kami nampi pesen yén sadayana henteu kunanaon, kami komitmen, kami nyorong, kami ningali hasil dina situs ... Sareng kami nampi kasalahan naskah - bash: .PSVersion: command not found. wtf?

Sagalana logis - sacara standar, runners (tanggung jawab pikeun ngalaksanakeun skrip tugas sareng disayogikeun ku GitLab) nganggo bash pikeun ngalaksanakeun paréntah. Anjeun tiasa ngalereskeun ieu ku netepkeun sacara eksplisit dina katerangan tugas naon tag anu kedah dipiboga ku runner pipeline:

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

Hebat! Pipa ayeuna jalan.

Pamaca anu ati-ati, saatos ngulang léngkah-léngkah anu dituduhkeun, bakal perhatikeun yén tugasna parantos réngsé di panggung test, sanajan urang teu nangtukeun panggung. Salaku bisa Anjeun nebak test nyaéta léngkah standar.

Hayu urang teraskeun nyiptakeun kerangka konfigurasi ku cara nambihan sadaya tugas anu dijelaskeun di luhur:

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

Kami ngagaduhan pipa anu henteu fungsional, tapi leres.

Nyetél pemicu

Kusabab kanyataan yén teu aya saringan pemicu anu dieusian pikeun salah sahiji tugas, saluran pipa bakal pinuh dieksekusi unggal waktos commit didorong ka Repository. Kusabab ieu sanés kabiasaan anu dipikahoyong sacara umum, kami bakal nyetél saringan pemicu pikeun tugas.

Saringan tiasa dikonpigurasi dina dua format: ngan / iwal и aturan. singket, only/except ngidinan Anjeun pikeun ngonpigurasikeun saringan ku pemicu (merge_request, Contona - susunan tugas bisa dieksekusi unggal waktu pamundut tarikan dijieun tur unggal waktos commits dikirim ka cabang nu sumber dina pamundut ngahiji) jeung ngaran cabang (kaasup ngagunakeun ungkapan biasa); rules ngidinan Anjeun pikeun ngaluyukeun sakumpulan kaayaan jeung, optionally, ngarobah kaayaan palaksanaan tugas gumantung kana kasuksésan tugas saméméhna (when di GitLab CI/CD).

Hayu urang ngelingan sakumpulan sarat - assembly sarta nguji ukur pikeun pamundut ngagabung, bungkusan na ngirim ka Azure DevOps - pikeun pamundut ngagabung jeung ngadorong ka master, generasi dokuméntasi - pikeun push ka master.

Kahiji, hayu urang nyetél tugas ngawangun kode ku nambahkeun aturan nu seuneu ngan dina pamundut ngahiji:

build job:
  # snip
  only:
    - merge_request

Ayeuna hayu urang nyetél tugas bungkusan pikeun api kana pamundut gabungan sareng tambahkeun komitmen ka master:

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

Sakumaha anjeun tiasa tingali, sagalana geus basajan tur lugas.

Anjeun oge tiasa nyetel tugas ka seuneu ngan lamun hiji pamundut ngahiji dijieun kalawan target husus atawa cabang sumber:

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

Dina kaayaan, anjeun tiasa nganggo variabel didaptarkeun di dieu; aturan rules teu cocog jeung aturan only/except.

Ngonpigurasikeun nyimpen artefak

Dina hiji tugas build job urang bakal ngawangun artefak anu tiasa dianggo deui dina tugas-tugas salajengna. Jang ngalampahkeun ieu, anjeun kedah nambihan jalur kana konfigurasi tugas, file anu anjeun kedah simpen sareng dianggo deui dina tugas di handap ieu, kana konci artifacts:

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

Jalur ngadukung wildcards, anu pasti ngajantenkeun aranjeunna langkung gampang diatur.

Upami tugas nyiptakeun artefak, maka unggal tugas anu salajengna tiasa ngaksésana - aranjeunna bakal ayana sapanjang jalur anu sami sareng akar gudang anu dikumpulkeun tina tugas aslina. Artefak oge sadia pikeun diundeur dina loka.

Ayeuna urang boga kerangka konfigurasi siap (jeung diuji), urang bisa neruskeun sabenerna nulis Aksara keur tugas.

Urang nulis naskah

Panginten, sakali waktos, dina galaksi anu jauh, jauh, ngawangun proyék (kaasup anu aya dina .net) tina garis paréntah éta nyeri. Ayeuna anjeun tiasa ngawangun, nguji sareng nyebarkeun proyék dina 3 tim:

dotnet build
dotnet test
dotnet pack

Alami, aya sababaraha nuansa alatan nu urang bakal ngahesekeun paréntah rada.

  1. Kami hoyong ngawangun pelepasan, sanés ngawangun debug, janten urang tambahkeun kana unggal paréntah -c Release
  2. Nalika nguji, urang hoyong ngumpulkeun data sinyalna kode, janten urang kedah ngalebetkeun analisa sinyalna dina perpustakaan tés:
    1. Tambahkeun pakét ka sadaya perpustakaan tés coverlet.msbuild: dotnet add package coverlet.msbuild ti folder proyék
    2. Tambahkeun ka paréntah ngajalankeun test /p:CollectCoverage=true
    3. Tambihkeun konci kana konfigurasi tugas tés pikeun kéngingkeun hasil sinyalna (tingali di handap)
  3. Nalika ngabungkus kodeu kana bungkusan nuget, setel diréktori kaluaran pikeun bungkusan: -o .

Ngumpulkeun data sinyalna kode

Saatos ngajalankeun tés, Coverlet prints ngajalankeun statistik ka 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 ngidinan Anjeun pikeun nangtukeun ekspresi biasa pikeun meunangkeun statistik, nu lajeng bisa diala dina bentuk badge a. Ekspresi biasa ditunjuk dina setélan tugas sareng konci coverage; éksprési kudu ngandung grup newak, nilai nu bakal dibikeun ka badge nu:

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

Di dieu urang meunang statistik tina garis kalawan total sinyalna garis.

Nyebarkeun bungkusan sareng dokuméntasi

Kadua tindakan dijadwalkeun pikeun tahap terakhir tina pipa - ti saprak majelis sareng tés parantos lulus, urang tiasa ngabagi kamajuan urang ka dunya.

Mimiti, pertimbangkeun nyebarkeun ka sumber pakét:

  1. Upami proyék éta henteu gaduh file konfigurasi nuget (nuget.config), jieun nu anyar: dotnet new nugetconfig

    Kanggo naon: gambar bisa jadi teu boga aksés nulis kana global (pamaké jeung mesin) konfigurasi. Dina raraga teu nyekel kasalahan, urang ngan nyieun hiji konfigurasi lokal anyar jeung digawekeun ku eta.

  2. Hayu urang tambahkeun sumber pakét anyar kana konfigurasi lokal: nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
    1. name - ngaran sumber lokal, teu kritis
    2. url - URL sumber tina panggung "Nyiapkeun akun", p. 6
    3. organization - ngaran organisasi di Azure DevOps
    4. gitlab variable - nami variabel jeung token aksés ditambahkeun kana GitLab ("Nyiapkeun rekening", p. 11). Alami, dina format $variableName
    5. -StorePasswordInClearText - hack pikeun ngaliwat kasalahan anu ditolak aksés (Abdi sanés anu munggaran ngaléngkah kana ieu rake)
    6. Upami aya kasalahan, éta tiasa mangpaat pikeun nambihan -verbosity detailed
  3. Ngirimkeun bungkusan ka sumberna: nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
    1. Urang ngirim sakabeh bungkusan tina diréktori ayeuna, jadi *.nupkg.
    2. name - ti hambalan luhur.
    3. key - garis mana wae. Dina Azure DevOps, dina Connect to feed jandela, conto sok garis az.
    4. -skipduplicate - nalika nyobian ngirim hiji pakét geus aya tanpa konci ieu, sumber bakal balik kasalahan 409 Conflict; kalawan konci, ngirim bakal skipped.

Ayeuna hayu urang nyetél kreasi dokuméntasi:

  1. Mimiti, dina gudang, dina cabang master, urang ngamimitian proyék docfx. Jang ngalampahkeun ieu, ngajalankeun paréntah ti root docfx init sareng sacara interaktif nyetél parameter konci pikeun dokuméntasi wangunan. Katerangan lengkep ngeunaan pangaturan proyék minimum di dieu.
    1. Nalika ngonpigurasikeun, hal anu penting pikeun nangtukeun diréktori kaluaran ..public - GitLab sacara standar nyandak eusi folder publik dina akar gudang salaku sumber pikeun Pages. Sabab proyék bakal lokasina dina folder nested di Repository nu - nambahkeun kaluaran ka tingkat nepi di jalur.
  2. Hayu urang nyorong perobahan ka GitLab.
  3. Tambahkeun tugas kana konfigurasi pipa pages (kecap ditangtayungan pikeun tugas penerbitan situs di GitLab Pages):
    1. Naskah:
      1. nuget install docfx.console -version 2.51.0 - masang docfx; versi dieusian pikeun mastikeun yén jalur instalasi pakét anu bener.
      2. .docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json - ngumpulkeun dokuméntasi
    2. artefak titik:

pages:
  # snip
  artifacts:
    paths:
      - public

Digression liris ngeunaan docfx

Saméméhna, nalika netepkeun up proyek, abdi nangtukeun sumber kode pikeun dokuméntasi salaku file solusi. Karugian utama nyaéta dokuméntasi ogé didamel pikeun proyék uji. Bisi ieu teu perlu, Anjeun tiasa nyetel nilai ieu titik metadata.src:

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

  1. metadata.src.src: "../" - urang balik hiji tingkat nepi relatif ka lokasi docfx.json, sabab dina pola, milarian tangkal diréktori henteu jalan.
  2. metadata.src.files: ["**/*.csproj"] - pola global, urang ngumpulkeun sakabeh C # proyék ti sakabéh directories.
  3. metadata.src.exclude: ["*.tests*/**"] - pola global, ngaluarkeun sagalana ti folder kalawan .tests Dina judulna

Subtotal

Konfigurasi saderhana sapertos kitu tiasa didamel ngan ukur satengah jam sareng sababaraha cangkir kopi, anu bakal ngamungkinkeun anjeun mariksa kodeu diwangun sareng tés lulus, ngawangun pakét énggal, ngapdet dokuméntasi sareng mangga panon kalayan éndah. badges dina README proyék kalawan unggal pamundut ngagabung jeung ngirim ka master.

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

Diomongkeun badges

Kusabab aranjeunna, barina ogé, sadayana dimimitian!

Badges sareng status pipa sareng sinyalna kode sayogi di GitLab dina setélan CI/CD dina blok pipa Gtntral:

Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

Kuring dijieun badge kalawan tumbu ka dokuméntasi dina platform nu shields.io - sagalana geus rada lugas aya, anjeun bisa nyieun badge sorangan sarta nampa eta ngagunakeun pamundut a.

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

Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

Azure DevOps Artefak ogé ngamungkinkeun anjeun nyiptakeun lencana pikeun pakét sareng versi panganyarna. Jang ngalampahkeun ieu, dina sumber dina situs Azure DevOps, anjeun kedah klik Jieun badge pikeun pakét anu dipilih sareng salin markup markup:

Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

Pituduh ka CI / CD di GitLab pikeun (ampir) pamula mutlak

Nambihan kageulisan

Nyorot Fragmen Konfigurasi umum

Nalika nyerat konfigurasi sareng milarian dokuméntasi, kuring mendakan fitur anu pikaresepeun tina YAML - reusing fragments.

Sakumaha anjeun tiasa tingali tina setélan tugas, aranjeunna sadayana peryogi tag windows di runner, sarta dipicu nalika pamundut ngahiji dikirim ka master / dijieun (iwal dokuméntasi). Hayu urang tambahkeun ieu kana sempalan anu bakal kami nganggo deui:

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

Sareng ayeuna urang tiasa nyelapkeun sempalan anu dinyatakeun sateuacana dina pedaran tugas:

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

Ngaran fragmen kudu dimimitian ku titik, ku kituna teu bisa diinterpretasi salaku tugas.

Vérsi pakét

Nalika nyieun pakét, kompiler mariksa saklar garis paréntah, sareng upami henteuna, file proyék; lamun manggihan titik Vérsi, nyokot nilaina salaku versi pakét keur diwangun. Tétéla yén pikeun ngawangun pakét sareng vérsi énggal, anjeun kedah ngapdet dina file proyék atanapi lulus salaku argumen baris paréntah.

Hayu urang tambahkeun hiji deui Wishlist - hayu nu minor dua angka dina versi jadi taun sarta tanggal ngawangun pakét, sarta tambahkeun versi prerelease. Tangtosna, anjeun tiasa nambihan data ieu kana file proyék sareng pariksa sateuacan unggal kiriman - tapi anjeun ogé tiasa ngalakukeun éta dina pipa, ngumpulkeun versi pakét tina kontéks sareng ngalangkungan argumen baris paréntah.

Hayu urang satuju yén lamun pesen commit ngandung garis kawas release (v./ver./version) <version number> (rev./revision <revision>)?, teras urang bakal nyandak versi pakét tina garis ieu, nambihanana sareng tanggal ayeuna sareng lulus salaku argumen pikeun paréntah dotnet pack. Dina henteuna garis, urang ngan saukur moal ngumpulkeun pakét.

Skrip di handap ieu ngarengsekeun masalah ieu:

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

Nambahkeun naskah kana tugas pack and deploy job sarta nitenan rakitan bungkusan mastikeun ayana string dibikeun dina pesen commit.

dina total

Saatos nyéépkeun kira-kira satengah jam atanapi sajam kanggo nyerat konfigurasi, debugging dina powershell lokal sareng, sigana, sababaraha peluncuran anu gagal, kami ngagaduhan konfigurasi anu saderhana pikeun ngotomatisasi tugas rutin.

Tangtosna, GitLab CI / CD langkung luas sareng multifaceted tibatan anu sigana saatos maca pituduh ieu - éta henteu leres pisan. Malah aya Auto DevOps nyaétanyanggakeun

otomatis ngadeteksi, ngawangun, nguji, nyebarkeun, sareng ngawas aplikasi anjeun

Ayeuna rencanana nyaéta ngonpigurasikeun pipa pikeun nyebarkeun aplikasi ka Azure, nganggo Pulumi sareng otomatis nangtukeun lingkungan target, anu bakal dibahas dina tulisan salajengna.

sumber: www.habr.com

Tambahkeun komentar