序
当你管理着多个项目时,有没有遇到以下提示?
1 | Syntax Error: Error: Missing binding D:\works\test-product\node_modules\node-sass\vendor\win32-x64-57\binding.node |
这是在执行程序的时候,本地运行版本与node-sass安装版本不一致导致的。
有这种情况的朋友,大多数应该都有使用上nvm吧?
没错,管理Node版本目前最好的工具就是nvm[^1]。
分享我的发现、想法与心得
当你管理着多个项目时,有没有遇到以下提示?
1 | Syntax Error: Error: Missing binding D:\works\test-product\node_modules\node-sass\vendor\win32-x64-57\binding.node |
这是在执行程序的时候,本地运行版本与node-sass安装版本不一致导致的。
有这种情况的朋友,大多数应该都有使用上nvm吧?
没错,管理Node版本目前最好的工具就是nvm[^1]。
起因是我使用 zoni/obsidian-export 来输出文件。该工具在输出内容时,同目录下的媒体内容带来的麻烦更少。并在 obsidian-local-images的issues#9 中看到类似的问题。为此我决定挑战一下,修改源码。
某个项目是通过构建生产版本内容至git仓库的release分支来实现交付工作。
我对于此类交付情况,一般会在本地项目创建名为releases/
的目录。在使用脚本将构建内容生产到releases
目录后,通过手动提交推送代码来完成整个交付过程。
在使用脚本来完成提交推送生产内容时,遇到下面错误:
1 | ✔ npm run build |
上面是release-it完成发版后的后续脚本执行结果,下面是具体执行脚本:
1 | "hooks":{ |
结合release-it来看,很显然是git的工作目录依然停留在项目根。cd releases/
命令并没有改变git的执行目录,所以导致提交命令出错。
要改善这个问题,需要改变git的工作目录。需要同时设置--git-dir
和--work-tree
对应目录。当然也可选择使用GIT_DIR
和GIT_WORK_TREE
两个全局变量来控制,具体看你的情况来使用。
使用例子如下:
1 | # 例子 |
需要注意的是,--git-dir
和--work-tree
两个变量需要同时设置,才能改变操作的具体目录及git历史。
经过《自动产出changelog-第一节:规范提交代码》与《自动产出changelog-第二节:自动产出》两节内容的记录后,日志能实现一键产出。在小项目中未接入持续部署的,本地跑release-it命令就能简单实现版本标记、产出日志、推送git与npm的流程,可说是一步到位。公司项目基于Drone持续部署工具的研发流程下,需要将上面提及的步骤结合到持续部署工具进行。
在使用 verdaccio 进行管理私有模块的管理后,在部署构建Docker镜像时,却提示没有权限访问私有包。这该如何解决?
答案很简单!
在项目中添加 .npmrc
来管理私有包的来源。在构建Docker镜像时,传入授权token的方式来实现授权安装。最后将 .npmrc
删除就能正常运行了。
1 | FROM node |
然后跑构建命令:
1 | # `${NPM_TOKEN}`这段内容可以键入你的本地登录后的token |
假如跑构建命令,出现下面错误提示:
1 | Error: Failed to replace env in config: ${NPM_TOKEN} |
其原因是运行时,没有把.npmrc
文件删除。.npmrc
文件只在Docker镜像构建环节时需要,运行时下由于缺少${NPM_TOKEN}
环境变量而报错。Dockerfile构建脚本中,在完成npm install
后,记得删除.npmrc
文件。
来源:
运维同事:今天运维同事问
drone-runner-docker
这个容器是不是你在用,腾讯安装报毒drone里面有木马。_我_:这个容器实例是CI/CD工具持续交付的核心服务来,停掉影响很大。这样吧,你提供多点信息我找一下解决办法。
后来运维同事提供出了更多信息,最终指向名叫tmate的这个程序。
到底是不是木马我也不是很清楚,抱着找一找看看官方是怎样说的心态。
那它到底是不是木马呢?官方回答:不是
下面是原文:Detected Linux/Hildegard.A!MTB in drone/drone-runner-docker:1 - Support - Drone
官方回答是这样的:
这看起来像是一个误报,其中 tmate 3 被您的扫描仪标记。 Tmate 是一个远程会话工具,包含在 docker 镜像中。 它促进了我们的远程调试功能,您可以在此处阅读更多信息: https://discourse.drone.io/t/feature-preview-debug-mode/8344
Tmate 是一个合法的工具,被 Travis 等其他 CI 提供者使用: https://docs.travis-ci.com/user/running-build-in-debug-mode/#connecting-to-the-job-running-in-the-debug-mode
如果您查看您提供的 Virus Total 仪表板,您会发现许多提供商都将其标记为潜在威胁而非病毒 (Not-a-virus:HEUR:RemoteAdmin.Linux.Tmate.a)。 这是有道理的,因为尽管 Tmate 是一个具有合法用途的合法工具,但攻击者将 Tmate 与木马恶意软件捆绑在一起以获取其反向 shell 功能 [1],因此它被标记为潜在威胁。
[1] Hildegard: New TeamTNT Cryptojacking Malware Targeting Kubernetes 1
tmate工具并不是木马,只是大多木马会包含这个工具来进行会话通讯。所以当清楚你使用的服务情况时,大多数下都是误报。
但是每个人的情况并不一样。如果你和原文中提问的人一样,来自安全部门的诉求时,大多很难解释清楚。
在原文中也提供了解决办法:在drone-runner-docker镜像的基础下删除tmate二进制文件,并封装成新的镜像。虽然无法使用Drone的远程调试功能,却能避免误报的情况。
1 | FROM drone/drone-runner-docker:1-linux-amd64 as drone |
接上一篇《自动产出changelog-第一节:规范提交代码》调研的后续,本文将基于 angular.js格式 的提交内容围绕自动化产出进行后续调研。研究的方向为产出内容的工具是否支持各种自定义特性,能否帮助我们实现团队的风格及自动化过程中的一些问题。