Monthly Archives: January 2016

在CodeDeploy脚本中使用nvm

  nvm是一个nodejs版本管理工具,它能够方便地帮助你管理多个共存的nodejs版本,并在其中进行自由切换。

  这回在AWS的CodeDeploy脚本中调用nvm自动安装和使用指定版本的nodejs,遇到了问题。如下的脚本,

image

  执行后发现,最终部署结果里并没有使用5.3.0的nodejs,而使用的仍然是系统原来安装的老版本。ssh登录机器,查看nvm ls和nvm current,却已然是5.3.0版本的nodejs了:

image

  原来nvm的所有命令,如nvm install,nvm ls都是写在~/.nvm/nvm.sh脚本里的,系统之所以能识别这些命令,是因为在当前shell里运行过source ~/.nvm/nvm.sh。而正因为已经在~/.bashrc文件中添加了该语句,所以每次ssh登录时,shell相当于已经source过了该脚本。

  而以”su -c”方式执行命令时,命令是在一个non-login,non-interactive的shell执行的,所以不会读取~/.bashrc文件,因此nvm的命令就无效了。解决办法是在CodeDeploy脚本中调用nvm命令的语句前,先使~/.nvm/nvm.sh文件source一下。比如:

image

  参考: