web-dev-qa-db-fra.com

pas de méthode DSL

J'essaie de créer mon premier script Groovy pour Jenkins:

Après avoir regardé ici https://jenkins.io/doc/book/pipeline/ , j'ai créé ceci:

node {
  stages {

    stage('HelloWorld') {
      echo 'Hello World'
    }

    stage('git clone') {
      git clone "ssh://[email protected]/myrepo.git"
    }

  }
}

Cependant, j'obtiens:

Java.lang.NoSuchMethodError: No such DSL method "stages" found among steps

Qu'est-ce que je rate?

Aussi, comment puis-je transmettre mes informations d'identification au référentiel Git sans écrire le mot de passe en texte brut?

22
octavian

Vous confondez et mélangez Scripted Pipeline avec Declarative Pipeline, pour une différence complète voir ici . Mais la courte histoire:

  • pipelines déclaratifs est une nouvelle extension du pipeline DSL (il s’agit essentiellement d’un script de pipeline avec une seule étape, une étape de pipeline avec des arguments (appelées directives), Ces directives doivent suivre une syntaxe spécifique, ce qui le rend plus strict et devrait donc être plus facile pour les nouveaux utilisateurs de pipelines, permettre l’édition graphique, etc.
  • les pipelines scriptés constituent la solution de secours pour les exigences avancées.

Donc, si nous examinons votre script, vous commencez par ouvrir une étape node, qui provient de pipelines scriptés. Ensuite, vous utilisez stages qui est l’une des directives de l’étape pipeline définie dans declarative pipeline. Ainsi, vous pouvez par exemple écrire:

pipeline {
  ...
  stages {
    stage('HelloWorld') {
      steps {
        echo 'Hello World'
      }
    }
    stage('git clone') {
      steps {
        git clone "ssh://[email protected]/myrepo.git"
      }
    }
  }
}

Donc, si vous voulez utiliser declarative pipeline c'est la voie à suivre.

Si tu veux scripted pipeline, alors vous écrivez:

node {
  stage('HelloWorld') {
    echo 'Hello World'
  }

  stage('git clone') {
    git clone "ssh://[email protected]/myrepo.git"
  }
}

Ex .: passe le bloc des étapes.

57
Jon S

Un fichier Jenkins peut être écrit en utilisant deux types de syntaxe - Déclaratif et Scripté .

Les pipelines déclaratifs et scriptés sont construits fondamentalement différemment. Le pipeline déclaratif est une fonctionnalité plus récente du pipeline Jenkins qui:

  • fournit des fonctionnalités syntaxiques plus riches par rapport à la syntaxe Scripted Pipeline, et

  • est conçu pour faciliter l'écriture et la lecture du code de pipeline.

Cependant, de nombreux composants syntaxiques (ou "étapes") individuels écrits dans un fichier Jenkins sont communs aux pipelines déclaratif et scripté. Exemple:

Principes fondamentaux du pipeline déclaratif

Dans la syntaxe du pipeline déclaratif, le bloc pipeline définit tout le travail effectué dans l'ensemble de votre pipeline.

Jenkinsfile (pipeline déclaratif):

pipeline {
    agent any 1
    stages { 
        stage('Build') { 2
            steps { 
                // 3
            }
        }
        stage('Test') { 4
            steps { 
                // 5
            }
        }
        stage('Deploy') { 6
            steps {
                // 7
            }
        }
    }
}
  1. Exécutez ce pipeline ou l’une de ses étapes sur n’importe quel agent disponible.
  2. Définit l'étape "Construire".
  3. Effectuez certaines étapes liées à l’étape "Construire".
  4. Définit l'étape "Test".
  5. Effectuez certaines étapes liées à l’étape "Test".
  6. Définit l'étape "Déployer".
  7. Effectuez certaines étapes liées à l’étape "Déployer".

Principes fondamentaux du pipeline scripté

Dans la syntaxe Scripted Pipeline, un ou plusieurs blocs node effectuent le travail de base sur l'ensemble du pipeline. Bien que ce ne soit pas une exigence de la syntaxe Scripted Pipeline, confiner le travail de votre pipeline dans un bloc node a deux effets:

  1. Planifie l'exécution des étapes contenues dans le bloc en ajoutant un élément à la file d'attente Jenkins. Dès qu'un exécuteur est libre sur un nœud, les étapes sont exécutées.

  2. Crée un espace de travail (un répertoire spécifique à ce pipeline) où le travail peut être effectué sur des fichiers extraits du contrôle de source.
    Attention: En fonction de votre configuration Jenkins, certains espaces de travail peuvent ne pas être nettoyés automatiquement après une période d'inactivité. Voir les billets et la discussion liés à partir de JENKINS-2111 pour plus d'informations.

Jenkinsfile (Scripted Pipeline):

node { 1
    stage('Build') { 2
        // 3
    }
    stage('Test') { 4
        // 5
    }
    stage('Deploy') { 6
        // 7
    }
}
  1. Exécutez ce pipeline ou l’une de ses étapes sur n’importe quel agent disponible.
  2. Définit l'étape "Construire". Les blocs stage sont facultatifs dans la syntaxe Scripted Pipeline. Cependant, l'implémentation de stage blocs dans un pipeline scripté fournit une visualisation plus claire du sous-ensemble de tâches/étapes de chaque `étape dans l'interface utilisateur Jenkins.
  3. Effectuez certaines étapes liées à l’étape "Construire".
  4. Définit l'étape "Test". 5
  5. Effectuez certaines étapes liées à l’étape "Test".
  6. Définit l'étape "Déployer".
  7. Effectuez certaines étapes liées à l’étape "Déployer".

Exemple de pipeline

Voici un exemple de Jenkinsfile utilisant Declarative et sa syntaxe scriptive équivalente:

Jenkinsfile (pipeline déclaratif):

pipeline {
    agent any
    options {
        skipStagesAfterUnstable()
    }
    stages {
        stage('Build') {
            steps {
                sh 'make'
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml'
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}

Jenkinsfile (Scripted Pipeline):

node {
    stage('Build') {
        sh 'make'
    }
    stage('Test') {
        sh 'make check'
        junit 'reports/**/*.xml'
    }
    if (currentBuild.currentResult == 'SUCCESS') {
        stage('Deploy') {
            sh 'make publish'
        }
    }
}
0
M-Razavi