Jenkins はコマンド sh を認識しませんか? 質問する

Jenkins はコマンド sh を認識しませんか? 質問する

Jenkinsfile を動作させるのに苦労しています。次のテスト スクリプトを実行しようとしています:

#!/usr/bin/env groovy
node {
    stage('Build') {
        echo 'Building....'
        // Create virtualenv
        sh 'echo "hi"'
    }
    stage('Test') {
        echo 'Building....'
    }
    stage('Deploy') {
        echo 'Deploying....'
    }
}

しかし、ビルドしようとすると、このエラーが引き続き発生します:

Warning: JENKINS-41339 probably bogus PATH=/usr/lib64/ccache:/usr/lib64/ccache:$PATH; perhaps you meant to use ‘PATH+EXTRA=/something/bin’?
[test-job-jenkinsfile-pipeline] Running shell script
nohup: failed to run command `sh': No such file or directory

すべてのパイプライン プラグインを最新バージョンに更新しましたが、それでもこのエラーが発生します。何か助けはありますか?

ベストアンサー1

Jonathan の回答は、Jenkins 環境変数設定を使用して $PATH を変更するとこの問題が発生するという点で正しいですが、PATH カスタマイズを削除するだけでは、特に Jenkins に Freestyle タイプのプロジェクトがある場合は、機能が失われる可能性があります。

ご覧のとおり、宇宙の残りの部分では、次のように、$PATH を編集して、新しいものと既存の $PATH を設定するのが一般的です。

PATH=/opt/blah/bin:$PATH

これは、/opt/blah/binすでにあるものの先頭に追加されます$PATH。したがって、最終的には$PATH次のようになります。/opt/blah/bin:/usr/local/bin:/usr/sbin:/bin(もちろんこれは単なる例です)

これは、Jenkins Freestyle プロジェクトでは実際に問題なく機能します。ただし、Pipeline プロジェクトの場合、Jenkins は何らかの理由で、設定した変数内の $PATH 変数を実際に評価して置き換えません。そのため、文字通りパスが/opt/blah/bin:$PATH- になり、以前あったものは $PATH に残っていません。

どうやら、そのバグを修正する代わりに、Jenkins プロジェクトは (1) 状況を検出して奇妙な警告 (「警告: JENKINS-41339 はおそらく偽物です」) を表示して、そのチケットを確認する必要があることを示唆し、(2) PATH への追加を定義するまったく新しい方法を作成することを決定しました。これは、すべてを壊すことなく $PATH をカスタマイズできるため、問題に対する最善の解決策です。これは、Jenkins -> システムの構成で実行します。

  • という変数を定義します。EXTRAPATH+EXTRAは、どうやら何でも構いません。

  • その変数に、PATH の追加内容を入力します。したがって、上記の例では、PATH何も設定せず、次のように設定します。PATH+EXTRA=/opt/blah/bin

  • ここで、定義された変数をすべて削除しますPATH

ある関連チケットこれは Jenkins のどこかに文書化されていますが、必要な場所 (Jenkins の管理 -> システムの構成) には文書化されていません。

おすすめ記事