使用Maven将文件压缩到NO Java应用程序目录

时间:2018-11-20 19:04:53

标签: node.js maven jenkins vue.js artifactory

我不知道这是否可能。这就是我要做的。 我有一些詹金斯管道,它们使用节点js构建VUE.js应用程序。 使用“ nmp run build”命令。此构建的结果是目录名称“ Static”和一个index.html文件。之后,我将这2个文件压缩到file.zip文件中,然后上传到Artifactory,以便稍后将其解压缩下载并放置到docker文件中以生成映像,然后再创建一个Azure容器(ACI)。

我现在想对那些已经使用其他应用程序完成的zip实施一些版本控制,但是在Java中使用maven + POM + Maven + Metadata + Plugin + jenkins +人工制品,其中有2个工作。使用maven进行构建并推送到工件的file.war的1个作业,以及使用“使用参数构建”选项从工件中选择file.war的其他作业。

即使不是Java应用程序here,我也读过一些关于也使用maven创建zip文件的知识,并且对node js也是如此。

那么,用maven压缩目录和文件是否有可能,甚至认为它们不是Java应用程序,并包含作业编号以对该zip文件进行版本化并推送到工件中,是否可行?与我使用Java和maven进行版本控制的方法相同,但是对于jenkins管道中的VUE.js应用程序,该应用程序将zip和内部版本号一起推送到工件中,然后使用“ build with parameters”选项选择我想要的zip? 谢谢!

2 个答案:

答案 0 :(得分:0)

您提到,您已经在使用npm来构建Vue应用程序。有一些npm库可供压缩。您可以例如做这样的事情:

const fs = require('fs');
const archiver = require('archiver');

const archive = archiver('zip', {
  zlib: { level: 9 }
});

const filename = "./output.zip";
const fileOutput = fs.createWriteStream(filename);

fileOutput.on('close', function() {
  console.info('ZIP file created. ' + archive.pointer() + ' total Bytes.');
});

archive.pipe(fileOutput);
archive.directory('./input-directory', '/');

archive.on('error', function(error) {
  throw error;
});

archive.finalize();

这假定构建过程的输出存储在文件系统上的dist文件夹中,并且您有权访问文件系统。

官方文档中有archiver的更多示例:https://github.com/archiverjs/node-archiver

答案 1 :(得分:0)

您可以使用maven-assembly-plugin和程序集描述符来构建一个zip文件。

程序集描述符进入项目的src/assembly目录,该目录的名称类似于my-zip-format.xml。您需要自定义内容以包括所需的文件,但这是个主意。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>my-zip</id>

    <formats>
      <format>zip</format>
    </formats>

    <fileSets>
      <fileSet>
        <directory>path/to/input/dir</directory>
        <outputDirectory>name-of-output-dir</outputDirectory>
        <directoryMode>0750</directoryMode>
        <fileMode>0640</fileMode>
        <lineEnding>unix</lineEnding>
      </fileSet>
    </fileSets>
</assembly>

然后,告诉POM使用该程序集:

....
<plugins>
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version><pluginVersionHere></version>
    <executions>
      <execution>
        <id>make-zip</id>
        <phase>package</phase>
        <goals>
           <goal>single</goal>
        </goals>
        <configuration>
          <descriptors>
            <descriptor>src/assembly/my-zip-format.xml</descriptor>
          </descriptors>
        </configuration>
        ...

文档更加详细,并且还有很多关于程序集插件细微差别的问题/答案。