YAML-аас залхсан уу? Cloudflare CI/CD дамжлагыг TypeScript кодоор бичих шинэ шийдлийг танилцууллаа
Хөгжүүлэгч бүрийн хувьд төслийнхөө автоматжуулалт, continuous integration (CI) тохиргоог хийх үед хамгийн их цаг бардаг зүйлсийн нэг бол эцэс төгсгөлгүй үргэлжлэх YAML файлууд байдаг. Зай авахад (indentation) гаргасан ганцхан алдаа, бүдэг бадаг хувьсагчийн нэрс, уян хатан бус логик, дахин дахин git push хийж байж л алдаагаа олж хардаг “CI debugging” хар дарсан зүүд шиг санагддаг үе олон.
Тэгвэл Cloudflare энэхүү өвдөлтийн цэгийг бүрмөсөн арилгах зорилготой @cloudflare/ci нэртэй цоо шинэ нээлттэй эхийн SDK-г албан ёсоор гаргаж, DevOps ертөнцөд томоохон шинэчлэл хийлээ. Одоо хөгжүүлэгчид өөрсдийн CI/CD дамжлагыг статикийн түвшинд хязгаарлагдмал YAML биш, харин бүрэн хэмжээний TypeScript кодоор бичих боломжтой болж байна.
"CI/CD дамжлага бол ердөө л нэг Workflow"
Cloudflare-ийн инженерүүд CI/CD пайплайн бүрийг өөрсдийн үүлэн дэд бүтэц дэх Durable Workflow буюу найдвартай, тасралтгүй үргэлжлэх ажлын урсгал хэмээн тодорхойлсон байна.
Шинээр гарсан @cloudflare/ci багц нь Node.js орчин дээр бус, харин Cloudflare Workers runtime дээр ажиллахаар зориулагдсан. Энэ нь таны пайплайны алхам бүрийг бие даасан, салангид төлөвтэй (checkpointed) байдлаар ажиллуулна гэсэн үг юм.
Уламжлалт CI системүүд дээр аль нэг алхамд алдаа гарахад пайплайныг бүхэлд нь эхнээс нь дахин ажиллуулж цаг алддаг байсан бол Cloudflare Workflows-ийн тусламжтайгаар зөвхөн алдаа гарсан алхмаас эхлэн төлөвийг нь (state) хадгалан дахин ажиллуулах (retry) боломжтой.
Гол боломжууд ба давуу талууд
1. Бүрэн төрөлжсөн (Typesafe) уян хатан логик
TypeScript ашигласнаар хөгжүүлэгчид IDE дээрээ autosuggestion, linting, code navigation болон static type checking-ийн давуу талыг бүрэн эдэлнэ. Хэрэв пайплайн дотор тусгай нөхцөл (conditional logic), давталт (loops), эсвэл гуравдагч талын сангууд дуудах шаардлага гарвал YAML-ийн төвөгтэй hack ашиглах шаардлагагүй, ердийн JS/TS функц байдлаар шийдэх боломжтой.
2. Зэрэгцээ ажиллагаа (Concurrency) ба Promise.all()
Пайплайны даалгавруудыг зэрэгцээ ажиллуулахын тулд ямар нэгэн тусгай тохиргоо бичих шаардлагагүй. Хөгжүүлэгчдэд танил Promise.all() бүтцийг ашиглан lint, test, typecheck, build гэх мэт үе шатуудыг нэгэн зэрэг явуулж, бүгд амжилттай дууссаны дараа deploy шат руу шилжих логикийг маш цэвэрхэн бичиж болно.
3. Sandbox Containers ба R2 Caching
Бүх тушаалууд тусгаарлагдсан Sandbox контейнер дотор ажиллана. Хамгийн том асуудал болох хамаарлуудыг (dependencies) татах процессыг Cloudflare R2 bucket-д файлын системийн snapshot хэлбэрээр кешлэх тул дараа дараагийн ажиллагаанууд асар хурдан явагдана.
Бодит жишээ: YAML-ийн оронд TypeScript
Дараах жишээнд танил workflow ямар авсаархан, ойлгомжтой харагдахыг харж болно:
import { pipeline, step } from "@cloudflare/ci";
export default pipeline(async ({ run }) => {
// 1. Dependency-үүдийг суулгаж кешлэх
const env = await run("npm install", { cache: "node_modules" });
// 2. Зэрэгцээгээр тест болон линт ажиллуулах
await Promise.all([
run("npm run lint", { from: env }),
run("npm run test", { from: env }),
run("npm run typecheck", { from: env }),
]);
// 3. Бүх шалгуур давагдсан үед Deploy хийх
await run("npm run deploy", { from: env });
});
YAML дээр олон арван мөр болдог матрицын тохиргоо, нөхцөлт алхмуудыг энд бидний сайн мэдэх цэвэр кодоор шийдэж байна.
Хөгжүүлэгчдийн экосистемд үзүүлэх нөлөө
Энэхүү алхам нь "Infrastructure as Code" (IaC) үзэл баримтлалыг дараагийн шатанд гаргаж, CI/CD-г зүгээр нэг файл тохиргоо биш, программ хангамжийн бүрэн хэсэг болгон харж эхэлсний илрэл юм.
Хэдийгээр эхний хувилбар нь Cloudflare-ийн Artifacts, Workers, R2 зэрэг дэд бүтцүүдтэй нягт уялдаатай ажиллахаар зохиогдсон ч гэлээ Apache 2.0 нээлттэй лицензээр нийтлэгдсэн тул цаашид GitHub Actions эсвэл бусад платформууд ч үүнтэй төстэй програмчлагддаг CI загварт шилжих замыг нээж өглөө.
Хэрэв та өдөр тутмын төслүүд дээрээ YAML-тай зууралдахаас залхаж байсан бол Cloudflare-ийн энэхүү шинэ хандлага нь бидний автоматжуулалт бичих ирээдүйн чиг хандлагыг тодорхойлох чухал эргэлтийн цэг байж болох юм.
Эх сурвалж: InfoQ, Cloudflare Engineering Announcement
Сэтгэгдэл
Ачаалж байна...