מה זה Jenkins?

Jenkins הוא שרת אינטגרציה רציפה (Continuous Integration) קוד פתוח המסוגל לתזמן שרשרת פעולות המסייעות לייצר תהליך האינטגרציה רציף באופן אוטומטי. Jenkins הוא כלי חינמי וכתוב כולו ב- Java.

Jenkins הוא כלי נפוץ ברחבי העולם והשימוש בו עולה מיום ליום.

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

התקנת Jenkins

אחת האפשרויות היא בעזרת Kitematic על-ידי התקנת Docker Toolbox התקנה זו לצורכי למידה, בסביבת Production ההתקנה תתבצע לרוב על גבי שרת לינוקס עם או בלי שימוש ב- Docker לצורך התקנה. במידה וסביבת ה- Production היא Kubernetes ההתקנה תתבצע לרוב בעזרת Helm גירסה 3.

התקנה מקומית בעזרת Kitematic

אחרי ההתקנה תפתחו את Kitematic והכנסו לחשבון Docker Hub שלכם.

לבסוף תלחצו על Create וזהו התקנתם Jenkins.

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

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

התקנה על גבי Kubernetes

בהנחה שקינפגתם את kubectl להתחבר ל- Kubernetes Cluster שלכם.

helm install jenkins stable/jenkins --namespace <namespace>

לצורך חיבור חיצוני תצטרכו ליצור Service מסוג LoudBalncer או להשתמש ב- Nginx Ingress Controller.

מה זה Jenkins Pipeline?

Jenkins Pipeline הוא חבילה של תוספים התומכים ביישום תהליכי ה- CI/CD ב- Jenkins.

Jenkins Pipeline מיושם על-ידי קובץ Jenkinsfile אשר ניתן ואף רצוי לשמור יחד עם קוד הפרוייקט ב- Code Repository ובכך להשיג כמה יתרונות:

  1. ייצור אוטומטי של תהליך בניית ה- Pipeline עבור כל ה- Branches וה- Pull Requests.
  2. יכולת Code Review ל- Jenkins Pipeline יחד עם קוד המקור של הפרוייקט.
  3. יכולת ניהול Audit על קובץ ה- Jenkins Pipeline.
  4. מקור יחיד לאמת.

דוגמה ל- Declarative Pipeline

#!/usr/bin/env groovy

pipeline{
    agent any
    environment {
        enviroment = "production"
        gitCommit = sh(script: "git rev-parse --short=8 HEAD", ,returnStdout: true)
        registry = "nexus-docker-private.beaver.co.il/test"
        registryUrl = "https://nexus-docker-private.beaver.co.il"
    }
    stages{
        stage("SCM Chechout"){
            steps{
                echo "========executing SCM Chechout========"
                echo sh(returnStdout: true, script: 'env')
                checkout scm
            }
            post{
                success{
                    echo "========SCM Chechout executed successfully========"
                }
                failure{
                    echo "========SCM Chechout execution failed========"
                }
            }
        }
        stage("Build"){
            steps{
                echo "========executing Build========"
                script {
                    sh "chmod +x ./build.sh"
                    sh "./build.sh"
                }
            }
            post{
                success{
                    echo "========Build executed successfully========"
                }
                failure{
                    echo "========Build execution failed========"
                }
            }
        }
        stage("Test"){
            steps{
                echo "========executing Test========"
                script {
                    sh "chmod +x ./test.sh"
                    sh "./test.sh"
                }
            }
            post{
                success{
                    echo "========Test executed successfully========"
                }
                failure{
                    echo "========Test execution failed========"
                }
            }
        }
        stage("Deploy"){
            steps{
                echo "========executing Deploy========"
                script{
                    sh "chmod +x ./deploy.sh"
                    sh "./deploy.sh"
                }
            }
            post{
                success{
                    echo "========Deploy executed successfully========"
                script{
                    sh "chmod +x ./post-deploy.sh"
                    sh "./post-deploy.sh"
                }    
                }
                failure{
                    echo "========Deploy execution failed========"
                }
            }
        }
    }
    post{
        success{
            echo "========pipeline executed successfully ========"
        }
        failure{
            echo "========pipeline execution failed========"
        }
    }
}

למידע נוסף עודות אופן השימוש ב- Jenkins Pipeline תוכלו למצוא כאן.

דילוג לתוכן