Jenkins: יצירת Pipeline ראשון ושימוש בתוספים

Jenkins: יצירת Pipeline ראשון ושימוש בתוספים

הקדמה ל-Jenkins

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

התקנת Jenkins

כדי להתחיל להשתמש ב-Jenkins, נצטרך להתקין אותו על השרת או על מכונה מקומית. התקנה של Jenkins יכולה להתבצע במספר דרכים, אך הדרך הנפוצה והקלה ביותר היא באמצעות Docker. Docker מאפשר לנו להריץ את Jenkins במיכל (Container) מבודד, מה שמפשט את תהליך ההתקנה והניהול.

הנה פקודת Docker פשוטה שתתקין ותפעיל את Jenkins:

docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkins/jenkins:lts

הפקודה הזו מורידה ומריצה את גרסת ה-LTS (Long-Term Support) של Jenkins על המכונה שלכם. לאחר מכן, תוכלו לגשת לממשק האינטרנטי של Jenkins דרך הדפדפן בכתובת http://localhost:8080.

הגדרת Jenkins והתקנת תוספים

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

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

הנה דוגמה לאופן שבו ניתן להתקין תוסף דרך ממשק המשתמש של Jenkins:

1. גשו ללשונית Manage Jenkins בתפריט הראשי.
2. בחרו באפשרות Manage Plugins.
3. בחלונית Available, חפשו את התוסף Git Plugin.
4. סמנו אותו ולחצו Install without restart.

לאחר ההתקנה, התוסף יהיה זמין לשימוש בתהליכי הבנייה (Builds) שלכם.

יצירת Pipeline ראשון ב-Jenkins

Jenkins מאפשר לבנות תהליכי אוטומציה בעזרת Pipelines. Pipeline הוא סט של שלבים (Stages) וצעדים (Steps) שמרכיבים את התהליך האוטומטי שלכם. אפשר לבנות Pipeline בצורה ויזואלית באמצעות Blue Ocean או לכתוב את ה-Pipeline בתור קוד בקובץ Jenkinsfile.

הנה דוגמה ל-Pipeline פשוט שמוגדר בקובץ Jenkinsfile:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'npm install'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
                sh 'npm test'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
                sh 'npm run deploy'
            }
        }
    }
}

ה-Pipeline הזה כולל שלושה שלבים: Build, Test, ו-Deploy. כל שלב מבצע פעולה אחרת, כמו התקנת תלויות, הרצת בדיקות ופריסת היישום. התהליך כולו מתבצע על סוכן (Agent) כלשהו שיכול להיות מכונה וירטואלית, Container של Docker, או שרת ייעודי.

שימוש בתוספים (Plugins) ב-Jenkins Pipeline

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

ראשית, ודאו שהתקנתם את התוסף NodeJS Plugin דרך Manage Plugins.

לאחר מכן, תוכלו להוסיף את השלב הבא ל-Pipeline שלכם:

pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'npm install'
            }
        }
        stage('Lint') {
            steps {
                echo 'Linting...'
                sh 'npm run lint'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
                sh 'npm test'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
                sh 'npm run deploy'
            }
        }
    }
}

הוספנו שלב בשם Lint שמריץ את הפקודה npm run lint, ובודק את הקוד בעזרת ESLint. השימוש בתוספים מאפשר להוסיף פונקציונליות נוספת כמו תמיכה בשפות תכנות שונות, אינטגרציה עם כלים חיצוניים, ועוד.

Jenkins Agents: הפצת עומס העבודה

Jenkins תומך בעבודה עם מספר סוכנים (Agents) שמאפשרים לפזר את עומס העבודה על פני מספר מכונות. זהו פתרון יעיל במיוחד בסביבות שבהן יש צורך בביצוע של מספר תהליכים במקביל או בסביבות מורכבות שדורשות תצורות שונות לכל תהליך.

ניתן להגדיר סוכנים שונים עבור כל שלב ב-Pipeline, לדוגמה:

pipeline {
    agent none

    stages {
        stage('Build') {
            agent { label 'linux' }
            steps {
                echo 'Building on Linux...'
                sh 'npm install'
            }
        }
        stage('Test') {
            agent { label 'windows' }
            steps {
                echo 'Testing on Windows...'
                bat 'npm test'
            }
        }
        stage('Deploy') {
            agent { label 'docker' }
            steps {
                echo 'Deploying on Docker...'
                sh 'docker run -d -p 8080:8080 myapp'
            }
        }
    }
}

בפייפליין הזה, הגדרנו סוכן נפרד לכל שלב. השלב הראשון רץ על מכונה מבוססת לינוקס, השלב השני על Windows, והשלב השלישי על סוכן Docker. זה מאפשר גמישות מרבית בתהליך האוטומציה.

ניהול ותזמון תהליכים עם Jenkins

Jenkins מאפשר לתזמן את התהליכים שלכם כך שיתבצעו בזמנים מוגדרים מראש. לדוגמה, ניתן להגדיר Pipeline שירוץ פעם ביום בשעה מסוימת, או אפילו פעם בשבוע בסופי שבוע.

תזמון Pipeline יכול להתבצע על ידי הוספת פרמטר cron לקובץ ה-Jenkinsfile, כמו בדוגמה הבאה:

pipeline {
    agent any

    triggers {
        cron('H 0 * * 1-5')
    }

    stages {
        stage('Build') {
            steps {
                echo 'Building...'
                sh 'npm install'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
                sh 'npm test'
            }
        }
    }
}

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

אינטגרציה עם כלים חיצוניים

Jenkins תומך באינטגרציה עם מגוון רחב של כלים חיצוניים כמו GitHub, Bitbucket, Slack, Jira, ועוד. האינטגרציה הזו מאפשרת לכם לנהל את תהליך הפיתוח בצורה חלקה ומרוכזת תחת Jenkins.

לדוגמה, נניח שאתם רוצים להגדיר Jenkins שיבנה את הקוד שלכם בכל פעם שמתבצע Push למאגר GitHub. תוכלו לעשות זאת באמצעות הגדרת Webhook ב-GitHub שיפעיל את Jenkins:

1. היכנסו למאגר שלכם ב-GitHub.
2. גשו ללשונית Settings ולאחר מכן Webhooks.
3. לחצו על Add webhook.
4. הזינו את כתובת ה-Jenkins שלכם בשדה Payload URL, והוסיפו את /github-webhook/ בסוף הכתובת.

לאחר הגדרה זו, כל Push למאגר יפעיל את ה-Pipeline ב-Jenkins, אשר יריץ את התהליכים שהגדרתם.

הרחבת Jenkins עם Jenkins X

Jenkins X הוא הרחבה של Jenkins שמיועדת לאוטומציה בקנה מידה גדול בסביבות Kubernetes. Jenkins X מאפשר ליצור Pipelines מרובי-שלבים שמתאימים במיוחד לסביבות מבוססות קונטיינרים ומיקרו-שירותים.

הנה דוגמה ל-Pipeline שמוגדר ב-Jenkins X:

pipeline {
    agent {
        kubernetes {
            label 'jenkins-slave'
            defaultContainer 'jnlp'
            yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    some-label: some-value
spec:
  containers:
  - name: maven
    image: maven:3-alpine
    command:
    - cat
    tty: true
"""
        }
    }

    stages {
        stage('Build') {
            steps {
                container('maven') {
                    sh 'mvn clean install'
                }
            }
        }
        stage('Test') {
            steps {
                container('maven') {
                    sh 'mvn test'
                }
            }
        }
    }
}

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

סיכום

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

אם אתם מעוניינים ללמוד בצורה מעמיקה יותר אתם מוזמנים להתייעץ איתנו על קורס DevOps.

שתפו את הפוסט

דילוג לתוכן