שילוב עם Jenkins

בדף הזה מוסבר איך להגדיר את Jenkins לאחסון חבילות Maven שנוצרו במאגר של Artifact Registry.

לפני שמתחילים

אם מאגר היעד לא קיים, צריך ליצור מאגר חדש.

הגדרת גישה למאגר

  1. יוצרים חשבון שירות ייעודי ל-Jenkins לשימוש עם Artifact Registry.

    מריצים את הפקודה הבאה כדי ליצור חשבון שירות בשם jenkins-sa:

    gcloud iam service-accounts create jenkins-sa
    

    כך נוצר חשבון שירות בשם jenkins-sa@PROJECT.iam.gserviceaccount.com, כאשר PROJECT הוא מזהה הפרויקט.

  2. בפרויקט שמכיל את המאגר, מעניקים את התפקיד Artifact Registry Writer לחשבון השירות של Jenkins שיצרתם. אפשר להעניק את התפקיד לכל המאגרים בפרויקט או להעניק אותו למאגרים הספציפיים שחשבון השירות צריך לגשת אליהם.

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

הגדרת אשכול GKE

כשמגדירים אשכול חדש או מאגר צמתים חדש ב-Google Kubernetes Engine, צריך להשתמש בחשבון השירות שיצרתם לשימוש ב-Jenkins.

המסוף

כדי ליצור אשכול באמצעות מסוף Google Cloud :

  1. נכנסים לתפריט Artifact Registry במסוף Google Cloud .

    כניסה לתפריט Artifact Registry

  2. לוחצים על יצירת אשכול.

  3. מגדירים את האשכול לפי הצורך. עדיין לא לוחצים על יצירה.

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

  5. בקטע Security בוחרים את חשבון השירות של Jenkins שיצרתם.

  6. לוחצים על שמירה כדי לצאת מהתצוגה המקדימה.

  7. לוחצים על יצירה.

gcloud

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

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

gcloud container clusters create example-cluster --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

כדי ליצור מאגר צמתים באשכול קיים:

gcloud container node-pools create example-pool --service-account=jenkins-sa@PROJECT.iam.gserviceaccount.com

פרטים על הפקודה מופיעים במאמר בנושא gcloud container clusters create.

הגדרת Jenkins ב-GKE

  1. פועלים לפי המדריך להגדרת Jenkins ב-GKE. משתמשים באשכול שיצרתם בקטע הקודם.

  2. ב-Jenkins, מעדכנים את התוסף GKE לגרסה האחרונה. לוחצים על Manage Jenkins > Manage Plugins > Updates.

הגדרת פרויקט Maven

  1. יוצרים Fork של פרויקט Maven לדוגמה במאגר GitHub של מסמכי Jenkins.

  2. משכפלים את המאגר המפוצל.

    git clone git@github.com:USER_NAME/simple-java-maven-app.git
    
  3. מגדירים צינור חדש בממשק של Jenkins.

    1. לוחצים על פריט חדש.
    2. בוחרים באפשרות Pipeline (צינור).
    3. מגדירים שם לצינור ומקליקים על אישור.
  4. בכרטיסייה General, מגדירים את האפשרויות הבאות בקטע Pipeline:

    • בוחרים באפשרות Pipeline script from SCM (סקריפט של צינור נתונים מ-SCM).
    • ברשימה הנפתחת SCM, בוחרים באפשרות Git ומזינים את כתובת ה-URL ואת פרטי הכניסה כדי להתחבר למאגר ב-GitHub.

    צילום מסך של הגדרות הצינור

  5. לוחצים על Save.

הגדרת החיבור למאגר

מגדירים את Jenkins עם המאגר ופרטי הכניסה כדי להתחבר למאגר.

  1. מוסיפים את המאגר לקובץ pom.xml של Maven. משתמשים בפקודה הבאה כדי להדפיס קטע קוד להוספה.

    gcloud artifacts print-settings mvn [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION]
    

    כאשר:

    • PROJECT הוא מזהה הפרויקט. אם לא מציינים את הדגל הזה, המערכת משתמשת בפרויקט הנוכחי או בפרויקט ברירת המחדל.
    • REPOSITORY הוא המזהה של המאגר. אם הגדרתם מאגר ברירת מחדל של Artifact Registry, המערכת תשתמש בו אם לא תציינו את הדגל הזה בפקודה.
    • LOCATION הוא המיקום האזורי או המיקום במספר אזורים של המאגר.
  2. יוצרים קובץ YAML כתבנית של פוד לסוכני Jenkins.

    mkdir jenkins
    cat > jenkins/maven-pod.yaml << EOF
    apiVersion: v1
    kind: Pod
    spec:
      containers:
      - name: maven
        image: maven:3.3.9-jdk-8-alpine
        command: ['cat']
        tty: true
    EOF
    
  3. משנים את הקובץ Jenkinsfile.

    pipeline {
        agent none
        stages {
            stage('Deploy') {
                steps {
                     agent {
                         kubernetes {
                             label 'mavenpod'
                             yamlFile 'jenkins/maven-pod.yaml'
                           }
                       }
                       container('maven') {
                       sh "mvn -B clean deploy"
                     }
                }
            }
        }
    }
    

התחלת build

  1. מעלים את השינויים שביצעתם לפרויקט ב-GitHub.

    git add . && git commit -m "Configure my Jenkins pipeline" && git push
    
  2. בממשק של Jenkins, מתחילים ליצור build חדש לאפליקציה בפרויקט לדוגמה של Maven.

בסיום ה-build, הארטיפקטים מתווספים למאגר חבילות Java ב-Artifact Registry שיצרתם.

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

gcloud artifacts packages list --repository=mvn-jenkins --location=LOCATION

הפלט אמור להיראות כך:

Listing items under project {YOUR_PROJECT}, repository mvn-jenkins.

PACKAGE                   CREATE_TIME          UPDATE_TIME
com.mycompany.app:my-app  2019-06-25T17:09:44  2019-06-25T17:09:44