משימה 2: ה‑pipeline, ריק
במשימה הזאת כותבים שלושה קובצי workflow, אחד לכל אירוע:
| Workflow | רץ על | התפקיד שלו |
|---|---|---|
| Branch | push ל‑topic branch | הלולאה של המפתח עצמו: משוב מהיר תוך כדי עבודה; הוא לא חוסם כלום |
| Pull request | pull request ל‑main, וכל commit חדש בו | השער: ה‑checks שלו והאישור מחליטים אם שינוי מגיע ל‑main |
| Merge | merge לתוך main | delivery: מה שעבר את השער נעשה image ועולה ל‑deployment |
- ה‑workflow של ה‑pull request הוא השער היחיד. ה‑workflow של ה‑branch רץ בין אם בסוף נפתח pull request ובין אם לא.
- אף אחד לא עושה push ל‑
mainאחרי שמשימה 3 מגינה עליו: הכתיבות היחידות ל‑mainהן merges של pull requests מאושרים. GitHub רושם merge כ‑push, ולכן ה‑workflow של ה‑merge אומרon: pushל‑main. - ה‑workflow של ה‑merge לא מריץ tests שוב: ה‑pull request כבר בדק את הקוד הממוזג. הוא בודק רק שה‑deployment עובד.
אף אחד מהם עוד לא עושה עבודה אמיתית:
- כל job רק מדפיס מה הוא יעשה.
- לומדים איזה אירוע מריץ אילו jobs, ובאיזה סדר, כל עוד ה‑jobs לוקחים שניות.
- משימות מאוחרות יותר מחליפות placeholder אחד בכל פעם בעבודה אמיתית.
רענון על workflows (באנגלית): GitHub Actions Workflows: the Structure of the File.
כתבו את ה‑workflow של ה‑branch
-
.github/workflows/branch.yml, on: pushלכל branch חוץ מ‑main. - Jobs:
lint, unit-tests. TODO: הקובץ.
כתבו את ה‑workflow של ה‑pull request
-
.github/workflows/pr.yml, on: pull_requestל‑main. - Jobs:
lint, unit-tests, integration-tests, security, image-build. -
needs:קובע את הסדר ביניהם: TODO: מי מחכה למי, והגרף שזה מצייר.
כתבו את ה‑workflow של ה‑merge
-
.github/workflows/merge.yml, on: pushל‑main: merge, ממשימה 3. - Jobs:
image-push, deploy, smoke-test, בשרשרת שלneeds:.-
image-pushבונה את ה‑image מה‑commit הממוזג ומתייג אותו ב‑SHA שלו. -
smoke-testקורא לאפליקציה שעלתה: GET /healthz, ואז ספר אחד נוצר, נקרא ונמחק.
-
עשו push ל‑branch, וקראו את ה‑run שלו
- פתחו issue, "Try the pipeline": נניח שהוא #3.
- צרו את ה‑branch שלו,
ci/3-try-the-pipeline, כמו ש התוכנית קוראת ל‑branches; שנו שורה, עשו commit ו‑push. - רק ה‑workflow של ה‑branch רץ. TODO: מה מראה הלשונית Actions.
פתחו pull request, וקראו את ה‑run שלו
- ה‑workflow של ה‑pull request רץ; ה‑jobs שלו מופיעים כ‑checks על ה‑pull request.
- עשו לו merge: עוד שום דבר לא עוצר אתכם. משימה 3 מוסיפה את השער.
קראו את ה‑run של ה‑merge
- ה‑merge כותב ל‑
main, ולכן ה‑workflow של ה‑merge רץ. - גרף ה‑jobs: ה‑image, אחריו ה‑deploy, ואחריו ה‑smoke test.