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回実行せよ。