Polarion-2506-本地开发与30天试用

目录

前言

《Polarion-Docker-开发环境搭建》中,我记录了使用 Docker 管理多个 Polarion 版本的基本思路;《Polarion-Arm-环境修复》则记录了 ARM 环境下的兼容性问题。

这次客户使用的是 Polarion 2506。实际开发时,我并不希望让容器直接启动 Polarion Java 应用,而是继续使用 Eclipse/PDE 启动。Docker 的职责是完成 Linux 环境下的安装、初始化 PostgreSQL 和 Apache,并把完整安装树提取到宿主机;Eclipse 负责加载对应版本的插件和启动 Java 应用。

这套环境的启动模型

可以把环境拆成两部分:

部分 负责内容 运行位置
Docker 容器 安装 Polarion、保存安装结果、启动 PostgreSQL 和 Apache Docker
Polarion Java 应用 加载插件、连接数据库和 SVN、提供应用逻辑 宿主机上的 Eclipse/PDE

因此,容器启动成功并不代表 Polarion Java 已经启动。容器只提供依赖服务和安装目录,最后还需要在 Eclipse 中启动 Polarion2506.launch

将安装目录放到外置磁盘

本机将 2506 的运行时目录放在外置磁盘:

1
2
3
4
5
6
/Volumes/Data/Polarion/Polarion2506-runtime/
├── bin/
├── data/
├── etc/polarion.properties
└── polarion/
    └── plugins/

这样做的好处是安装包、插件、SVN 数据和 PostgreSQL 数据不会持续占用内部磁盘。Docker 运行时把这个目录挂载到容器内的 /opt/polarion;宿主机上的 Eclipse 则直接使用外置磁盘的真实路径。

Eclipse 启动参数中的路径必须保持一致:

1
2
-Dcom.polarion.home=/Volumes/Data/Polarion/Polarion2506-runtime/polarion
-Dcom.polarion.propertyFile=/Volumes/Data/Polarion/Polarion2506-runtime/etc/polarion.properties

如果通过脚本在多个版本之间切换,脚本只需要切换这两个路径以及对应的启动参数,不需要复制或覆盖 22R1 的安装目录。

使用 Docker 安装并提取 Polarion 2506

最小镜像只负责安装和提取,不在容器中启动 Polarion Java。构建时可以使用 Docker BuildKit 的 named context 读取安装包,避免把较大的 ZIP 文件复制到 Dockerfile 所在目录:

1
2
3
4
5
6
7
docker buildx build \
  --platform linux/amd64 \
  --build-context polarion_package=/Volumes/Data/Polarion \
  -f Dockerfile \
  -t polarion:2506-installer \
  --load \
  .

这里的 linux/amd64 只表示安装容器使用的架构。如果是在 Apple Silicon 上运行,Docker Desktop 会使用转译来执行安装步骤;这和宿主机 Eclipse 运行 Java 时遇到的 ARM 原生 Node.js 问题是两件事,详见 ARM 修复文章。

安装目录可以直接绑定到外置磁盘:

1
2
3
4
5
6
7
8
9
10
RUNTIME=/Volumes/Data/Polarion/Polarion2506-runtime

mkdir -p "$RUNTIME"

docker run --rm \
  --platform linux/amd64 \
  --network bridge \
  -e START_DEPENDENCIES=0 \
  --mount type=bind,src="$RUNTIME",dst=/opt/polarion \
  polarion:2506-installer install

安装完成后,宿主机至少应该能看到以下内容:

1
2
3
4
5
$RUNTIME/bin
$RUNTIME/etc/polarion.properties
$RUNTIME/data
$RUNTIME/polarion/.eclipseproduct
$RUNTIME/polarion/plugins

如果还需要让 PostgreSQL 和 Apache 常驻在容器中,可以启动依赖服务容器。下面的端口是给 2506 并行开发预留的端口:

1
2
3
4
5
6
7
8
9
10
docker run -d \
  --name polarion2506-services \
  --platform linux/amd64 \
  --network bridge \
  --add-host=host.docker.internal:host-gateway \
  -p 127.0.0.1:25433:5433 \
  -p 25080:80 \
  -e START_DEPENDENCIES=1 \
  --mount type=bind,src="$RUNTIME",dst=/opt/polarion \
  polarion:2506-installer dependencies

容器内的 PostgreSQL 默认只监听回环地址,而 Java 在宿主机上运行时需要通过宿主机端口访问它。因此,依赖服务启动脚本需要把 PostgreSQL 调整为监听 Docker 私有网络,并只通过 127.0.0.1:25433 暴露给本机开发环境。

配置 30 天试用

在 2506 的运行时配置文件中加入下面这一行:

1
com.siemens.polarion.license.salt.enabled=false

完整文件路径是:

1
/Volumes/Data/Polarion/Polarion2506-runtime/etc/polarion.properties

修改后需要重新启动 Eclipse 中的 Polarion2506.launch,因为 Java 应用会在启动时读取 polarion.properties。这个配置只应写入 2506 对应的运行时目录,不要误改 22R1 的配置文件。

可以先在宿主机确认配置:

1
2
rg -n '^com\.siemens\.polarion\.license\.salt\.enabled=' \
  /Volumes/Data/Polarion/Polarion2506-runtime/etc/polarion.properties

预期结果为:

1
com.siemens.polarion.license.salt.enabled=false

该设置用于启动本地 30 天试用环境。试用期和授权使用仍应遵守 Siemens Polarion 的许可条款,不要把这个开发配置用于生产部署。

2506 与 22R1 并行运行

两个版本可以同时运行,但必须隔离端口、运行时目录和 Eclipse/PDE 工作区。当前 2506 使用以下端口:

资源 2506
HTTP/Apache 25080
PostgreSQL 25433
AJP 25089
control 25087

2506 的 polarion.properties 中相应配置应指向这些端口:

1
2
3
4
5
6
base.url=http://localhost:25080
repo=http://localhost:25080/repo
TomcatService.ajp13-port=25089
controlPort=25087
controlHostname=localhost
com.polarion.platform.internalPG=polarion:polarion@localhost:25433

Apache 在容器内还需要把 AJP 请求转发到宿主机的 25089,而不能继续指向容器自己的 127.0.0.1:8889。现有的 polarion2506-parallel.sh 会完成端口配置、保存 .parallel-original 备份并启动 polarion2506-services

并行运行时,22R1 和 2506 还必须使用独立的 Eclipse/PDE 工作区,并分别激活对应版本的 target platform:

  • 22R1:3.22.1
  • 2506:3.25.6

如果同一个 PDE 工作区先加载 2506 的 target platform,再启动 22R1,OSGi 可能会把两套版本的 bundle 混在一起,出现解析失败。这类问题与端口冲突无关,分开工作区才能真正隔离。

Eclipse/PDE 启动注意事项

启动 2506 时,重点检查以下三项:

  1. -Dcom.polarion.home 指向 /Volumes/Data/Polarion/Polarion2506-runtime/polarion
  2. -Dcom.polarion.propertyFile 指向 2506 的 etc/polarion.properties
  3. locationconfiguration 和 workspace 不要复用 22R1 的目录。

容器中的 polarion.init 不作为本次开发环境的 Java 启动入口。它可以用于确认安装树是否完整,但应用本身仍通过 Eclipse/PDE 启动,这样才能继续使用插件开发、断点调试和当前的 launch 配置。

启动后的最小验证

先确认依赖容器在运行:

1
test "$(docker inspect -f '' polarion2506-services)" = running

再确认 2506 Java 进程使用了正确的运行时目录:

1
pgrep -af 'com\.polarion\.home=/Volumes/Data/Polarion/Polarion2506-runtime/polarion'

最后通过 2506 的 Apache 入口验证 HTTP:

1
2
3
4
curl -fsS \
  -H 'Host: localhost:25080' \
  http://127.0.0.1:25080/polarion/ >/dev/null \
  && echo 'Polarion 2506 HTTP OK'

HTTP 返回成功只能证明 Apache、AJP 和 Java 的链路已经连通;是否进入试用状态,还需要在 Polarion 的许可/管理界面中确认。

总结

这套方案的关键不是让 Docker 同时运行两套 Polarion,而是把安装、依赖服务和 Java 开发启动拆开:

  • Docker 负责安装 2506,并把运行时写入外置磁盘。
  • PostgreSQL 和 Apache 可以留在 polarion2506-services 容器中。
  • Polarion Java 由 Eclipse/PDE 启动,方便调试和插件开发。
  • 通过独立端口、运行时目录和 PDE 工作区,可以与 22R1 并行运行。
  • 在 2506 的 polarion.properties 中设置 com.siemens.polarion.license.salt.enabled=false,重启对应 launch 后即可开始本地 30 天试用。
坚持原创技术分享,您的支持将鼓励我继续创作!