9-bo‘lim
Artefaktlar va qurish natijalari
upload-artifact va download-artifact, joblar orasida fayl uzatish, saqlash muddati va artefakt bilan keshning farqi.
Ushbu bo‘lim mundarijasi
Job tugagach, uning mashinasi o'chiriladi va barcha fayllar yo'qoladi. Qurilgan fayl, test hisoboti yoki ekran surati kerak bo'lsa - ularni artefakt sifatida saqlash kerak.
Eng sodda misol #
name: Qurish
on: push
jobs:
qurish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- run: npm ci
- run: npm run build
- name: Natijani saqlash
uses: actions/upload-artifact@v4
with:
name: sayt
path: dist/
Ishga tushirish tugagach, uning sahifasida Artifacts bo'limi paydo
bo'ladi va sayt nomli arxivni yuklab olish mumkin.
Joblar orasida fayl uzatish #
Artefaktning asosiy vazifasi - bir jobda qurilgan narsani boshqasiga berish:
jobs:
qurish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run build
- uses: actions/upload-artifact@v4
with:
name: sayt
path: dist/
retention-days: 7
sinov:
needs: qurish
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: sayt
path: dist/
- name: Nima kelganini ko'rish
run: ls -la dist/
Har bir jobda qaytadan qurish - vaqtni behuda sarflash. Undan ham yomoni: sinovdan o'tgan fayl bilan serverga ketadigan fayl boshqa bo'lishi mumkin.
To'g'ri tartib: bir marta quring, artefakt qiling, keyin o'sha aniq nusxani sinang va o'sha nusxani chiqaring.
Artefakt va kesh - chalkashtirmang #
| Artefakt | Kesh | |
|---|---|---|
| Maqsadi | Natijani saqlash va berish | Ishni takrorlamaslik |
| Tarkibi | Qurilgan fayl, hisobot, jurnal | Bog'liqliklar, oraliq fayllar |
| Yo'qolsa | Natija yo'qoladi - muammo | Hech narsa - qaytadan yuklanadi |
| Ko'rinishi | Ishga tushirish sahifasida, yuklab olinadi | Ko'rinmaydi, avtomatik ishlaydi |
| Kim o'qiydi | Odam va keyingi joblar | Faqat quvurning o'zi |
Sodda qoida: natija - artefakt, oraliq ish - kesh.
Foydali sozlamalar #
- uses: actions/upload-artifact@v4
with:
name: hisobot-${{ matrix.node }}
path: |
natijalar/
qamrov/
!natijalar/vaqtinchalik/
retention-days: 14
if-no-files-found: error
compression-level: 9
| Sozlama | Nima qiladi |
|---|---|
name | Artefakt nomi - matritsada har biri boshqacha bo'lsin |
path | Bir nechta yo'l; ! bilan istisno qilinadi |
retention-days | Saqlash muddati (1-90 kun) |
if-no-files-found | warn (sukut), error yoki ignore |
compression-level | 0-9; katta fayllar uchun yuqori qiymat |
Matritsadagi uchta job bir xil name: hisobot bilan yuklasa, to'rtinchi
versiyada xato chiqadi - bir xil nom ikki marta ishlatib bo'lmaydi.
Nomga matritsa qiymatini qo'shing:
name: hisobot-${{ matrix.os }}-${{ matrix.node }}
Keyin ularni bitta jobga yig'ib olish mumkin:
- uses: actions/download-artifact@v4
with:
pattern: hisobot-*
merge-multiple: true
path: barcha-hisobotlar/
Xato bo'lganda ham saqlash #
Eng kerakli artefakt - yiqilgan testning jurnali. Lekin sukut bo'yicha qadam qizil bo'lsa, keyingilari ishlamaydi:
- name: Testlar
run: npm test
- name: Jurnalni saqlash
if: always()
uses: actions/upload-artifact@v4
with:
name: test-jurnali
path: |
jurnallar/
ekran-suratlari/
if-no-files-found: ignore
if: always() bo'lmasa, aynan xato bo'lgan paytda hech narsa
saqlanmaydi - bu eng ko'p uchraydigan sozlash xatosi.
Saqlash chegaralari #
| Chegara | Qiymat |
|---|---|
| Sukutdagi saqlash muddati | 90 kun (sozlamalarda o'zgartiriladi) |
| Maksimal muddat | 90 kun (jamoat repozitoriylarida) |
| Bepul joy | Ochiq repozitoriylarda cheksiz |
| Yopiq repozitoriyda | Hisobga kiritiladi - joy sarfi hisoblanadi |
Artefakt ochiq repozitoriyda hamma uchun yuklab olinadi - hatto muallifi bo'lmaganlar uchun ham.
path: . yoki path: ./ deb yozish xavfli: unga .env, sozlama
fayllari va hatto .git papkasi ham tushadi. Har doim aniq papkani
ko'rsating:
| Xavfli | Xavfsiz |
|---|---|
path: . | path: dist/ |
path: ./** | path: natijalar/*.xml |
Sir tushib qolsa - uni darhol almashtiring: artefaktni o'chirish yetarli emas, u allaqachon yuklab olingan bo'lishi mumkin.
Artefaktlarni tozalash #
Eski artefaktlar joy egallaydi. Ularni jadval bo'yicha tozalash mumkin:
name: Eski artefaktlarni tozalash
on:
schedule:
- cron: '0 2 * * 0'
permissions:
actions: write
jobs:
tozalash:
runs-on: ubuntu-latest
steps:
- name: 14 kundan eskisini o'chirish
uses: actions/github-script@v7
with:
script: |
const chegara = Date.now() - 14 * 24 * 60 * 60 * 1000;
const javob = await github.rest.actions.listArtifactsForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
per_page: 100,
});
for (const a of javob.data.artifacts) {
if (new Date(a.created_at).getTime() < chegara) {
await github.rest.actions.deleteArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: a.id,
});
console.log('o\'chirildi: ' + a.name);
}
}
Bu yerda permissions: actions: write majburiy - usiz API o'chirishga
ruxsat bermaydi. Ruxsatlar haqida 19-bo'limda batafsil gaplashamiz.
- Qurish natijasini artefakt sifatida saqlang va uni brauzerdan yuklab oling.
retention-days: 5qo'yib, artefakt sahifasida muddat ko'rsatilishini tekshiring.- Ikkinchi job qo'shib, artefaktni
download-artifactbilan oling valsqiling. - Artefaktsiz uzatishga urinib ko'ring - ikkinchi jobda fayl yo'qligini ko'ring.
- Matritsada uchta job uchun bir xil nom bering va chiqqan xatoni o'qing.
- Nomga matritsa qiymatini qo'shib, xatoni tuzating.
patternvamerge-multiplebilan barcha hisobotlarni bitta jobga yig'ing.- Testni ataylab yiqitib,
if: always()siz jurnal saqlanmasligini ko'ring. if: always()qo'shib, farqni tekshiring.- Artefakt va kesh farqini o'z so'zingiz bilan jadval qilib yozing.
Xulosa #
- Job tugagach mashina o'chadi - saqlanishi kerak bo'lgan hamma narsa artefakt bo'lishi kerak.
actions/upload-artifactsaqlaydi,actions/download-artifactqaytarib beradi.- Artefakt - joblar orasida fayl uzatishning yagona ishonchli yo'li.
- Qoida: bir marta quring, keyin o'sha aniq nusxani sinang va chiqaring.
- Artefakt - natija, kesh - oraliq ish; keshning yo'qolishi muammo emas, artefaktniki muammo.
- Matritsada artefakt nomlari takrorlanmasligi kerak - nomga matritsa qiymatini qo'shing.
patternvamerge-multiplebir nechta artefaktni bitta joyga yig'adi.- Yiqilgan testning jurnalini saqlash uchun
if: always()shart. path: .yozmang - unga.envva boshqa sirlar tushishi mumkin.- Eski artefaktlarni jadval bo'yicha tozalash mumkin; buning uchun
actions: writeruxsati kerak.
Keyingi bo'limda quvur natijasini PR ga bog'laymiz: holat tekshiruvlari va tarmoq himoyasi.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.