通过覆盖“检测到 CI,跳过 Git 挂钩安装”在 Jenkins 管道作业中安装 husky git 挂钩
Posted
技术标签:
【中文标题】通过覆盖“检测到 CI,跳过 Git 挂钩安装”在 Jenkins 管道作业中安装 husky git 挂钩【英文标题】:Install husky git hooks in Jenkins pipeline job by overriding "CI detected, skipping Git hooks installation" 【发布时间】:2021-02-19 18:28:37 【问题描述】:我正在尝试使用 husky 来安装 git hooks 作为 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 hooks安装”字符串。
我在 2017 年的 husky 存储库中找到了一个 issue,开发人员解释了为什么 husky 不安装在 CI 中,但没有解释如何覆盖它,而是表明他们有兴趣了解用例用于在 CI 中运行 husky(这意味着至少在 2017 年没有办法覆盖)。
在 2019 年 6 月的 blog post 中,作者暗示 husky 根本无法在 CI 中运行,它使用 is-ci 来检测它是否在 CI 服务器上运行。 is-ci
在 husky 文档 here 中提到,他们建议使用它来检测 husky 是否在 CI 中运行并使用 HUSKY=0
禁用它。但是,我遇到的行为是 husky 已经不在 CI 中运行。我尝试在 Jenkins 作业中设置 HUSKY=1
,但没有效果。
【问题讨论】:
【参考方案1】:对于路人来说,这个问题仍然与哈士奇4+有关。在 CI 系统中你可以运行:
export HUSKY_SKIP_INSTALL=1
例如:
码头工人
ENV HUSKY_SKIP_INSTALL=1
GitLab CI
build:
script:
- export HUSKY_SKIP_INSTALL=1
- npm install
GitHub 工作流程
jobs:
build:
steps:
env:
HUSKY_SKIP_INSTALL: 1
詹金斯
Create a global property.
【讨论】:
以上是关于通过覆盖“检测到 CI,跳过 Git 挂钩安装”在 Jenkins 管道作业中安装 husky git 挂钩的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Cobertura 在通过 Eclipse 插件运行时报告 0% 覆盖率?