仅当package.json有更改时才在Jenkins中执行npm install

时间:2015-07-06 08:53:09

标签: maven jenkins

我正在使用Jenkins构建(mvn)我的项目。 Jenkins配置为运行npm installbower install。因此,每次构建项目时,npm install都会运行,因此每次构建时间都更长。所以我想只有在package.json中有任何更改时才会运行npm install,例如添加新包,更改版本或删除任何内容等。 我搜索了很多东西以找到实现这一目标的方法,但失败了。

我可以用任何插件来实现这个目标吗?

任何人都可以帮我找到一种方法吗?

提前致谢。

3 个答案:

答案 0 :(得分:4)

我和你有同样的问题并写了npm-install-changed

使用npm install -g npm-install-changed安装,并运行npm-install-changed而不是通常的npm install。 让我知道它是否适合你。

答案 1 :(得分:0)

如果您使用的是Pipeline syntax,则在构建的SCM changeset包含以下内容的情况下,可以使用内置条件执行阶段一个或多个匹配给定字符串或glob的文件。示例:

stage('Install dependencies') {
  when {
    changeset "package.json"
  }
  steps {
      sh 'npm install'
  }
}

when指令允许管道根据给定条件确定是否应执行该阶段。

仅当代码已更改时,您也可以运行npm installnpm build

stage('Build') {
  when {
    anyOf {
      changeset "src/**/*.ts"
      changeset "package.json"
    }
  }
  steps {
      sh 'npm install'
      sh 'npm build'
  }
}

当至少一个嵌套条件为true时,anyOf执行阶段

希望有帮助

答案 2 :(得分:0)

如果使用Git,我们可以使用Jenkins环境变量,并运行这样的命令

git diff --name-only $GIT_PREVIOUS_COMMIT $GIT_COMMIT | grep package.json && npm install

仅当package.json发生变化时,此程序才会运行NPM安装。