Jenkinsでsudoを呼び出す

Jenkinsでsudoを呼び出す

abcsudoアクセスが制限されたユーザーを持つビルドシステムがあります。ソースコードを確認してビルドスクリプトを実行すると、正常に動作します。ビルドスクリプトにsudo指定されていない呼び出し「sudo:ttyが存在せず、Askpassプログラムが指定されていません」が含まれています。ただし、スレーブとして追加されたビルドマシンでJenkinsと同じ操作を実行すると、「sudo:ttyが存在せず、Askpassプログラムが指定されていません」というメッセージが表示されます。

Default requirettyファイル内でコメントを付けるための解決策が見つかりました/etc/sudoers。ただし、ファイルにアクセスできません。

この問題をどのように克服できますか?

答え1

sudoルートパスワードの入力を求めようとしましたが、擬似ttyが割り当てられていないため失敗しました。

/etc/sudoers rootとしてログインするか(or:)で次のルールを設定する必要がありますsudo visudo

# Members of the admin group may gain root privileges.
%admin  ALL=(ALL) NOPASSWD:ALL

次に、Jenkinsユーザーがadminグループ(またはwheel)に属していることを確認します。

理想的には(より安全に)、root権限を次のように指定できる特定のコマンドに制限します。%admin ALL=(ALL) NOPASSWD:/path/to/program

答え2

2つのオプションがあります。前述のように、Defaults requiretty/etc/sudoersの設定をコメントアウトするか、pseudo-tty割り当て(-t)パラメータを使用しますssh

Jenkinsスクリプトで次のことを試してください。

ssh -t 127.0.0.1 "sudo command"

既知のホストにエントリを追加するには、事前ssh共有キーを直接設定して手動で一度実行する必要がありますが、パラメータを追加してそれを上書きすることもでき-o StrictHostKeyChecking=noますssh

答え3

これを行う簡単な方法
ここに画像の説明を入力してください。

$ sudo visudo
## Now add the below lines in your sudoers file :
jenkins ALL=(ALL) NOPASSWD: ALL

$service jenkins start

答え4

SSH経由でコマンドを実行する場合は、「Exec in pty」オプションを確認する必要があります。 ここに画像の説明を入力してください。

関連情報