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リポジトリに渡すにはどうすればよいですか?
完全な違いのために、Scripted Pipeline
とDeclarative Pipeline
を混同して混同しています こちらを参照 。しかし、短い話:
したがって、スクリプトを見ると、最初にスクリプトパイプラインからの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"
}
}
例:ステージブロックをスキップします。
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つ以上のnode
ブロックがパイプライン全体を通してコア作業を行います。これはScripted Pipeline構文の必須要件ではありませんが、node
ブロック内にPipelineの作業を限定すると、次の2つのことが行われます。
Jenkinsキューにアイテムを追加して、ブロック内に含まれるステップを実行するようにスケジュールします。ノードでエグゼキューターが解放されるとすぐに、ステップが実行されます。
ソース管理からチェックアウトされたファイルで作業を行うことができるワークスペース(その特定のパイプラインに固有のディレクトリ)を作成します。
注意:Jenkinsの設定によっては、一定の非アクティブ期間が過ぎると一部のワークスペースが自動的にクリーンアップされない場合があります。詳細については、 JENKINS-2111 からリンクされたチケットとディスカッションを参照してください。
Jenkinsfile(スクリプトパイプライン):
node { 1
stage('Build') { 2
// 3
}
stage('Test') { 4
// 5
}
stage('Deploy') { 6
// 7
}
}
stage
ブロックは、スクリプトパイプライン構文ではオプションです。ただし、スクリプトパイプラインにstage
ブロックを実装すると、Jenkins UIの各「ステージ」のタスク/ステップのサブセットをより明確に視覚化できます。次に、宣言を使用した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'
}
}
}