Search code examples
jenkinsansiblejenkins-pipelineansible-2.xshutdown

Handling Jenkins status failure from exit code of Ansible plabook


Looking to handle system reboot on Linux with Ansible & running it as part of playbook along with other asks.

Seeing exit code as 4 & due to which Jenkins job is resulting in failure, though it has rebooted the machine.

Is there a way to handle this failure either from calling of ansible playbook from Jenkins or from within the playbook.

Tried even something like below apart from plain reboot: task as well, but still no luck. Kindly suggest alternative method of handling this.

- name: Reboot the machine
  shell: |
    shutdown -r now && exit 0 
  ...
  ....

Error is as per below

Reboot the machine ---------------------------------------- 1.02s
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 4
Finished: FAILURE

Solution

  • According the given description, task and error message

    ERROR: script returned exit code 4
    

    the error itself means Error Code 4 EINTR Interrupted system call or even Network Error in your example, the devices which Ansible connect to are going to restart faster than Ansible and the module shell can maintain his own connection. Meaning, close and disconnect the session.

    You may try with

    - name: Schedule reboot in 1 min
      shell:
        cmd: "shutdown -r +1"
      register: result
    
    - name: Show result
      debug:
        var: result
    

    or better reboot module – Reboot a machine.

    Further Reading

    about an approach which was used in the past for Linux systems

    and