从gitlab ci

时间:2019-06-12 06:52:36

标签: linux shell docker gitlab-ci

我正在尝试在管道中的gitlab ci作业中使用名为install-nodejs.sh的外壳脚本文件安装nodejs。安装成功,并且node在install-nodejs.sh文件中显示版本,但是当我说gitlab-ci.yml文件中的node -v不能识别node命令时,我在做什么错了?

我创建了一个shell脚本来安装nodejs并设置导出路径,但是仍然无法识别该节点

install-nodejs.sh文件代码

#!/usr/bin/env bash
set -e

command -v node > /dev/null | NOT_INSTALLED=1
if [[ "$NOT_INSTALLED" != "1" ]]
then  
  mkdir /usr/local/nvm
  NVM_DIR="/usr/local/nvm"
  NODE_VERSION="10.12.0"
  NVM_INSTALL_PATH="$NVM_DIR/versions/node/v$NODE_VERSION"
  rm /bin/sh && ln -s /bin/bash /bin/sh
  curl --silent -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
  source ~/.nvm/nvm.sh
  nvm install $NODE_VERSION
  nvm alias default $NODE_VERSION
  nvm use default
  export NODE_PATH="$NVM_INSTALL_PATH/lib/node_modules"
  export PATH="$NVM_INSTALL_PATH/bin:$PATH"
fi

和gitlab.yml文件代码,我在其中调用此文件

test_install_nodejs:
  <<: *default_job_template
  stage: build
  script:
    - ./scripts/install-nodejs.sh
    - node -v
    - npm -v
    - npm install -g newman
gitlab.yml文件中的

node -v无法识别节点,但是我可以从上面的shell文件中看到节点安装成功。

1 个答案:

答案 0 :(得分:7)

在gitlab.yml文件中找不到

Node,因为在安装脚本中定义的变量在那里不可用。您可以在echo $PATH之后致电./scripts/install-nodejs.sh自己查看。您将看到PATH不包含$NVM_INSTALL_PATH/bin

原因是export会将变量导出到子进程,而不是父进程。参见Bash: export not passing variables correctly to parent

您可以使用source使它们在gitlab.yml文件中可用:

test_install_nodejs:
  <<: *default_job_template
  stage: build
  script:
    - source ./scripts/install-nodejs.sh
    - node -v
    - npm -v
    - npm install -g newman

请注意,我假设install-nodejs.sh正是您所显示的,并且不以exit结尾(否则yml脚本将在源代码之后结束)。