Jenkins(在Docker容器中)-由于... npm WARN tar ENOENT:无此类文件或目录,futime,导致npm安装失败

时间:2019-01-04 18:52:58

标签: docker jenkins npm

在Jenkins Docker容器中运行“ npm install”时,出现以下错误:

[INFO] --- exec-maven-plugin:1.6.0:exec (npm install) @ geosolutions ---
npm WARN tar ENOENT: no such file or directory, open '/var/jenkins_home/workspace/aproject2/node_modules/.staging/schema-utils-bdceae78/package.json'
npm WARN tar ENOENT: no such file or directory, open '/var/jenkins_home/workspace/aproject2/node_modules/.staging/schema-utils-bdceae78/README.md'
...(and many lines like) ...
npm WARN tar ENOENT: no such file or directory, futime
npm WARN tar ENOENT: no such file or directory, futime
npm WARN tar ENOENT: no such file or directory, futime
npm WARN tar ENOENT: no such file or directory, futime

没有生成“ node_modules”。 node_modules / .staging中只有几个。

进入Jenkins Docker容器时,我可以通过手动执行以下操作来解决此问题:

  • rm -rf node_modules
  • rm -f package-lock.json
  • npm安装

下次,我必须跳过“ npm install”步骤,因此直接从“ ng build”开始。然后一切正常。当然,这不是一个不错的解决方法。 因此,这不是重复的问题。

我如何进行良好的“ npm安装”?

在我的Jenkins容器中,我安装了Node / Npm。 Npm为6.5,节点为8、9、10或11。所有节点均为最新的npm 6.5。

我的Jenkins图像包含以下代码,用于向其中添加npm / nodejs:

RUN apt-get install -y curl \
  && curl -sL https://deb.nodesource.com/setup_9.x | bash - \
  && apt-get install -y nodejs \
  && curl -L https://www.npmjs.com/install.sh | sh

更新:今天我在办公室遇到同样的问题。两个不同的Jenkinsjobs使用“ npm install”启动了完全相同的Maven任务。一个可以,另一个不可以。一个Jenkinsjob是通过多分支开始的,另一个是常规管道。嗯,很奇怪。

我认为这与操作环境有关,因此$ PATH,环境变量等。

1 个答案:

答案 0 :(得分:5)

在与许多专家交谈并阅读了很多论坛帖子之后,以下是拟议的“解决方法”。很多人使用该解决方法。我希望您有比此解决方案更好的解决方案。至少,此替代方法有效。

按照解决方法,在Maven中构建Angular可以像这样:首先清除工作区,尤其是删除node_modules文件夹和package-lock.json文件。然后开始npm安装和构建操作。

如果在创建第一个构建版本后很着急,只需添加属性“ maven.exec.skip”,然后使用-P maven.exec.skip = true启动Maven。然后跳过清洁和npm安装步骤;-)

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
    <executions>
      <execution>
        <id>npm clear workspace</id>
        <goals>
          <goal>exec</goal>
        </goals>
        <phase>initialize</phase>
        <configuration>
          <skip>${maven.exec.skip}</skip>
          <executable>rm</executable>
          <arguments>
            <argument>-rf</argument>
            <argument>node_modules</argument>
            <argument>package-lock.json</argument>
          </arguments>
        </configuration>
      </execution>
      <execution>
        <id>npm install</id>
        <goals>
          <goal>exec</goal>
        </goals>
        <phase>initialize</phase>
        <configuration>
          <skip>${maven.exec.skip}</skip>
          <executable>npm</executable>
          <arguments>
            <argument>install</argument>
          </arguments>
        </configuration>
      </execution>
      <execution>
        <id>build Angular production code</id>
        <goals>
          <goal>exec</goal>
        </goals>
        <phase>generate-resources</phase>
        <configuration>
          <executable>npm</executable>
          <arguments>
            <argument>run</argument>
            <argument>build</argument>
            <!--<argument>&#45;&#45;prod</argument>-->
          </arguments>
        </configuration>
      </execution>
    </executions>
  </plugin>