web-dev-qa-db-ja.com

jenkinsパイプラインビルドログでコマンド出力を無効にする方法

パイプラインのスクリプト作成にJenkinsfileを使用しています。

ビルドログで実行されたシェルコマンドの印刷を無効にする方法はありますか?

ここに、ジェンキンスパイプラインの簡単な例を示します。

node{
  stage ("Example") {
    sh('echo shellscript.sh arg1 arg2')
    sh('echo shellscript.sh arg3 arg4')        
  }
}

コンソールログに次の出力が生成されます。

[Pipeline] node
Running on master in /var/lib/jenkins/workspace/testpipeline
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
[testpipeline] Running Shell script
+ echo shellscript.sh arg1 arg2  
shellscript.sh arg1 arg2
[Pipeline] sh
[testpipeline] Running Shell script
+ echo shellscript.sh arg3 arg4
shellscript.sh arg3 arg4
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

基本的に、コマンド自体の印刷を無効にしたいと思います。

+ echo shellscript.sh arg1 arg2
+ echo shellscript.sh arg3 arg4
22
Vasyl Keretsman

デフォルトでは、Jenkinsはフラグ_-xe_を使用してシェルスクリプトを起動します。 _-x_は追加のロギングを有効にします。 _-e_は、内部のコマンドがゼロ以外の終了ステータスを返す場合、スクリプトを終了させます。フラグをリセットするには、2つのオプションをお勧めします。

  1. スクリプトの本文で_set +x_を呼び出します。
  2. _-x_なしでカスタムShebang行を渡す:sh('#!/bin/sh -e\n' + 'echo shellscript.sh arg1 arg2')

2番目のオプションについては、便利なラッパー関数を定義して、スクリプトにカスタムShebangを追加してからshを呼び出すことができます

_def mysh(cmd) {
    sh('#!/bin/sh -e\n' + cmd)
}
_
40
izzekil

後処理が必要な場合。ここで提供されている元のソリューションを拡張しました。

例えば

def output = printWithNoTrace("ping -c 1 $FQDN | grep PING).trim()

ラッパー関数

def printWithNoTrace(cmd) {
steps.sh (script: '#!/bin/sh -e\n'+ cmd,returnStdout: true)
        }

シェルの出力はtrim()に返され、「output」に保存されます

2
upHiller