Jenkinsにsudoさせる

/ Jenkins

Jenkinsのフリースタイルビルドでsudoが必要なコマンドを実行させる。

準備

sudo passwd jenkins
sudo usermod -aG sudo jenkins

これでユーザjenkinsにsudo権限を与えてパスワード認証が出来るようにしておく。ここで、仮にjenkinsにpasswd_of_jenkinsというパスワードを設定したとする。

Jenkinsのフリースタイルビルド、設定画面で実行シェルに次を入力。ここでは仮にsudo apt updateさせてみる。

echo passwd_of_jenkins | sudo -S apt update

これでビルド実行する。次のような画面が出ることがある。

Started by user JENKINSUSER
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/ubuntu-update-packages
[ubuntu-update-packages] $ /bin/sh -xe /tmp/jenkins638494167647857026.sh
+ echo passwd_of_jenkins
+ sudo -S apt update
[sudo] password for jenkins: jenkins is not in the sudoers file.  This incident will be reported.
Build step 'Execute shell' marked build as failure
Finished: FAILURE

これはjenkinsがsudersにいないと言っているが、下記のような記述が/etc/sudoersにある場合はこのことは直接の原因でない。

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

jenkinsユーザにグループsudoを追加した後にJenkinsインスタンスが起動しっぱなしのためにsudoグループがJenkins実行中に反映されていないことが直接の原因と思われる。したがって

sudo systemctl restart jenkins

によって解決する。次のようにsudo apt updateができていることがわかる。

Started by timer
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/ubuntu-update-packages
[ubuntu-update-packages] $ /bin/sh -xe /tmp/jenkins2911787560942795430.sh
+ echo passwd_of_jenkins
+ sudo -S apt update
[sudo] password for jenkins: 
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Hit:1 http://jp.archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Hit:3 https://storage.googleapis.com/bazel-apt stable InRelease
Ign:4 https://pkg.jenkins.io/debian-stable binary/ InRelease
Hit:5 https://pkg.jenkins.io/debian-stable binary/ Release
Get:6 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Hit:7 https://download.docker.com/linux/ubuntu focal InRelease
Hit:9 http://security.ubuntu.com/ubuntu jammy-security InRelease
Fetched 214 kB in 1s (255 kB/s)
Reading package lists...
Building dependency tree...
Reading state information...
1 package can be upgraded. Run 'apt list --upgradable' to see it.
Finished: SUCCESS

余談

定期的に実行で次のように入れておく。

H H(0-4) * * *

意味は、毎日0:00~4:00の間の好きな時間帯に1回実行せよ。