是否有使用 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 v75 左右)放弃了对 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>
我正在为 Edge 和 Chrome 构建一个自托管的 Chromium 扩展。到目前为止,我使用带有此插件的 Maven (https://github.com/bmatthews68/crx-maven-plugin) 获得了一个很好的工作 CI 管道,我设法自动化了 .crx 文件的版本控制、打包和签名,并毫不费力地上传到 Nexus 存储库(我们的目的是使用组策略将上传 URL 指向 Nexus 版本,以便将扩展部署到用户)。
但我们发现该插件有点过时,并且使用crx2格式进行扩展包装。前一段时间(chromium v75 左右)放弃了对 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>