Подтвердить что ты не робот

Нет такого метода DSL `steps`

Я пытаюсь создать свой первый Groovy script для Jenkins:

Посмотрев здесь https://jenkins.io/doc/book/pipeline/, я создал это:

node {
  stages {

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

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

  }
}

Однако я получаю:

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

Что мне не хватает?

Также, как передать свои учетные данные в репозиторий Git без ввода пароля в виде обычного текста?

4b9b3361

Ответ 1

Вы путаете и смешиваете Scripted Pipeline с Declarative Pipeline, для полной разницы смотрите здесь. Но короткая история:

  • декларативные конвейеры - это новое расширение конвейерной DSL (это в основном конвейерный скрипт с одним шагом, конвейерным шагом с аргументами (так называемыми директивами), эти директивы должны следовать определенному синтаксису. Смысл этого нового формата в том, что он более строгим и поэтому должен быть проще для новичков в конвейерах, допускает графическое редактирование и многое другое.
  • скриптовые конвейеры - это запасной вариант для расширенных требований.

Итак, если мы посмотрим на ваш скрипт, вы сначала откроете шаг node из сценариев конвейеров. Затем вы используете stages которые являются одной из директив шага pipeline определенных в declarative pipeline. Так, например, вы можете написать:

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

Так что если вы хотите использовать declarative pipeline, это путь.

Если вы хотите scripted pipeline, то напишите:

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

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

Например: пропустить блок этапов.

Ответ 2

Дженкинсфайл может быть написан с использованием двух типов синтаксиса - декларативный и сценарий.

Декларативные и скриптовые конвейеры построены принципиально по-разному. Декларативный конвейер - более новая функция Jenkins Pipeline, которая:

  • предоставляет более широкие синтаксические возможности по сравнению с синтаксисом Scripted Pipeline, и

  • предназначен для облегчения написания и чтения кода конвейера.

Однако многие из отдельных синтаксических компонентов (или "шагов"), записанных в файл Jenkinsfile, являются общими как для декларативного, так и для сценариев конвейера. Пример:

Декларативные основы трубопроводов

В синтаксисе декларативного pipeline блок pipeline определяет всю работу, выполняемую по всему конвейеру.

Jenkinsfile (декларативный конвейер):

pipeline {
    agent any 1
    stages { 
        stage('Build') { 2
            steps { 
                // 3
            }
        }
        stage('Test') { 4
            steps { 
                // 5
            }
        }
        stage('Deploy') { 6
            steps {
                // 7
            }
        }
    }
}
  1. Выполните этот конвейер или любой его этап на любом доступном агенте.
  2. Определяет этап "Сборка".
  3. Выполните некоторые шаги, связанные с этапом "Сборка".
  4. Определяет этап "Тест".
  5. Выполните некоторые шаги, связанные с этапом "Тест".
  6. Определяет этап "Развертывание".
  7. Выполните некоторые шаги, связанные с этапом "Развертывание".

Основы сценариев трубопроводов

В синтаксисе Scripted Pipeline один или несколько node выполняют основную работу по всему конвейеру. Хотя это не является обязательным требованием синтаксиса сценариев конвейера, ограничение работы конвейера внутри блока node делает две вещи:

  1. Запланирует выполнение шагов, содержащихся в блоке, добавив элемент в очередь Jenkins. Как только исполнитель освободится на узле, шаги будут выполнены.

  2. Создает рабочее пространство (каталог, специфичный для данного конкретного конвейера), в котором можно выполнять работу с файлами, извлеченными из системы контроля версий.
    Предостережение. В зависимости от конфигурации Jenkins некоторые рабочие области могут не очищаться автоматически после определенного периода бездействия. Смотрите билеты и обсуждения, связанные с JENKINS-2111 для получения дополнительной информации.

Jenkinsfile (сценарий конвейера):

node { 1
    stage('Build') { 2
        // 3
    }
    stage('Test') { 4
        // 5
    }
    stage('Deploy') { 6
        // 7
    }
}
  1. Выполните этот конвейер или любой его этап на любом доступном агенте.
  2. Определяет этап "Сборка". stage блоки необязательны в синтаксисе скриптового конвейера. Тем не менее, реализация блоков stage в скриптовом конвейере обеспечивает более четкую визуализацию каждого "поднабора этапов задач/шагов" в пользовательском интерфейсе Jenkins.
  3. Выполните некоторые шаги, связанные с этапом "Сборка".
  4. Определяет этап "Тест". 5
  5. Выполните некоторые шаги, связанные с этапом "Тест".
  6. Определяет этап "Развертывание".
  7. Выполните некоторые шаги, связанные с этапом "Развертывание".

Пример конвейера

Вот пример Jenkinsfile использующего декларативный и его эквивалентный синтаксис конвейерного синтаксиса:

Jenkinsfile (декларативный конвейер):

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 (сценарий конвейера):

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