Jenkinsパイプラインif elseが動作しない
2023-08-08 07:01:43
質問
私はjenkinsのサンプルパイプラインを作成しています、以下はそのコードです。
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo hello'
}
}
stage('test1') {
steps {
sh 'echo $TEST'
}
}
stage('test3') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
}
このパイプラインは以下のようなエラーログが出力され、失敗します。
Started by user admin
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 15: Not a valid stage section definition: "if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}". Some extra configuration is required. @ line 15, column 9.
stage('test3') {
^
WorkflowScript: 15: Nothing to execute within stage "test3" @ line 15, column 9.
stage('test3') {
^
しかし、次の例を実行すると を実行すると、このURLから を実行すると、正常に実行され、elseの部分が表示されます。
node {
stage('Example') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
唯一の違いは、動作例では
stages
がありませんが、私の場合はあります。
何が間違っているのか、どなたかご指摘ください。
どのように解決するのですか?
最初の試みは宣言型パイプライン、2番目の試みはスクリプト型パイプラインを使用しています。
if
をトップレベルのステップとして宣言することはできません。
script
のステップでラップする必要があります。以下は、動作するdeclarativeバージョンです。
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo hello'
}
}
stage('test1') {
steps {
sh 'echo $TEST'
}
}
stage('test3') {
steps {
script {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
}
}
}
を使用することで、これを簡略化し、if文を回避できる可能性があります(elseが不要な限りは)。参照:"whenディレクティブ" at https://jenkins.io/doc/book/pipeline/syntax/ jenkinsのrest apiを使えば、jenkinsファイルを検証することもできます。
関連
-
[解決済み] Jenkinsを手動で再起動する方法は?
-
[解決済み] Jenkinsパイプライン:エージェントとノードの違い?
-
[解決済み] Jenkinsパイプラインにタイムアウトステップを追加する方法
-
[解決済み] パイプラインでsh DSLコマンドのstdoutをキャプチャすることは可能ですか?
-
[解決済み] 5 * * * *」ではなく「H * * *」で荷重を均等に分散させる
-
[解決済み] jenkinsパイプラインにファイルが存在するかどうかをチェックする
-
[解決済み] Jenkinsのマルチブランチパイプラインで "定期的にビルドする"
-
[解決済み] Jenkins/Hudsonのビルド履歴をクリアするにはどうすればよいですか?
-
[解決済み] Parameterized Buildでパラメータにアクセスするには?
-
[解決済み] Jenkinsのmultibranchパイプラインのbranch name変数とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jenkinsパイプラインの条件付きステップ/ステージ
-
[解決済み] Jenkinsは、実行するジョブの設定ファイルをどこに保存しますか?
-
[解決済み] Jenkinsパイプラインにタイムアウトステップを追加する方法
-
[解決済み] 宣言的なJenkinsパイプラインのステージ間で変数を渡すにはどうしたらいいですか?
-
[解決済み] Jenkins / Hudsonの環境変数
-
[解決済み] jenkinsパイプラインにファイルが存在するかどうかをチェックする
-
[解決済み] Jenkinsのログインタイムアウトを増加させる
-
[解決済み] Jenkins/Hudsonのビルド履歴をクリアするにはどうすればよいですか?
-
[解決済み] Parameterized Buildでパラメータにアクセスするには?
-
[解決済み] Jenkinsを安全にシャットダウンする方法は?