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?
Vous confondez et mélangez Scripted Pipeline
avec Declarative Pipeline
, pour une différence complète voir ici . Mais la courte histoire:
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.
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:
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
}
}
}
}
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:
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.
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
}
}
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.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'
}
}
}