Jenkins pipelines, drawn to scale.پایپلاینهای جنکینز، با مقیاس دقیق.
Two tiny declarative pipelines you can read in a minute: three stages that pass a value from one to the next through env, and a twin that polls Git every two minutes. Run one in the simulator below, then in your own Jenkins.دو پایپلاین declarative کوچک که در یک دقیقه خوانده میشوند: سه مرحله که مقداری را از طریق env به مرحلهٔ بعد میدهند، و همزادی که هر دو دقیقه گیت را بررسی میکند. اول در شبیهساز پایین و بعد در جنکینز خودتان اجرایش کنید.
Press Build Now. Watch the stage view.«Build Now» را بزنید. نمای مراحل را تماشا کنید.
A faithful replay of what Jenkins prints for these files, with Groovy's own number rules. Change the inputs: try 7 and 0 to see Groovy's / return a decimal.بازپخش دقیق خروجی جنکینز برای همین فایلها با قواعد عددی خود Groovy. ورودیها را عوض کنید: ۷ و ۰ را امتحان کنید تا ببینید / در Groovy عدد اعشاری برمیگرداند.
Parameters (demo)
Build History
| Addition | Division | Final Result | |
|---|---|---|---|
| Average stage times: | 212ms | 148ms | 96ms |
Every line, annotated.تکتک خطوط، با توضیح.
Hover a note to highlight its lines.روی هر یادداشت بروید تا خطوطش برجسته شود.
pipeline · agent any
Declarative syntax. agent any runs on any available executor, including the built-in node on a fresh install.سینتکس declarative. agent any روی هر اجراکنندهٔ آزادی اجرا میشود، حتی نود داخلی در نصب تازه.
triggers { pollSCM }
Only in jenkinsfile123. Jenkins checks Git on a cron schedule, every 2 minutes here, and builds when something changed.فقط در jenkinsfile123. جنکینز طبق زمانبندی کرون (اینجا هر ۲ دقیقه) گیت را بررسی میکند و اگر تغییری بود میسازد.
stage('Addition') · script { }
def variables and arithmetic need a script block inside declarative steps.متغیرهای def و محاسبات داخل گامهای declarative به بلوک script نیاز دارند.
env.SUM = sum.toString()
Local def variables die with their stage. env survives across stages, but only stores strings, so convert back with toInteger().متغیرهای محلی def با پایان مرحله از بین میروند. env بین مراحل میماند اما فقط رشته نگه میدارد؛ پس با toInteger() برگردانید.
sum / 2
Groovy's / on integers returns a BigDecimal: 8 / 2 is 4, 7 / 2 is 3.5. Use intdiv() for integer division./ در Groovy روی اعداد صحیح BigDecimal برمیگرداند: 8 / 2 میشود 4 و 7 / 2 میشود 3.5. برای تقسیم صحیح از intdiv() استفاده کنید.
Two files, one difference.دو فایل، یک تفاوت.
| Jenkinsfile | jenkinsfile123 | |
|---|---|---|
| Starts onشروع با | Manual “Build Now” (or a webhook you add)«Build Now» دستی (یا وبهوکی که اضافه کنید) | pollSCM '*/2 * * * *' + manual+ دستی |
| Values passed viaانتقال مقدار با | env.SUM → env.R | env.TOTAL_SUM → env.RESULT |
| Stagesمراحل | Addition → Division → Final Result | |
| Outputخروجی | The sum is: 8 · The division result is: 4 · The final result is: 4 | |
From zero to a green build.از صفر تا یک بیلد سبز.
No Jenkins yet? Start one locally with Docker, then point a Pipeline job at this repo.جنکینز ندارید؟ با داکر یکی محلی راه بیندازید و بعد یک Pipeline job را به این مخزن وصل کنید.
New Item → Pipeline
Give the job a name and choose Pipeline.یک نام بدهید و Pipeline را انتخاب کنید.
Pipeline script from SCM
SCM: Git. Repository URL: https://github.com/mrzroot/jenkins.gitSCM را Git بگذارید. آدرس مخزن: https://github.com/mrzroot/jenkins.git
Script Path
Jenkinsfile orیا jenkinsfile123 for the polling version. Branch: */main. برای نسخهٔ پولینگ. شاخه: */main.
Build Now
Open Console Output: you should see 8, 4 and 4, then Finished: SUCCESS.Console Output را باز کنید: باید ۸، ۴ و ۴ و سپس Finished: SUCCESS را ببینید.
$ docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home --name jenkins jenkins/jenkins:ltsThen open http://localhost:8080 and unlock it with docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword. The suggested plugins include Pipeline and Git.سپس http://localhost:8080 را باز کنید و با docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword قفلش را باز کنید. افزونههای پیشنهادی Pipeline و Git را دارند.
Field notes.یادداشتهای میدانی.
Why does it store numbers in env as strings?چرا عددها را بهصورت رشته در env ذخیره میکند؟
Jenkins environment variables are always strings. The example shows the round trip: toString() when saving, toInteger() when reading in the next stage.متغیرهای محیطی جنکینز همیشه رشتهاند. این مثال رفتوبرگشت را نشان میدهد: toString() هنگام ذخیره و toInteger() هنگام خواندن در مرحلهٔ بعد.
Should I poll every 2 minutes in production?در پروداکشن هر ۲ دقیقه پول کنم؟
Prefer a webhook from GitHub. If you must poll, use H/2 * * * *: the H spreads jobs across the interval so they don't all hit Git at once.وبهوک گیتهاب بهتر است. اگر مجبور به پولینگ هستید از H/2 * * * * استفاده کنید؛ H جابها را در بازه پخش میکند تا همه همزمان به گیت فشار نیاورند.
Do I need the script { } blocks?بلوکهای script { } لازماند؟
For def, arithmetic and assigning env.X inside declarative steps, yes. For bigger logic, move it into a shared library or a function outside the pipeline block.برای def، محاسبات و مقداردهی env.X داخل stepsِ declarative، بله. منطق بزرگتر را به یک shared library یا تابعی بیرون از بلوک pipeline ببرید.
Can I use these files in my own projects?میتوانم این فایلها را در پروژههای خودم استفاده کنم؟
Yes. The repository is MIT-licensed. Copy, adapt and ship.بله. مخزن مجوز MIT دارد؛ کپی کنید، تغییر دهید و استفاده کنید.
Is the simulator running real Jenkins?شبیهساز جنکینز واقعی اجرا میکند؟
No. It replays Jenkins's console format in JavaScript, applying Groovy's division rules to your inputs. Nothing leaves your browser.نه. قالب کنسول جنکینز را با جاوااسکریپت بازپخش میکند و قواعد تقسیم Groovy را روی ورودیهای شما اعمال میکند. چیزی از مرورگرتان خارج نمیشود.