通过覆盖“检测到CI,跳过Git钩子安装”,在Jenkins管道作业中安装沙哑的git钩子 码头工人GitLab CIGitHub 工作流程詹金斯

问题描述

我正在尝试使用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

詹金斯

Create a global property