【问题标题】:Maven build is successful although npm deployment has an errorMaven 构建成功虽然 npm 部署有错误
【发布时间】:2019-10-27 18:02:56
【问题描述】:

我尝试通过exec-maven-plugin 部署npm module。我使用来自https://github.com/arkanjoms/nexus-npmnexus-npm 工具。

在我的 pom 中我是这样执行的:

<execution>
  <id>Deploy module via nexus-npm</id>
  <goals>
    <goal>exec</goal>
  </goals>
  <phase>deploy</phase>
  <configuration>
    <workingDirectory>${project.build.directory}/npm</workingDirectory>
    <executable>nexus-npm</executable>
    <arguments>
      <argument>deploy</argument>
    </arguments>
    <environmentVariables>
      <HOME>${project.build.directory}/npm</HOME>
    </environmentVariables>
  </configuration>
</execution>

一切正常,但是当部署失败时,maven 构建仍被标记为成功。部署不成功时如何告诉maven构建应该失败?

npm ERR! publish Failed PUT 400
npm ERR! code E400
npm ERR! Repository is read only: npm-internal-snapshots : mypackage

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Apps\npm-cache\_logs\2019-06-12T11_02_39_129Z-debug.log
[default.js-info]: Rollback files.
[default.js-info]: Cleaning files.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:12 min (Wall Clock)
[INFO] Finished at: 2019-06-12T13:02:39+02:00
[INFO] Final Memory: 43M/396M
[INFO] ------------------------------------------------------------------------

为了澄清我知道部署失败的原因,这不是我的问题。我只想知道部署出错时如何将maven构建标记为失败。

【问题讨论】:

    标签: maven exec-maven-plugin


    【解决方案1】:

    arkanjoms/nexus-npm 插件使用app/publish-snapshot.js

    publishSnapshot: function (snapshotRepository) {
        log.info('publish snapshot => ' + snapshotRepository);
        shell.exec('npm publish --registry=' + snapshotRepository);
    },
    

    这意味着shelljs/shelljs exec 命令不检查其返回码。

    应该是:

    if (shell.exec('npm publish --registry=' + snapshotRepository).code !== 0) {
      shell.echo('Error: npm publish snapshot failed');
      shell.exit(1);
    }
    

    同样,发布快照步骤的调用不会在 app/commands.js 中出现任何错误

        deploy: function () {
            this.verify();
            this.backup();
            if (commander.release) {
                tag.createTag(this.appConfig, this.config.tag, this.message);
                release.publishRelease(this.appConfig.packageJson.distributionManagement.releaseRegistry);
                release.updatePkgVersion(this.appConfig, this.message);
                rollback.clean();
            } else {
                snapshot.addDateToVersion(this.appConfig);
                snapshot.publishSnapshot(this.appConfig.packageJson.distributionManagement.snapshotRegistry);
                rollback.rollback();
            }
        },
    

    就目前的插件实现而言,当部署出现错误时,将 maven 构建标记为失败并不容易。

    【讨论】:

    • 谢谢,这正是问题所在。我分叉了这个项目并尝试了这个,它就像一个魅力
    • @ochs.tobi 干得好!这可能是对原始项目的 PR(拉取请求)!
    猜你喜欢
    • 1970-01-01
    • 2020-05-28
    • 2013-05-23
    • 2012-06-17
    • 2016-11-01
    • 2010-12-04
    • 2011-03-07
    • 1970-01-01
    • 2019-06-28
    相关资源
    最近更新 更多