问题描述
我正在尝试使用husky安装git钩子,作为Jenkins管道作业的一部分。
我已将其添加到Jenkins工作中:
npm install husky --save-dev
但是当作业运行时,我在Jenkins输出中看到了这一点:
> node-sass@4.14.1 install /home/jenkins/agent/workspace/<branch_name>/node_modules/node-sass
> node scripts/install.js
Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/linux_musl-x64-72_binding.node
Download complete
Binary saved to /home/jenkins/agent/workspace/<branch_name>/node_modules/node-sass/vendor/linux_musl-x64-72/binding.node
Caching binary to /root/.npm/node-sass/4.14.1/linux_musl-x64-72_binding.node
> husky@4.3.0 install /home/jenkins/agent/workspace/<branch_name>/node_modules/husky
> node husky install
husky > Setting up git hooks
CI detected,skipping Git hooks installation.
husky > Done
...,并且从未创建.git/hooks/precommit
挂钩文件。
研究笔记疑难解答:
-
在husky v4 documentation中显示“默认情况下,Husky不会安装在CI服务器上。” 我找不到任何有关如何覆盖该默认行为的文档。
-
在searching the repo code时,我什至找不到代码中的“检测到CI,跳过Git钩子安装” 字符串。
-
我在2017年的哈士奇仓库中发现了一个issue,开发人员在其中解释了为什么不将哈士奇安装在CI中,但没有解释如何覆盖它,而是表明他们对此感兴趣在了解使用CI运行哈士奇的用例时(暗示至少在2017年没有方法可以替代)。
-
在2019年6月发布的blog post中,作者暗示哈士奇根本无法在CI中运行,并且它使用is-ci检测它是否在CI服务器上运行。赫斯基文档here中提到了
is-ci
,他们建议使用它来检测赫斯基是否正在CI中运行并使用HUSKY=0
来禁用它。但是,我遇到的行为是沙哑不在CI中运行。我曾尝试在Jenkins工作中设置HUSKY=1
,但这没有任何效果。
解决方法
对于路人来说,这个问题仍然与 husky 4+ 相关。在 CI 系统中,您可以运行:
export HUSKY_SKIP_INSTALL=1
例如:
码头工人
ENV HUSKY_SKIP_INSTALL=1
GitLab CI
build:
variables:
HUSKY_SKIP_INSTALL: 1
script:
- npm install
GitHub 工作流程
jobs:
build:
steps:
env:
HUSKY_SKIP_INSTALL: 1