Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
团队城市“;“最小生成代理”;Docker图像-“;npm:找不到“;Linux问题?_Linux_Docker_Npm_Teamcity_Nvm - Fatal编程技术网

团队城市“;“最小生成代理”;Docker图像-“;npm:找不到“;Linux问题?

团队城市“;“最小生成代理”;Docker图像-“;npm:找不到“;Linux问题?,linux,docker,npm,teamcity,nvm,Linux,Docker,Npm,Teamcity,Nvm,首先,我认为这更像是一个Linux问题,因为问题似乎出现在一个Linux风格的Docker容器上,但我很高兴接受我可以对team city配置做些什么来克服这一点 我对Linux、Docker或node/npm也不是很有经验,尽管我确实有很多开发经验,并且通常对命令行界面非常熟悉 背景 我们目前已将Team City设置为构建服务器,用于构建各种项目: .Net框架 .Net核心 角型CLI 两个简单的网站使用节点包从降价生成HTML 服务器作为Docker容器运行,在Windows服务器盒

首先,我认为这更像是一个Linux问题,因为问题似乎出现在一个Linux风格的Docker容器上,但我很高兴接受我可以对team city配置做些什么来克服这一点

我对Linux、Docker或node/npm也不是很有经验,尽管我确实有很多开发经验,并且通常对命令行界面非常熟悉

背景 我们目前已将Team City设置为构建服务器,用于构建各种项目:

  • .Net框架
  • .Net核心
  • 角型CLI
  • 两个简单的网站使用节点包从降价生成HTML
服务器作为Docker容器运行,在Windows服务器盒上使用Docker for Windows,运行良好。
我们有一个Windows10构建代理(一个VM),它也可以正常工作,并且可以很好地构建所有的.Net和.Net核心内容

simple docs site stuff主要使用markdown to html节点包,因此其构建步骤只需获取所有源.md文件并使用markdown to html编译为html,再加上使用其他一些npm包进行SASS编译和js缩小等。没有实际的节点代码,只有一些jQuery。为了不占用另一个代理,并且因为这个东西可以在Linux上愉快地运行,我想让它在一个小的docker映像上运行,而不是在某个地方运行一个完整的VM构建代理

我之前成功地使用了node.js team city agent docker映像(无论是
Jacobbedk/teamcity agent nodejs
还是
omez/teamcity agent nodejs
-记不得),虽然我在构建脚本中全局安装一些npm包时遇到了问题,但它确实工作了一段时间,这意味着我必须将bash终端放入容器中并运行一些手动npm命令。我还认为我必须运行
apt get install zip
,才能使压缩步骤正常工作。这在一段时间(几周)内效果良好

我在其中一个简单的项目中添加了一些额外的JS内容,在尝试构建时突然出现了错误。我(可能是愚蠢地)认为这可能是由于容器中有较旧版本的node和/或npm等,所以我尝试通过在容器中安装bashshell、安装nvm和更新node.js&npm来更新它

这最终导致了一个相当破碎的容器(节点错误),因此我想我应该重新开始,但实际上是从
jetbrains/minimal build agent
Docker映像开始,目的是为我们的需要专门定制一个好的映像(因为我找不到一个非常最新的预存映像)

通过在主机上执行以下操作,我已在build agent容器上直接运行Bash shell:

docker exec -it basicagent /bin/bash
然后,我安装了nvm、Python(节点安装步骤所需)和节点:

  • curl-o-https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh |bash
  • export NVM_DIR=“$HOME/.NVM”
  • [-s“$NVM\u DIR/NVM.sh”]&&&&\。“$NVM_DIR/NVM.sh”#这将加载NVM
  • [-s“$NVM\u DIR/bash\u completion”]&&&\。“$NVM_DIR/bash_completion”#这将加载NVM bash_completion
  • apt获取更新
  • apt get install python 3.6
  • nvm安装v8.11.1
    (与我的开发机器上的版本相匹配)
  • npm安装-g标记文件夹到html
    (我以前发现我必须全局安装npm包)
  • apt get install zip
    (仅用于压缩工件的构建步骤)
如果我现在运行(通过bashshell)
npm-version
5.6

如果我尝试在命令行步骤中运行使用npm的生成,则生成日志中会出现以下错误:
/opt/buildagent/temp/agentTmp/custom_script2764770419520852926:npm:未找到

我想知道team city agent进程使用的用户/路径与我在Bash中使用的用户/路径是否存在问题,因此我在构建脚本中添加了以下内容:

echo PATH = $PATH
echo user var = $USER
echo user via 'id':
id -u -n
其输出为:

PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
user var =
user via id:
root
因此,它以root的身份运行代理,并且在$PATH中根本没有节点

但是,如果我直接从Bash运行上述命令,我可以看到我是root,但我的$PATH不同:

PATH=/root/.nvm/versions/node/v8.11.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin

root


因此,我现在感到困惑:我重新启动了容器,但这没有任何效果-似乎当我以root身份手动登录时,我设置了特定的路径,但当构建代理服务以root身份运行时,情况就不同了。

我不知道为什么会发生这种情况,但我基本上解决了这个问题,添加了:
export PATH=$PATH:/root/.nvm/versions/node/v8.11.1/bin

在脚本中使用npm的每个构建步骤的顶部。在我看来,这似乎是一件相当愚蠢的事情——考虑到以前在没有这个的情况下它也能工作,唯一真正的区别可能是linux容器的味道略有不同。AFAIK最初的构建代理容器是基于jetbrains最小构建代理的,所以除非他们改变了基于它的内容,否则应该大致相同

我还不得不将节点缩小构建步骤中使用的压缩器从gcc(google closure compiler)更改为babel minify,因为前者基本上是无限期挂起的,但这是一个单独的问题(虽然也有一些问题是好的,但现在不是…)

感谢所有花时间阅读的人。。。虽然我真的很想知道有一天我是否会用尽我自己的研究选择,最后去问互联网,并真正得到别人的回应——出于某种原因,每当我不得不问的时候,似乎总是没有人回答