Run shell scripts as root though Jenkins

I have a EC2 instance running. How can I run commands with sudo through Jenkins? When I try sudo touch /home/ec2-user/foo.bar, I get the following error: sudo: no tty present and no askpass program specified.

What am I doing wrong?


Solution 1:

By default sudo cannot be used without a TTY. In order to do so:

  • Disable 'requiretty' in sudoers (using visudo)
    • This should amount to commenting out 'Defaults requiretty' (using visudo)

  • Ensure that your user is able to login without entering a password:
    • Set 'NOPASSWD' in sudoers
    • Create the user if the user does not exist

  • Set visiblepw - this will allow sudo to work, even if the password entered is displayed
    • (required in some cases when echo cannot be disabled).