是否有使用 CI jenkins 管道(最好是 maven+nexus)构建铬扩展(Edge+Chrome)的最新(crx3)方法?

Is there an up-to-date (crx3) way to build a chromium extension (Edge+Chrome) using a CI jenkins pipeline (maven+nexus preferably)?

我正在为 Edge 和 Chrome 构建一个自托管的 Chromium 扩展。到目前为止,我使用带有此插件的 Maven (https://github.com/bmatthews68/crx-maven-plugin) 获得了一个很好的工作 CI 管道,我设法自动化了 .crx 文件的版本控制、打包和签名,并毫不费力地上传到 Nexus 存储库(我们的目的是使用组策略将上传 URL 指向 Nexus 版本,以便将扩展部署到用户)。

但我们发现该插件有点过时,并且使用crx2格式进行扩展包装。前一段时间(chromium v​​75 左右)放弃了对 crx2 的支持,当前的浏览器版本需要 crx3 或不会安装扩展。

似乎现在打包 crx3 扩展的唯一可靠方法是使用 chrome 可执行文件本身,但它看起来不是 CI 管道的最佳想法:-/

欢迎提出任何建议!

正如您提到的,CRX2 在两年前的 Chrome 75 中被弃用,CRX2 中有 some issues,它的支持在 Chrome 78 中被完全删除。因为所有的分机都要转成CRX3格式!

我不确定您是如何使用 maven 构建它的,也许是脚本之类的。在这种情况下,您可能需要适当修改您的脚本,或者找到一些支持 CRX3 格式的参考文档,这些参考文档与您正在使用的构建扩展的工具相关。

不然得打包成crx3格式。参考这个document.

最后我找到了一个方法,虽然是间接的。 https://www.npmjs.com/package/crx3

上有一个 CRX3 NPM 项目,该项目已针对 CRX3 格式保持最新

使用 exec-maven-plugin 调用 NPM,如下所述,我已经能够正确打包 crx 文件(这在本地 windows 工作站和 ALM linux 节点中有效) :

            <!-- Build crx file using NPM -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
              <execution>
                <phase>compile</phase>                  
                <goals>
                  <goal>exec</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <executable>npm</executable>                
              <workingDirectory>${project.build.directory}</workingDirectory>
              <commandlineArgs>install</commandlineArgs>
            </configuration>                
        </plugin>

我为 NPM 使用了一个带有版本占位符的 package.json 文件,这样我就可以继续管理 pom 中的版本:

{
  "name": "${project.artifactId}",
  "version": "${project.version}",
  "private": true,
  "dependencies": {
    "crx3": "^1.1.3"
  },
  "scripts": {
    "install": "crx3 ${project.artifactId}-${project.version} --keyPath crx.pem --appVersion ${crx.version} --crxPath ${project.artifactId}-${project.version}.crx"
  }
}

为了使过滤正常工作,我还在 pom 中使用了 maven-resources 插件:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
            <execution>
                <id>copy-extension-resources</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>resources</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}</outputDirectory>
                    <resources>
                        <!-- Resource filtering to include version number in manifest.json and copy sources to a subfolder in /target -->
                        <resource>
                            <directory>src/main/chrome</directory>
                            <filtering>true</filtering>
                            <includes>
                                <include>**/manifest.json</include>
                            </includes>
                        </resource>
                        <resource>
                            <directory>src/main/chrome</directory>
                            <filtering>false</filtering>
                            <excludes>
                                <exclude>**/manifest.json</exclude>
                            </excludes>
                        </resource>
                    </resources>
                </configuration>
            </execution>
            <execution>
                <id>copy-external-resources</id>
                <phase>generate-sources</phase>
                <goals>
                    <goal>resources</goal>
                </goals>
                <configuration>
                    <outputDirectory>${project.build.directory}</outputDirectory>
                    <resources>
                        <!-- Resource filtering to include version number in update.xml and package.json and copy resources to /target folder -->
                        <resource>
                            <directory>src/main/resources</directory>
                            <filtering>true</filtering>
                            <includes>
                                <include>update.xml</include>
                                <include>package.json</include>
                                <include>package-lock.json</include>    
                            </includes>
                        </resource>
                        <resource>
                            <filtering>false</filtering>
                            <directory>src/main/resources</directory>                   
                            <includes>
                                <include>crx.pem</include>
                            </includes>
                        </resource>
                    </resources>
                </configuration>
            </execution>

        </executions>
    </plugin>