במקור CI יועדה לשימוש בשילוב עם בדיקות יחידה אוטומטיות אשר נכתבות כחלק מפיתוח מונחה-בדיקות. תחילה הרעיון היה להריץ בדיקות יחידה כדי לוודא שכולן עברו בהצלחה לפני הגשת הקוד החדש למוקד המרכזי (ביצוע commit ל-repository). פיתוחים מאוחרים יותר של השיטה הכניסו שימוש בשרתי בנייה (build servers) אשר מריצים אוטומטית בדיקות יחידה מעת לעת או אפילו לאחר כל commit, ומדווחים על תוצאות הבדיקות למפתחים. השימוש בשרתי בנייה (אשר לא בהכרח מריצים בדיקות יחידה) היה בשימוש גם על ידי צוותי פיתוח שאינם עובדים בשיטת ה-extreme programming. כעת הרבה ארגונים אימצו את שיטת ה-CI מבלי לאמץ את כל יתר השיטות של XP.
בנוסף לבדיקות יחידה אוטומטיות, ארגונים אשר עובדים בשיטת ה-CI בדרך כלל משתמשים בשרת הבנייה על מנת ליישם תהליכים "רציפים" של בקרת איכות כללית – יחידות עבודה קטנות המיושמות לעיתים קרובות. בנוסף להרצת בדיקות יחידה ובדיקות אינטגרציה, תהליכים כאלה מריצים בדיקות סטטיות ודינמיות נוספות, מודדים את הביצועים, מפיקים דוקומנטציה מקוד המקור ומסייעים בביצוע בדיקות תוכנה ידניות. המטרה ביישום בקרת איכות רציפה כזאת היא שיפור איכות התוכנה וקיצור זמני האספקה שלה ללקוח (delivery), וזאת באמצעות החלפת השיטה המסורתית של יישום בקרת האיכות "לאחר" סיום הפיתוח. זה דומה מאוד לרעיון המקורי של ביצוע אינטגרציות תכופות על מנת להקל על תהליך האינטגרציה, אבל הפעם בהקשר של הבטחת איכות.
במסגרת אותה מתודולוגיית פיתוח תוכנה נכללת גם שיטת ה-continuous delivery (אספקה רציפה), אשר מרחיבה את שיטת ה-CI בכך שהיא מוודאת שהתוכנה כפי שהיא נמצאת ב-repository, תמיד נמצאת במצב שניתן לפרוס אותה אצל משתמשים, ובכך הופכת את תהליך פריסת התוכנה למהיר ביותר.
תאוריה.
כאשר מתכנת X ניגש להכניס שינויים בקוד, הוא מושך עותק של קוד המקור העדכני מה-repository אל תחנת העבודה שלו. ככל שעובר הזמן ומפתחים אחרים מגישים את השינויים שהם ביצעו בקוד אל ה-repository, הקוד שנמצא אצל מתכנת X מפסיק בהדרגה לשקף את הקוד שנמצא ב-repository. לא רק שהקוד שנמצא ב-repository עשוי להשתנות, אלא גם יכולים להתווסף קוד, ספריות ומשאבים אחרים חדשים אשר יוצרים תלויות (dependencies) וקונפליקטים אפשריים.
ככל שהעותק של הקוד (branch) נשאר checked out זמן רב יותר (נמצא בתחנת עבודה מסוימת מבלי שהוא הוגש חזרה ל-repository ביחד עם השינויים שבוצעו בו, או מבלי שנערכה בדיקה ועדכון אם הוכנסו שינויים בקוד המקור מאז המשיכה האחרונה של הקוד מה-repository), כך עולה הסיכוי להיווצרות קונפליקטים ובעיות אינטגרציה מרובות כאשר ינסו לשלב את הקוד הזה חזרה אל תוך ה-repository. כאשר מתכנת בא להגיש את הקוד שלו ל-repository הוא חייב קודם לעדכן את הקוד שנמצא אצלו כך שישקף את השינויים שבוצעו ב-repository מאז שהוא משך לעצמו עותק של הקוד לאחרונה. ככל שה-repository מכיל שינויים רבים יותר, כך תגדל כמות העבודה שהמתכנת יצטרך לעשות לפני שיוכל להגיש את השינויים שהוא עצמו ביצע.
בסופו של דבר ה-repository יכול להפוך לכל כך שונה מהעותק שנמצא אצל המפתח, עד שייווצר המצב שלעיתים מכונה "merge hell" או "integration hell" ("גיהנום המיזוג" או "גיהנום האינטגרציה"), בו הזמן הנדרש לצורך ביצוע אינטגרציה עולה על הזמן שלקח לעשות את השינויים המקוריים. במקרה הגרוע ביותר, יכול להיות שהמפתח יאלץ לזרוק את השינויים שהוא ביצע ולעשות את כל העבודה מחדש.
עבודה בשיטת ה-continuous integration דואגת לבצע אינטגרציות מוקדמות ותכופות על מנת להימנע ממלכודות ה-integration hell. מטרת השיטה להפחית את כמות העבודה שיש לבצע מחדש (שכתוב הקוד על מנת להתאים אותו לשינויים שמפתחים אחרים עשו), ובכך להקטין את העלויות והזמן שנדרש לפיתוח.
שיטת עבודה משלימה ל-CI דורשת מכל מתכנת לבצע בנייה מלאה של הפרויקט, להריץ בדיקות יחידה (ושהן יעברו), לפני שהוא מגיש את העבודה שלו ל-repository. בדיקות אינטגרציה בדרך כלל מורצות אוטומטית על שרת ה-CI כאשר הוא מזהה שבוצע commit חדש. על המפתחים להתחיל את יום העבודה שלהם בעדכון הפרויקט שעל המחשב שלהם מה-repository, בצורה כזאת הם יישארו מעודכנים.
א-זובארה
אַ-זֻּבַּארַה (ערבית الزبارة) היא אתר ארכאולוגי בצפון-מערב קטר, השוכן כקילומטר מחופו של המפרץ הפרסי. באתר שכנה עיר המסחר א-זובארה, אשר הגיעה לשיאה סביב 1760 לערך, עד לחורבנה ב-1811. מאחר שא-זובארה חרבה וננטשה, שרד תוואי העיר והשתמר מתחת לחולות המדבר, ובשנת 2013 היא הוכרזה כאתר מורשת עולמית.
היסטוריה.
בצפונו של חצי האי קטאר נמצאו שרידי אמנות סלע ואתרי קבורה העשויים להעיד על קיומו של יישוב עונתי פרהיסטורי באזור, אולם הראיות לכך מועטות. הממצאים המוקדמים ביותר המעידים על התיישבות קבע בפנים חצי האי הם מהמאה ה-9, עת נשלט בידי העבאסים, וייתכן שעובדה זו נקשרה לסחר בפנינים. לאורך חופי חצי האי הופיע מספר ניכר של יישובים רק בין המאות ה-14 וה-18. יישובים אלה בוצרו, והם מראים כי תושביהם עסקו בדיג ובשליית פנינים. בסביבתה של מצודת א-זובארה נמצאו כפרים רבים, מאחזים ומאהלים, התואמים את ההתפתחות ההיסטורית האלה - תחילה בפנים הארץ, ולאחר מכן בקרבת החוף. א-זובארה עצמה נוסדה, ככל הנראה, במאה ה-18 כעיר חקלאית שקמה באתר בו שכן קודם לכן כפר קטן. ייסודה נזקף להגירת שבטי בני עותבה (بني عتبة) מכווית, אשר ביקשו לנצל את מרבצי הפנינים בחופי קטאר, וביצוריה מעידים על כך שיריבות שררה בינה לבין ערי חוף סמוכות. העיר התפתחה כתוצאה מזרם הגירה של סוחרים מבצרה שבעיראק ומכווית, אשר נמשכו אליה בשל מעמדה כנמל חופשי ואשר העניק להם פטור ממיסוי. בשנות ה-70 של המאה ה-18 הייתה א-זובארה לעיר הגדולה במפרץ הפרסי.
באותה עת נתגלעו מחלוקות בין בני עותבה לבין המושל הפרסי של בחריין הסמוכה, ואלה הובילו לסדרה של התנגשויות; אך ב-1783 פלשו בני עותבה לבחריין בחסותה של כווית, והגדילו את תחום השפעתם גם אליה. בני עותבה נהנו ממעמד עצמאי דה פקטו, והעבירו את נאמנותם בין עומאן, איראן ושבטים והאבים שונים מחצי האי ערב, עד שב-1811 התקיף הסולטאן של עומאן את א-זובארה ושרף אותה עד היסוד. היישוב בעיר התחדש אך היה קטן פי שלושה מזה שלפני החורבן, והעיר איבדה את בכורתה באזור. ב-1895 הייתה העיר מעורבת במאבק בין האימפריה העות'מאנית ובחריין, ובמהלכו הוטבעו 44 ספינות דאו בנמלה. עקב כך ננטשה העיר כמעט לחלוטין.
המחקר בעיר החל בראשית שנות ה-80 של המאה ה-20 ונמשך בשנים 2002-2003, אך רק כ-2.5% משטחה נחקרו. ב-2009 החל פרויקט בן עשר שנים לחקר האתר, והממצאים שנחשפו בשתי עונות החפירה הראשונות שפכו אור רב על תולדות העיר וקשריה עם סביבתה.
האתר.
חומות העיר.
לעיר שתי חומות שהשתרעו לאורך כולל של מספר קילומטרים. החומה החיצונית הקיפה א-זובארה בשיאה, ובה קבועים 22 מגדלי שמירה. החומה עשויה מאבן גיר וממלט שמקורם באלמוגים. החומה הפנימית נמוכה מהחיצונית ובה 11 מגדלים בלבד. חלק מהמגדלים שוחזר, ולפי מחקרים מאוחרים נראה כי חומות העיר היו חלק ממערך ביצורים נרחב יותר שהיקפו המדויק עדיין אינו ידוע.
המאפיינים העירוניים.
ניכר כי העיר התאפיינה בתכנון עירוני ובחלוקה לשכונות, ושכנו בה שני מתחמי ארמונות מובחנים שלצידם כיכרות נרחבות. ליד אחת הכיכרות שכן מסגד, ומחקר באחד מהארמונות גילה כי נבנה בצורת מצודה, שלה מגדלי הגנה עגולים בגובה של עד ארבעה מטרים.
בעיר נחשפו כ-500 עד 600 מבנים, ולפי הערכות יכלו אלה לשכן אוכלוסייה של כ-5,000 עד 6,000 תושבים. המבנים הנפוצים ביותר נבנו סביב חצר פנימית, וחלקם היו גדולים למדי והתאפיינו בפורטיקו ובאולם כניסה. לעיתים עוטרו הבתים בעיטורי גבס המעידים על שפע כלכלי. אחד מבתי החצר נחקר לעומק ונתגלתה בו חלוקה לאזורי רחצה, חדר ובו 20 תנורי אפייה ושטח לעיבוד דגים. ליד המבנה התגלה מתקן לייצור סילאן, ענף כלכלי שרווח בעיר. בקרבת החוף התגלו ראיות למבנים בעלי אופי ארעי יחסית, אשר נבנו מעץ וכוסו בכפות תמרים. ייתכן שאלה שמשו שולי פנינים ודייגים. מבנים ארעיים דומים, כמו גם אוהלים, אפיינו את הבנייה בעיר בתקופה שקדמה לתור הזהב שלה במאה ה-18. בתי הקברות של העיר שכנו מחוץ לחומות.
הנמל והשוק.
בליטה בחומת העיר הגנה על הנמל מצפון, וזו חדרה מרחק של כחמישים מטרים לתוך מי הים והסתיימה במגדל עגול. במי הנמל עדיין שוכנים שרידיהן של ספינות הדאו של העיר אשר הוטבעו בשנת 1895. לצד הנמל שכן שוק ובו מבני אחסנה שבהם התגלו עדויות לחיי המסחר, דוגמת כדים, כלי חרסינה כחולה, חרוזי זכוכית, משקולות עשויות המטיט ששימשו צוללנים, וכן עדויות לתעשיית ברזל. עדויות נוספות לחיי המסחר בעיר התגלו בערימות פסולת שבהם אותרו כמויות ניכרות של פירות וזרעים מהודו ומאיראן.
מצודת מורייר.
המצודה הקטנה הוקמה בשנת 1768 על גבעה וצפתה אל העיר. היא נהרסה בשנות ה-60 של המאה ה-20 וכל ששרד ממנה הוא מספר בארות, בור מים גדול, ומספר מתחמים מגודרים סמוכים שייתכן ושימשו למשק החי. תעלה ברוחב של עשרים מטרים ובעומק של מטר וחצי עד שני מטרים הובילה ממצודת מורייר אל הים והקלה את התחבורה אל המצודה. אורכה של התעלה עמד על כ-1.76 קילומטר, אך לפי תצלום לוויין ייתכן שהייתה ארוכה בכ-300 מטרים נוספים. לאורך התעלה הוקמו בשלב מאוחר יותר שני קירות מיסוך שנועדו להגן על אספקת המים אל המצודה. בקירות נקבעו מגדלים עגולים במרחקים קבועים.
מצודת א-זובארה.