צור צינור בנייה עם Travis CI

1. הקדמה

בפיתוח תוכנה מודרני, המונח צנרת מתרגל הרבה. אבל מה זה?

באופן כללי, צינור בנייה הוא קבוצה של צעדים אוטומטיים המעבירים קוד מפיתוח לייצור.

צינורות בנייה נהדרים ליישום תהליכי עבודה של אינטגרציה רציפה עבור תוכנה. הם מאפשרים לנו לבנות שינויים קטנים יותר בתדירות גבוהה יותר, במטרה למצוא באגים מוקדם יותר ולהפחית את השפעתם.

במדריך זה נבחן בניית צינור בנייה פשוט באמצעות Travis CI.

2. שלבים בצינור בנייה

צינור בנייה יכול לכלול שלבים רבים ושונים, אך לכל הפחות, עליו לכלול:

  • קוד קומפילציה: במקרה שלנו, זה אומר לאסוף את קוד המקור של Java לקבצי מחלקה
  • ביצוע מבחנים: כמו להריץ מבחני יחידות ואולי מבחני שילוב
  • פריסת חפצים: אריזה של קוד שמצוי בחפצים, נגיד לתוך קַנקַן קבצים, ופריסתם

אם יישום משתמש בטכנולוגיות שונות, אז ניתן לכלול צעדים נוספים בצינור הבנייה. לדוגמה, ייתכן שיהיה לנו שלב נוסף שמצמצם קבצי JavaScript או מפרסם תיעוד API מעודכן.

3. מהו Travis CI?

לצורך צינור בניית המדגם שלנו, נשתמש Travis CI, כלי אינטגרציה רציף מבוסס ענן.

יש לזה מספר תכונות שהופכות אותו לבחירה מצוינת להתחלה עם צינורות בנייה:

  • משתלב במהירות עם כל מאגר GitHub ציבורי
  • תומך בכל שפת תכנות מרכזית
  • מתפרס על מספר פלטפורמות ענן שונות
  • מציע מגוון של כלים להעברת הודעות

ברמה גבוהה, זה עובד על ידי ניטור מאגר GitHub עבור התחייבויות חדשות.

כאשר מתחייבת התחייבות חדשה, היא מבצעת את השלבים של צינור הבנייה כפי שהוגדר בקובץ תצורה (עוד על כך בהמשך). אם צעד כלשהו נכשל, הצינור מסתיים והוא יודיע לנו על כך.

מחוץ לקופסה, Travis CI דורש מעט מאוד תצורה. התצורה הנדרשת היחידה היא ציון שפת התכנות.

אנחנו תמיד יכולים לספק יותר תצורה כדי להתאים את הצינור שלנו במידת הצורך. לדוגמא, אנו יכולים להגביל את מה שהסניפים מפעילים בנייה, להוסיף צעדים נוספים לצינור ועוד.

3.1. גרסאות בחינם ובתשלום

חשוב לדעת כי ל- Travis CI יש כיום 2 הצעות: גרסה בחינם ובתשלום.

הגרסה החינמית, המסומנת על ידי .org שם תחום, מציע יכולות מלאות לכל מאגר GitHub ציבורי. אין מגבלות על מספר המבנים או המאגרים, אם כי יש מגבלות על משאבים שהוטלו כאשר הצינור פועל.

הגרסה בתשלום, המשתמשת ב- .com שם דומיין, נדרש למאגרים פרטיים של GitHub. הוא מציע גם יותר בנייה מקבילה ודקות בנייה ללא הגבלה בהשוואה לתוכנית החינמית. יש תקופת ניסיון בחינם עבור 100 המבנים הראשונים לבדיקת הגרסה בתשלום.

4. יצירת צינור בנייה עם Travis CI

לצורך הדרכה זו נשתמש בגרסה החינמית שהוזכרה לעיל. ניתן להשתמש בכל מאגר ציבורי ליצירת צינור חינמי.

כל שעלינו לעשות הוא להיכנס ל- Travis CI באמצעות חשבון GitHub שלנו ולאשר זאת:

לאחר שנתן הרשאות לחשבון GitHub שלנו, אנו מוכנים להתחיל בתצורת צינור הבנייה שלנו.

4.1. קביעת תצורה של המאגר

בתחילה, כל המאגרים הציבוריים שלנו נחשבים כלא פעילים. כדי לפתור זאת, עלינו לאפשר את המאגר שלנו מדף הגדרות החשבון.

זה מפרט את כל המאגרים הציבוריים שלנו, יחד עם כפתור להחלפה. לחיצה על כפתור ההחלפה תגדיר את Travis CI להתחיל לנטר את המאגר לאיתור התחייבויות חדשות, באמצעות ענף ברירת המחדל של לִשְׁלוֹט:

שימו לב שלכל מאגר יש גם הגדרות לַחְצָן. זה המקום בו אנו יכולים להגדיר התנהגות צינור שונה:

  • הגדר אילו אירועים מפעילים את הצינור (דחיפות, משיכת בקשות וכן הלאה)
  • הגדר משתני סביבה שיעברו לצינור
  • ביטול אוטומטי של בנייה כאשר מופעלים אירועים חדשים

עבור הדרכה זו, הגדרות ברירת המחדל יעבדו בסדר. בהמשך נראה כיצד לעקוף חלק מהתנהגות ברירת המחדל.

4.2. יצירת תצורת Travis

השלב הבא הוא ליצור קובץ חדש בשם .travis.yml בספריית השורשים של המאגר שלנו. קובץ זה מכיל את כל המידע הדרוש להגדרת צינור. ללא קובץ זה, הצינור לא יבוצע.

עבור הדרכה זו עלינו לכלול רק את התצורה המינימלית, המציינת את שפת התכנות:

שפה: java

זהו זה! מבלי לספק מידע נוסף, Travis CI יבצע צינור פשוט ש:

  • מרכיב את קוד המקור שלנו
  • מבצע את הבדיקות שלנו

ברגע שאנחנו מתחייבים ל .travis.yml קובץ Travis יתחיל את הבנייה הראשונה שלנו. כל התחייבות נוספת ל לִשְׁלוֹט ענף יפעיל בנייה נוספת. לוח המחוונים מאפשר לנו גם להפעיל את הצינור באופן ידני בכל עת מבלי לדרוש בקשת התחייבות או משיכה.

5. תצורה נוספת

בחלק הקודם ראינו ששורה אחת של תצורה היא כל מה שאנחנו צריכים כדי להפעיל את צינור הבנייה שלנו. אך מרבית הפרויקטים ידרשו תצורה נוספת בכדי להטמיע צינור משמעותי.

חלק זה מתאר כמה תצורות שימושיות יותר שאולי נרצה להוסיף לצינור שלנו.

5.1. שינוי פקודת Build המוגדרת כברירת מחדל

פקודת ברירת המחדל המשמשת לבניית פרויקטים של Maven היא:

מבחן mvn -B

אנו יכולים לשנות זאת לכל פקודה על ידי הגדרת ה- תַסרִיט הנחיה ב .travis.yml:

סקריפט: חבילת mvn -DskipTests

אפשר לשלב מספר פקודות ביחד תַסרִיט קו באמצעות && מַפעִיל.

פקודות בנייה מסוימות מורכבות ועשויות להשתרע על מספר שורות או בעלות היגיון מורכב. לדוגמה, הם עשויים לבצע פעולות שונות על בסיס משתני סביבה.

במקרים אלה, מומלץ למקם את פקודת build בתסריט עצמאי, וקרא לתסריט זה מתוך קובץ התצורה:

תסריט: ./build.sh

5.2. פריסת קוד

הגדרות ברירת המחדל לבנות עבור פרויקטים של Java פשוט קומפילציה של הקוד וביצוע בדיקות. החפצים שנוצרו (קבצי .jar וכו ') מושלכים בסוף הצינור אלא אם נפרוס אותם במקום כלשהו.

Travis CI תומך במגוון שירותים ידועים של צד שלישי. ניתן להעתיק חפצים למערכות אחסון ענן פופולריות רבות כגון אמזון S3, אחסון בענן של גוגל, בינטריי ועוד.

זה יכול גם לפרוס קוד ישירות לפלטפורמות מחשוב הענן הפופולריות ביותר כמו AWS, Google App Engine, Heroku, ורבים אחרים.

להלן תצורת דוגמה המציגה כיצד אנו יכולים לפרוס ל- Heroku. כדי ליצור מאפיינים מוצפנים, עלינו להשתמש בכלי ה- Travis CLI.

deploy: provider: heroku api_key: secure: "ENCRYPTED_API_KEY"

בנוסף, הוא מספק אפשרות פריסה כללית המאפשרת לנו לכתוב סקריפט פריסה משלנו. זה מועיל אם עלינו לפרוס חפצים למערכת של צד שלישי שאינה נתמכת באופן מקורי.

לדוגמה, נוכל לכתוב סקריפט פגז שמעתיק את החפצים בצורה מאובטחת לשרת FTP פרטי:

פריסה: ספק: סקריפט סקריפט: bash ./custom-deploy.sh

5.3. ניהול אילו ענפים מפעילים את הצינור

כברירת מחדל, הצינור יבוצע לכל התחייבות לִשְׁלוֹט. עם זאת, רוב הפרויקטים הגדולים משתמשים בסניף git כלשהו לניהול מחזורי פיתוח.

Travis CI תומך ברשימה לבנה וברשימה השחורה של ענפי git כדי לקבוע אילו התחייבויות צריכות להפעיל את הצינור.

לדוגמה, שקול את התצורה הבאה:

ענפים: רק: - שחרור - יציב למעט: - אדון - כל לילה

זה יתעלם מהתחייבויות על לִשְׁלוֹט ו לֵילִי ענפים. מתחייב ל לְשַׁחְרֵר ו יַצִיב ענפים יפעילו את הצינור. שים לב שה- רק ההנחיה תמיד קודמת ל מלבד הוֹרָאָה.

אנו יכולים גם להשתמש בביטויים רגולריים כדי לקבוע אילו ענפים מפעילים את הצינור:

סניפים: רק: - /^ פיתוח.*$/

זה יתחיל את הצינור רק עבור התחייבויות בסניפים שמתחילים עם התפתחות.

5.4. דילוג על התחייבויות ספציפיות

אנו יכולים להשתמש בהודעת git commit כדי לדלג על התחייבויות בודדות. Travis CI יבחן את המסר לדפוסים הבאים:

  • לדלג
  • לדלג

היכן נמצא אחד מהערכים הבאים:

  • ci
  • טראוויס
  • travis ci
  • travis-ci
  • טרוויסי

אם הודעת ההתחייבות תואמת את אחד הדפוסים הללו, הצינור לא יפעל.

5.5. שימוש בסביבות בנייה שונות

סביבת הבנייה המוגדרת כברירת מחדל עבור פרויקטים של Java היא אובונטו לינוקס. צינורות יכולים לבצע גם ב- Mac OSX או ב- Windows Server על ידי הוספת התצורה הבאה ל- .travis.yml:

os: osx # יכול להיות גם 'windows'

אפילו עם לינוקס, יש 3 הפצות שונות שאנחנו יכולים לבחור בהן:

מערכת הפעלה: לינוקס dist: xenial # אפשרויות אחרות הן 'אמינות' או 'מדויקות'

תיעוד פלטפורמת הבנייה מכסה את כל הסביבות הזמינות ואת ההבדלים ביניהן.

רק זכרו שאם נשנה את הפלטפורמה, ייתכן שנצטרך גם לשנות כל מותאם אישית לִבנוֹת אוֹ לפרוס סקריפטים כדי להבטיח תאימות. ישנן מספר דרכים לטפל במספר מערכות הפעלה בתצורה.

5.6. שימוש בגרסאות JDK שונות

אנו יכולים גם לבדוק מול גרסה ספציפית של ה- JDK על ידי הגדרת התצורה הבאה ב- .travis.yml קוֹבֶץ:

jdk: oraclejdk8

זכור שבסביבות בנייה שונות, אפילו הפצות לינוקס שונות, יכולות להיות גרסאות JDK שונות. עיין בתיעוד של כל סביבה כדי לראות את הרשימה המלאה של גרסאות JDK.

6. בנה מטריצות

כברירת מחדל, בכל פעם שהצינור שלנו פועל, הוא פועל כעבודה אחת. פירוש הדבר שכל שלבי הצינור מתבצעים ברצף על מכונה וירטואלית אחת עם אותן הגדרות.

אך אחת התכונות הנהדרות של Travis CI היא היכולת ליצור מטריצה ​​לבנות. זה מאפשר לנו להפעיל מספר עבודות עבור כל התחייבות, תוך שימוש בערכים שונים עבור חלק מההגדרות שראינו קודם.

לדוגמה, אנו יכולים להשתמש במטריצת בנייה להפעלת הצינור שלנו גם ב- Linux וגם ב- Mac OSX, או עם JDK 8 ו- 9.

ישנן שתי דרכים ליצור מטריצות לבנות. ראשון, אנו יכולים לספק מגוון ערכים עבור אחת או יותר מתצורות השפה והסביבה שראינו קודם. לדוגמה:

שפה: java jdk: - openjdk8 - openjdk9 os: - לינוקס - osx

באמצעות גישה זו, Travis CI ירחיב באופן אוטומטי כל שילוב של תצורה ליצירת עבודות מרובות. בדוגמה שלעיל, התוצאה תהיה ארבע משרות בסך הכל.

הדרך השנייה ליצור מטריצת בנייה היא להשתמש ב- מטריצה.כלול הוֹרָאָה. זה מאפשר לנו להכריז במפורש אילו שילובים אנו רוצים להפעיל:

שפה: מטריצת Java: כוללים: - jdk: openjdk8 os: linux - jdk: openjdk9 os: osx

הדוגמה לעיל תביא לשתי עבודות.

שוב, אם אנו בונים על מערכות הפעלה מרובות, עלינו להקפיד להבטיח זאת לִבנוֹת ו פְּרִיסָה סקריפטים עובדים לכל המקרים. סקריפטים של מעטפת לא יעבדו ב- Windows, למשל. עלינו להשתמש בהצהרות מותנות נאותות לטיפול במערכות הפעלה שונות.

ישנן אפשרויות נוספות המספקות שליטה רבה יותר על אילו מקומות עבודה ליצור וכיצד לטפל בכשלים.

7. מסקנה

במאמר זה, יצרנו צינור בנייה פשוט באמצעות Travis CI. תוך שימוש בעיקר בתצורה מחוץ לקופסה, יצרנו צינור שבונה קוד ומריץ בדיקות.

ראינו גם דוגמה קטנה של מידת ההגדרה של Travis CI. זה עובד עם מגוון שפות תכנות ופלטפורמות ענן של צד שלישי. החיסרון האחד הוא שכרגע הוא עובד רק עם מאגרי GitHub.


$config[zx-auto] not found$config[zx-overlay] not found