2017-10-12 1 views
0

J'essaie d'automatiser entièrement la création de Jenkins. J'ai obtenu la plupart de l'installation en utilisant des scripts groovy. Mon dernier obstacle est de créer un emploi en utilisant le DSL. Je suis en mesure de créer le travail en utilisant xml via:Jenkins: Automatiser la création d'un travail en utilisant DSL

import jenkins.model.* 

def jobName = "jobname" 
String configXml = new File('/jobname.xml').getText('UTF-8') 
def xmlStream = new ByteArrayInputStream(configXml.getBytes()) 
Jenkins.instance.createProjectFromXML(jobName, xmlStream) 

Cependant, le fichier XML est difficile à maintenir et pas facile à comprendre. Je voulais donc passer à l'utilisation de la syntaxe DSL, mais je ne peux pas réparer une API pour remplacer createProjectFromXML (...) avec quelque chose comme createPrjectFromDSL?

Ma question est comment créer un nouveau travail en utilisant DSL? J'ai travaillé cette partie, merci.

Cependant, ma question suivante est de savoir où mettre ce fichier afin que Jenkins crée le travail au démarrage? Lorsque je tente de le copier à /var/jenkins_home/init.groovy.d je reçois l'exception suivante au démarrage:

AVERTISSEMENT: Impossible d'exécuter le fichier de script: /var/jenkins_home/init.groovy.d/ neoconfig-dsl.groovy groovy.lang.MissingMethodException: Aucune signature de méthode: neoconfig-dsl.job() s'applique aux types d'argument: (java.lang.String, neoconfig-dsl $ _run_closure1) valeurs: [neo, neoconfig- dsl _run_closure1 $ @ 7d799f93] solutions possibles: run(), run(), tout(), attendez(), grep(), vidage()

+0

Vous pouvez créer un projet qui récupèrera les tâches DSL à partir de repo distant et les compilera. – Opal

+0

Je pense que c'est quelque chose que je cherche. Pouvez-vous élaborer un peu plus? Mon objectif est d'automatiser la création de tous mes emplois en utilisant le travail DSL. – Gerb

Répondre

1

Le plugin Jenkins Job DSL fournit exactement ce que vous semblez rechercher: A (Groovy-based DSL pour définir des tâches.

Une définition simple d'emploi se présente comme suit:

def repo = 'DSL-Tutorial-1-Test' 
job(repo) { 
    scm { 
     git('git://github.com/quidryan/aws-sdk-test.git') 
    } 
    triggers { 
     scm('H/15 * * * *') 
    } 
    steps { 
     maven('-e clean test') 
    } 
} 

EDIT: Pour démarrer automatiquement ce travail après la définition, ajoutez le code suivant:

// automatically queue the job after the initial creation 
if (!jenkins.model.Jenkins.instance.getItemByFullName(repo)) { 
    queue(repo) 
} 

Un exemple complet d'une installation qui crée un conteneur docker à auto-amorçage peut être trouvé dans tknerr/jenkins-pipes-infra. J'utilise (la plupart du temps) la même approche here.

+0

Une fois la définition de travail créée, comment procéder pour exécuter cette définition de travail via un script? Mon but est d'avoir un conteneur entièrement configurer Jenkins avec toute ma définition de travail au démarrage. – Gerb

+0

J'ai mis à jour ma réponse. Point très valide :-) – StephenKing

+0

Merci! Ceci est exactement ce que je cherchais. – Gerb