【问题标题】:Ansible install node with nvmAnsible 使用 nvm 安装节点
【发布时间】:2018-12-03 15:08:13
【问题描述】:

我正在寻找一种通过 ansible 和 nvm 安装给定版本节点的方法,nvm 的安装按预期工作,因为如果我与 root 用户连接,我可以执行命令 nvm install 8.11.3 但是同样的命令不适用于 Ansible,我不明白为什么。

---
- name: Install nvm
  git: repo=https://github.com/creationix/nvm.git dest=~/.nvm version=v0.33.11
  tags: nvm

- name: Source nvm in ~/.{{ item }}
  lineinfile: >
      dest=~/.{{ item }}
      line="source ~/.nvm/nvm.sh"
      create=yes
  tags: nvm
  with_items:
    - bashrc
    - profile

- name: Install node and set version
  become: yes
  become_user: root
  shell: nvm install 8.11.3
...

错误日志

TASK [node : Install node and set version] *************************************************************************************
    fatal: [51.15.128.164]: FAILED! => {"changed": true, "cmd": "nvm install 8.11.3", "delta": "0:00:00.005883", "end": "2018-12-03 15:05:10.394433", "msg": "non-zero return code", "rc": 127, "start": "2018-12-03 15:05:10.388550", "stderr": "/bin/sh: 1: nvm: not found", "stderr_lines": ["/bin/sh: 1: nvm: not found"], "stdout": "", "stdout_lines": []}
        to retry, use: --limit .../.../ansible/stater-debian/playbook.retry

【问题讨论】:

    标签: node.js ansible nvm


    【解决方案1】:

    没关系,下面的配置就可以了

    - name: Install node and set version
      become: yes
      become_user: root
      shell: "source /root/.nvm/nvm.sh && nvm install 8.11.3" 
      args:
        executable: /bin/bash
    

    【讨论】:

    • 你住在哪里我想送你一份礼物
    • 这种直接调用nvm.sh 脚本来自bash(不是sh)在Dockerfiles 中也很有帮助:RUN bash -c 'source $HOME/.nvm/nvm.sh && nvm install node'
    【解决方案2】:

    我认为你需要的输出中的线索是:

    "/bin/sh: 1: nvm: 未找到"

    要运行命令而不包含该命令的完整路径(即nvm 而不是/the/dir/nvm/is/installed/in/nvm),则包含该命令的目录必须位于运行该命令的 shell 的 $PATH 环境变量中.

    在这种情况下,与运行交互式命令的 shell 相比,Ansible 生成的 shell 似乎不存在这种情况。更改:

    - name: Install node and set version
      become: yes
      become_user: root
      shell: nvm install 8.11.3
    

    - name: Install node and set version
      become: yes
      become_user: root
      shell: /full/path/to/nvm install 8.11.3
    

    如果您不知道用什么代替“/full/path/to”,请尝试以下任一方法:

    which nvm
    

    find / -name nvm
    

    【讨论】:

    • 我也不知道为什么但是 which 和 find 没有返回任何东西,我唯一与 nvm 相关的地方是在 /root 目录中
    • nvm 是一个函数,which nvm 什么也不返回。试试type nvm,然后你会看到。似乎一个函数只能在交互式 shell 中执行。
    【解决方案3】:

    我只会在下面发帖,因为这样的帖子有数百个。

    
    - name: Install node
        become: true
        become_user: root
        shell: "source /root/.nvm/nvm.sh && nvm install {{ personal_node_version }} && nvm alias default {{ personal_node_version }}"                                 
        args:
          executable: /bin/bash
    

    为我工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 2019-03-04
      相关资源
      最近更新 更多