2014-11-27 8 views
9

Ich untersuche mit Jenkins Job-Builder (von OpenStack) als unser Mittel zur Verwaltung von jenkins Jobkonfigurationen. Dabei versuche ich, die richtige (beste?) Möglichkeit zu finden, eine Job-Vorlage aus einer externen Datei mit dem benutzerdefinierten Tag !include aufzunehmen.Jenkins Job-Builder: Wie schicke Job-Templates korrekt aus externen Dateien?

Im aktuellen Anwendungsfall haben wir im Grunde eine Vorlage, die von vielen Jobs verwendet wird. Jeder Job muss aus Gründen in einer eigenen Datei existieren, die hier nicht enthalten sind.

Bisher habe ich bekommen dies funktioniert:

Job-template.yml

name: 'pre-build-{proj}-{repo}' 
project-type: freestyle 
... etc ... 

Job-1.yml

- job-template: 
    !include job-template.yml 

- project: 
    name: job-1 
    proj: my-proj 
    repo: my-repo 
    jobs: 
     - 'build-config-{proj}-{repo}' 

Diese scheinen falsch, weil die Vorlagendefinition erhalten wird Auf beide Dateien verteilt und erfordert unnötige Duplizierung der Zeile -job-template: in jeder Jobdatei. Ich möchte folgende erhalten, anstatt zu arbeiten:

Job-template.yml

- job-template: 
    name: 'pre-build-{proj}-{repo}' 
    project-type: freestyle 
    ... etc ... 

Job-1.yml

!include job-template.yml 

- project: 
    name: job-1 
    proj: my-proj 
    repo: my-repo 
    jobs: 
     - 'build-config-{proj}-{repo}' 

Letztere leider in einem yaml Ergebnisse Analysefehler auf der - project: Zeile:

yaml.scanner.ScannerError: mapping values are not allowed here in "job-1.yml", line 3, column 10

Gibt es eine Möglichkeit, die gesamte Vorlagendefinition in die Vorlagendatei zu bekommen? Dies wird besonders ärgerlich, wenn wir mehrere Vorlagen aus mehreren Dateien abrufen müssen.

Antwort

8

Jenkins-Jobs nimmt path Argument, das ein Verzeichnis, welches Ihre Dateien sein (job-template.yaml, job-1.yaml und job-2.yaml Es sie als ein einziges YAML Dokument zusammenstellen wird, so brauchen Sie nicht !include zu verwenden, so können Sie schreiben..:

Job-template.yaml

- job-template: 
    name: 'pre-build-{proj}-{repo}' 
    builders: 
     - shell: 'echo building {proj} for {repo}' 

job1.yaml

- project: 
    name: job-1 
    proj: my-proj 
    repo: my-repo 
    jobs: 
     - 'pre-build-{proj}-{repo}' 

job2.yaml

- project: 
    name: job-2 
    proj: my-other-proj 
    repo: my-other-repo 
    jobs: 
     - 'pre-build-{proj}-{repo}' 

Das wird zwei Arbeitsplätze mit den folgenden Shell-Kommandos generiert:

Pre-Build-my-other-proj-my-other-Repo:

<command>echo building my-other-proj for my-other-repo</command> 

pre -build-my-proj-mein-repo:

<command>echo building my-proj for my-repo</command> 

die Dateien in einem Verzeichnis Angenommen config/ Sie sie alle mit erzeugen:

jenkins-jobs test config/ -o /tmp/myjobs 

Oder nutzen Sie das name Argument die Jobs zu filtern, die realisiert werden:

jenkins-jobs test config/ -o /tmp/myjobs '*my-proj*' 
# Creates pre-build-my-proj-my-repo 
# Skips pre-build-my-other-proj-my-other-repo 
Verwandte Themen