Jenkinsコンソールからコマンド出力を取得せずにリモートホストにスクリプトを渡そうとします。サンプルスクリプト:
ssh -o StrictHostKeyChecking=no -t -t update@dispotest bash -s 'hello' <<'END'
printf '%s world!\n' "$1"
exit
END
次の出力が生成されます。
+ sh start_stop_jboss_remote.sh
printf '%s world!\n' "$1"
exit
[update@dispotest ~]$ printf '%s world!\n' "$1"
hello world!
[update@dispotest ~]$
[update@dispotest ~]$ exit
exit
Connection to dispotest closed.
Finished: SUCCESS
私の主な問題は、2つの端の間のセクション全体がJenkinsのコンソール出力に2回でも投稿されることです。 1つ目はsshセッションを開始し、2つ目はsshセッション内にあるようです。このため、静かなように見える適切な場所を見つけるのは困難です。したがって、誰かがコンソールでスクリプト自体を隠す方法を知っていることを願っています。しかし、私は完全にダムになりたくありません。私はまだsshセッション内で実行されるコマンドの出力に興味があります。
私はたくさん試しました> /dev/null 。しかし、通常、echoの出力やシェルで実行されたコマンドも消えますが、IDはそのまま残ります。
私が試したいくつかの例
ssh -o StrictHostKeyChecking=no -t -t update@dispotest bash -s 'hello' <<'END'
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
END
少なくともバンドルコマンドを出力します。
+ sh start_stop_jboss_remote.sh
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
[update@dispotest ~]$ {
>
> printf '%s world!\n' "$1"
> exit
>
> } 2> /dev/null
hello world!
Connection to dispotest closed.
Finished: SUCCESS
実施例3
ssh -o StrictHostKeyChecking=no -t -t update@dispotest bash -s 'hello' 2> /dev/null <<'END'
printf '%s world!\n' "$1"
exit
END
出力
+ sh start_stop_jboss_remote.sh
printf '%s world!\n' "$1"
exit
[update@dispotest ~]$ printf '%s world!\n' "$1"
hello world!
[update@dispotest ~]$ exit
exit
Finished: SUCCESS
実施例4
ssh -o StrictHostKeyChecking=no -t -t update@dispotest bash -s 'hello' 2> /dev/null <<'END'
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
END
出力
+ sh start_stop_jboss_remote.sh
{
printf '%s world!\n' "$1"
exit
} 2> /dev/null
[update@dispotest ~]$ {
> printf '%s world!\n' "$1"
> exit
> } 2> /dev/null
hello world!
Finished: SUCCESS
答え1
を使用して対話型ログインシェルを呼び出すことができます-t -t
。コマンドラインから削除してください。
スクリプトに引数を渡す正しい方法bash -s
は次のとおりです。
bash -s "$COMMAND" "$SERVICENAME" <<'END_SCRIPT'
here goes
script that uses
"$1" and "$2"
END_SCRIPT
$COMMAND
スクリプトには値が渡され、これらの値はスクリプト内でおよび$SERVICENAME
として使用できます$1
。$2
スクリプト自体も引用する必要があり、これは最初にhere-documentタグを引用することによって行われます。
あなたの場合:
ssh -o StrictHostKeyChecking=no "user@$SERVER" bash -s "$COMMAND" "$SERVICENAME" <<-'ENDSSH'
echo "I'd like to see this"
if [ "$1" = "stop" ]; then
...
fi
ENDSSH
末尾の表示はENDSSH
最初の列(行の最初の列)にあるか、タブを使用してインデントする必要があります。
私に役立つ例:
ssh myhost bash -s 'hello' <<'END'
printf '%s world!\n' "$1"
END
hello world!
端末に文字列を生成します。