web-dev-qa-db-ja.com

そのようなDSLメソッド「ステージ」はありません

Jenkins用の最初のGroovyスクリプトを作成しようとしています。

ここを見て 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リポジトリに渡すにはどうすればよいですか?

22
octavian

完全な違いのために、Scripted PipelineDeclarative Pipelineを混同して混同しています こちらを参照 。しかし、短い話:

  • declarative pipelinesは、パイプラインDSLの新しい拡張機能です(基本的に、1つのステップ、引数(ディレクティブ)と呼ばれるパイプラインステップのみを持つパイプラインスクリプトです。これらのディレクティブは特定の構文に従う必要がありますこの新しい形式のポイントは、より厳密であり、したがって、パイプラインを初めて使用する方が簡単になり、グラフィカルな編集などができるようになることです。
  • スクリプト化されたパイプラインは、高度な要件のフォールバックです。

したがって、スクリプトを見ると、最初にスクリプトパイプラインからのnodeステップを開きます。次に、declarative pipelineで定義されているstagesステップのディレクティブの1つである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"
  }
}

例:ステージブロックをスキップします。

57
Jon S

Jenkinsfileは、2種類の構文-DeclarativeおよびScriptedを使用して記述できます。

宣言的パイプラインとスクリプトパイプラインは、根本的に異なって構築されます。宣言的パイプラインは、Jenkins Pipelineの最新の機能であり、次の機能を備えています。

  • スクリプト化されたパイプライン構文よりも豊富な構文機能を提供します。

  • pipelineコードの記述と読み取りを容易にするように設計されています。

ただし、Jenkinsfileに書き込まれる個々の構文コンポーネント(または「ステップ」)の多くは、宣言パイプラインとスクリプトパイプラインの両方に共通しています。例:

宣言的なパイプラインの基本

Declarative Pipeline構文では、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. 「デプロイ」ステージに関連するいくつかの手順を実行します。

スクリプトパイプラインの基礎

スクリプト化されたパイプライン構文では、1つ以上のnodeブロックがパイプライン全体を通してコア作業を行います。これはScripted Pipeline構文の必須要件ではありませんが、nodeブロック内にPipelineの作業を限定すると、次の2つのことが行われます。

  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 UIの各「ステージ」のタスク/ステップのサブセットをより明確に視覚化できます。
  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'
        }
    }
}
0
M-Razavi