在已经使用了成为,成为_用户和成为_方法之后,脚本需要作为根错误运行

时间:2019-04-20 04:03:22

标签: ansible ansible-2.x

编写任务以运行安装脚本,通常必须使用以下命令运行:sudo ./install.sh

我的任务如下:

    - name: Run the installer
      shell: "{{ tempdir_output.path }}/device_manager_osx*/install.sh"
      become: true
      become_method: sudo
      become_user: jenkins
      when: dm_version.stdout != device_manager_version

我得到的错误是:

TASK [Run the installer] **************************************************************************************************************
fatal: [mac-station-xx.firmware.xxxxxxx.com]: FAILED! => {"changed": true, "cmd": "/var/folders/l7/wjqfy72x1p7dd2d11qt6s_6h0000gp/T/ansible.ZuX4_Ttemp/device_manager_osx*/install.sh", "delta": "0:00:00.073814", "end": "2019-04-19 20:47:38.723407", "msg": "non-zero return code", "rc": 1, "start": "2019-04-19 20:47:38.649593", "stderr": "", "stderr_lines": [], "stdout": "ERROR: This script needs to be run as root.\nExample- sudo install.sh", "stdout_lines": ["ERROR: This script needs to be run as root.", "Example- sudo install.sh"]}

我尝试过:

  • 仅使用become: true来获得root权限,但是安装程序失败,因为它必须在jenkins用户下安装。

  • 在shell ansible代码块中添加sudo无效,这引发了错误,并说要使用变为方法。

不胜感激!

2 个答案:

答案 0 :(得分:0)

”必须与sudo一起运行,而“必须在jenkins用户下安装”。对我来说听起来像矛盾。

应该以某些普通用户身份运行并且一部分需要以超级用户身份(sudo)运行的安装脚本的想法似乎不够统一。 这意味着用户至少授予了sudo权限,无论如何,必须先确保此权限。 (詹金斯通常不是) 更好的方法是将安装分解为用户和根部分,然后将它们作为单独的任务运行-这样,您就不会遇到“烦恼”的情况,我猜这无法通过其设计来解决。

或者,您可以考虑相反的情况 当安装以root身份启动时,并在需要时对jenkins进行sudo。

答案 1 :(得分:0)

Ansible输出中的一些文字似乎来自脚本本身:

ERROR: This script needs to be run as root.
Example- sudo install.sh

不知道install.sh脚本在做什么,很难说,但是我怀疑它期望以“ root”用户身份运行命令。

如果您或您的团队维护install.sh,将这些步骤转移到Ansible剧本中可能会更容易。