שילוב מתמשך עם ג'נקינס

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

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

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

חלק זה של פרויקטים קוד פתוח של Java מציג אינטגרציה רציפה עם Jenkins, שרת אוטומציה מוביל עבור CI / CD. נתחיל בסקירה כללית של תהליך ה- CI והתקליטור, ואז נקבע פרויקט אינטרנט של Java באמצעות Maven ו- Jenkins. תלמד כיצד לבנות ולבדוק יחידה את הפרויקט ב- Jenkins עם JUnit, וכן כיצד לפתור תקלות בבניין. כמו כן, תתקין ותריץ קומץ תוספים פופולריים של Jenkins לצורך בדיקת ודיווח על ניתוח סטטי.

מבוא ל- CI / CD

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

קח דוגמה ליישום Java שנבנה באמצעות Maven. באיתור שינויים בקוד, שרת ה- CI שלך יכול להגיב על ידי ביצוע mvn clean install. בתצורת בנייה טיפוסית של Maven, היא תבצע קבוצה חדשה של בדיקות יחידה כחלק מפקודת build. בזמן שנבנה קוד המקור, השרת יכול לבצע כל מספר של פעולות נוספות:

  • מיזג את סניף התכונות שלך בחזרה לסניף הראשי או לסניף הראשי שלך לאחר שהקוד המחויב עבר את מבחן היחידה.
  • בצע ניתוח קוד סטטי, כגון כיסוי קוד, מורכבות קוד, בדיקת באגים נפוצים וכו '.
  • פרסם את חפצי הבניין שלך במאגר, כגון Artifactory או Sonatype Nexus
  • פרוס את היישום שלך לסביבת מבחני שילוב
  • ביצוע מבחני אינטגרציה
  • פרוס את היישום שלך בסביבת מבחני ביצועים
  • בצע בדיקת עומס נגד היישום שלך
  • פרוס את היישום שלך בסביבת בדיקות קבלת משתמשים (UAT)
  • פרוס את היישום שלך לייצור

שלבים אלה הם כל סוגי הפעילויות שתוכלו לבצע כחלק מתהליך CI / CD. CI כולל בדרך כלל את שלבי הבנייה והבדיקה של מחזור חיי הפיתוח, בעוד ש- CD מרחיב את התהליך הזה לפריסת חפץ בנייה לשרת לצורך בדיקה. בסביבות מסוימות, CD הולך עד ההפקה.

שילוב מתמשך נעשה בדרך כלל באמצעות כלי כמו Jenkins, Bamboo או TeamCity, המתאר את שלבי הבנייה שלך לצינור אינטגרציה. ג'נקינס הוא ככל הנראה מוצר ה- CI / CD הפופולרי ביותר, והוא משתלב היטב עם Docker.

הורד והתקן את Jenkins

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

ישנן דרכים רבות להפעיל את ג'נקינס:

  1. הורד קובץ WAR והתקן אותו על מיכל servlet במחשב המקומי שלך.
  2. הגדר מכונה וירטואלית בענן ציבורי כמו AWS ותארח שם את ג'נקינס.
  3. נצל ספק ענן של ג'נקינס כגון CloudBees.
  4. הגדר את Jenkins בהתקנת בדיקה באמצעות Docker.

אני אראה לך כיצד להתקין גם את ההתקנה המקומית וגם את התקנת הבדיקה של Docker.

הורד והתקן את Jenkins באופן מקומי

התחל בהורדת Jenkins ובחירת המהדורה לתמיכה לטווח ארוך (LTS) מדף הבית של Jenkins. מכיוון שאני ב- Mac, ההתקנה הורידה אוטומטית pkgקובץ, שהניח קובץ בתיקיה jenkins.warשלי Application/Jenkins. ניתן לפרוס את קובץ ה- WAR לכל מיכל סרוולט.

אתה גם רוצה להוריד ולהתקין את Apache Tomcat. נכון לכתיבת שורות אלה הגרסה העדכנית ביותר של Tomcat היא 8.5.4, אך אתה אמור להיות מסוגל להריץ כל גרסה עדכנית. הורד את הקובץ zipor או tar.gzדחוס אותו לכונן הקשיח. העתק את הקובץ jenkins.war webappsלתיקיה של Tomcat ואז הפעל את הקובץ bin/startup.shor bin/startup.bat. אתה יכול לבדוק שהוא פועל על ידי פתיחת הדפדפן שלכם: //localhost:8080.

כדי להפעיל את Jenkins, פתח דפדפן לכתובת URL: // localhost: 8080 / jenkins.

אתה אמור לקבל מסך שנראה כמו איור 1.

סטיבן היינס

בא, ג'נקינס יוצר סיסמא ממשל וכותב כי הן של Tomcat logs/catalina.outקובץ הרישום של ספריית הבית הבאה: .jenkins/secrets/initialAdminPassword. אחזר את הסיסמה, הזן אותה באלמנט טופס סיסמת ניהול (שמוצג באיור 1), ולחץ על המשך . תתבקש להתקין תוספים המוצעים או לבחור תוספים להתקנה. לעת עתה אני ממליץ להתקין את התוספים המוצעים.

כעת תתבקש ליצור משתמש מנהל. הזן את פרטי משתמש הניהול שלך ולחץ על שמור וסיום . לבסוף, לחץ על התחל להשתמש ב- Jenkins . כעת תראה את דף הבית של ג'נקינס, כפי שמוצג באיור 2.

סטיבן היינס

הגדר את יישום הדוגמה עם Maven

לפני שנוכל להשתמש ב- Jenkins לבניית פרויקט אינטרנט ב- Java עם Maven, עלינו להתקין את שתי הטכנולוגיות הללו. מתחת למכסה המנוע, ג'נקינס יבדוק את קוד המקור ממאגר קוד המקור לספריה מקומית ויבצע את יעדי Maven שתציין. כדי שזה יעבוד, עליך להתקין גרסה אחת או יותר של Maven, לספר לג'נקינס היכן הם מותקנים ולהגדיר את הגירסה של Maven שבה אתה רוצה שג'נקינס תשתמש בעת בניית היישום שלך.

מלוח המחוונים של ג'נקינס, לחץ על נהל ג'נקינס ובחר תצורת כלים גלובלית . הדבר הראשון שנעשה הוא להגדיר JDK. במקטע JDK, לחץ על הוסף JDK , תן לו שם (שלי הוא "JDK8") והשאיר את ברירת המחדל של ההתקנה מ- java.sun.com מסומנת. קבל את הסכם הרישיון של Oracle, ואז לחץ על הקישור "אנא הזן את שם המשתמש / סיסמתך". הזן את שם המשתמש והסיסמה שלך ב- Oracle ולחץ על סגור . יוצג בפניך מסך הדומה לאיור 3.

סטיבן היינס

לחץ על החל כדי לשמור את העבודה שלך, ואז גלול מטה לקטע Maven ולחץ על הוסף Maven . הזן שם עבור Maven (שלי הוא "Maven 3.3.9"), השאר את "התקן אוטומטית" ו"התקין מאפצ'י "מסומנים. לחץ על שמור כשתהיה מוכן. צריך להציג בפניכם מסך הדומה לאיור 4.

סטיבן היינס

Git מוגדר מראש עם Jenkins, כך שעכשיו צריך להתקין את כל הכלים הדרושים לך לקופה ולבנות פרויקט Java מ- Git with Maven.

התקן את Jenkins במיכל Docker

If you don't want to install Jenkins on your local machine, you have the option of running it in a Docker container. The official Jenkins Docker image lets you run and test an installation of Jenkins without actually configuring it on a local machine.

Installing Docker

See my introduction to Docker for a beginner's guide to Docker, including installation and setup instructions.

Assuming you already have Docker setup in your development environment, you can launch Jenkins from the Docker the command line:

 docker run -p 8080:8080 -p 50000:50000 -v /your/home/jenkins:/var/jenkins_home -d jenkins 

This command tells Docker to run the latest release of jenkins with the following options:

  • -p 8080:8080: Maps port 8080 on the Docker container to port 8080 on the Docker host, so that you can connect to the Jenkins web app on port 8080.
  • -p 50000:50000: Maps port 50000 on the Docker container to port 50000 on the Docker host. Jenkins uses this port internally to allow build slave executors to connect to the master Jenkins server.
  • -v /your/home/jenkins:/var/jenkins_home: Maps Jenkins data storage to your local directory, so that you can restart your Docker container without losing your data.
  • -d: Lets you run the Docker container in a detached mode, or as a daemon process.

The following shows the output for running these commands:

 $ docker run -p 8000:8080 -v /Users/shaines/jenkins/:/var/jenkins_home -d jenkins cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53 

Because we're running our Docker container in detached mode, we need to follow the logs that are output by Jenkins. You can do so with the docker logs -f command. Just pass in the first few hexadecimal numbers of the container ID, in this case cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53:

 $ docker logs -f cc1 Running from: /usr/share/jenkins/jenkins.war webroot: EnvVars.masterEnvVars.get("JENKINS_HOME") ... ************************************************************* ************************************************************* ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: 205be6fe69c447dd933a3c9ce7420496 This may also be found at: /var/jenkins_home/secrets/initialAdminPassword ************************************************************* ************************************************************* ************************************************************* 

Setup Jenkins CI for a Java web app

בשלב הבא נקבע משימה פשוטה של ​​יישום אינטרנט בג'אווה בג'נקינס. מכיוון שהיישום אינו חשוב עבור הדרכה זו, נשתמש באפליקציה הפשוטה שלי שלום, World Servlet, אותה אירחתי ב- GitHub.

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

סטיבן היינס

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

  • פרויקט פריסטייל: סוג פרויקט נפוץ זה מאפשר לך לפקח על מאגר קוד מקור ולהשתמש בכל מערכת בנייה, כגון Maven ו- Ant.
  • Pipeline: Choose this project type for complicated projects with moving parts that you need to coordinate across multiple build slaves.
  • External job: Use this to configure an automated external job that you want to track in Jenkins as part of your build.
  • Multi-configuration project: This is the job type for projects that require different configurations for different environments, such as production, staging, and test.
  • Folder: When you have a complicated build then you might want to organize things into folders, each with their own distinct namespace.
  • Multi-branch pipeline: automatically create a set of pipeline projects, based on the code branches that are defined in your source code repository

Enter a project name, in this case "hello-world-servlet", and choose "OK". Next, choose GitHub project, then enter the GitHub URL of your project: //github.com/ligado/hello-world-servlet.

Under Source Code Management, choose Git and enter the same project URL.

In the Build Triggers section, choose Build when a change is pushed to GitHub so that Jenkins will build your code anytime you push a change to GitHub.

בקטע Build, הוסף שלב בנייה חדש, בחר הפעל יעדי Maven ברמה העליונה , בחר את מופע Maven שהגדרת בעבר (כגון "Maven 3.3.9") והזן התקנה נקייה בשדה היעדים. השאר את הפעולות שלאחר הבנייה ריקות לעת עתה. כשתסיים, לחץ על שמור .

כשאתה חוזר ללוח המחוונים אתה אמור לראות מסך הדומה לאיור 6.

סטיבן היינס

כדי לבדוק את התצורה שלך, לחץ על כפתור Build Now לצד פרויקט hello-world-servlet. אתה אמור לראות מבנה שבוצע בהצלחה בהיסטוריית הבנייה בצד שמאל של דף הפרויקט, שמוצג באיור 7.

סטיבן היינס

כדי לראות בדיוק מה קרה, לחץ על ה- build ואז לחץ על Output Console , אשר יראה לך את כל השלבים שביצע ג'נקינס ואת תוצאותיהם. פלט המסוף נמצא מתחת.