编写任务以运行安装脚本,通常必须使用以下命令运行: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无效,这引发了错误,并说要使用变为方法。
不胜感激!
答案 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剧本中可能会更容易。