2017-08-15 1 views
0

Ich probiere Einsätze auf Kubernetes über Jenkins mit der Docker Voting App aus. Ich verwende die Azure Container-Registrierung als Repository für die Docker-Images. Beim ersten Versuch alles in Ordnung eingesetzt wird: enter image description hereDocker VotingApp build/release Jenkins auf Kubernetes nicht idempotent

Wenn ich die Pipeline ohne Änderung etwas, das ich die folgende Fehlermeldung erneut ausführen: enter image description here

Redis Service-Definition:

--- 
 
apiVersion: v1 
 
kind: Service 
 
metadata: 
 
    creationTimestamp: null 
 
    labels: 
 
    app: redis 
 
    version: alpine 
 
    name: redis 
 
    selfLink: /api/v1/namespaces//services/redis 
 
spec: 
 
    clusterIP: 
 
    ports: 
 
    - name: 
 
    port: 6379 
 
    protocol: TCP 
 
    targetPort: 6379 
 
    selector: 
 
    app: redis 
 
    version: alpine 
 
    sessionAffinity: None 
 
    type: ClusterIP 
 
status: 
 
    loadBalancer: {} 
 
---

Die Docker-Bilder werden mit dem "neuesten" Tag erstellt.

stage 'Checkout' 
 
node { 
 
    git 'https://github.com/*****/example-voting-app.git' // Checks out example votiung app repository 
 
    stage 'Docker Builds' 
 
    docker.withRegistry('https://*****.azurecr.io', 'private-login') { 
 
     parallel(
 
      "Build Worker App":{def myEnv = docker.build('*****.azurecr.io/example-voting-app-worker:latest', 'worker').push('latest')}, 
 
      "Build Result App":{def myEnv = docker.build('*****.azurecr.io/example-voting-app-result:latest', 'result').push('latest')}, 
 
      "Build Vote App":{def myEnv = docker.build('*****.azurecr.io/example-voting-app-vote:latest', 'vote').push('latest')} 
 
      ) 
 
    } 
 
    stage 'Kubernetes Deployment' 
 
    sh 'kubectl apply -f kubernetes/basic-full-deployment.yml' 
 
    sh 'kubectl delete pods -l app=vote' 
 
    sh 'kubectl delete pods -l app=result' 
 
    stage 'Smoke Test' 
 
    sh 'kubectl get deployments' 
 
}

Antwort

0

Ihre Definition enthält Felder, die durch die apiserver automatisch generiert/verwaltet werden. Einige von ihnen werden zum Zeitpunkt der Objekterstellung erstellt und können danach nicht mehr aktualisiert werden. Entfernen Sie die folgenden Felder aus Ihrer Datei, um es glücklich zu machen:

metadata: 
    creationTimestamp: null 
    selfLink: /api/v1/namespaces//services/redis 
status: 
    loadBalancer: {}