在构建 git repo 时使用 Jenkins 交换密码参数
Use Jenkins to swap a password parameter out when building git repo
我想有以下场景:
- Jenkins 获取我的 github 存储库(检查!)
- 在我的项目中找到一个特定文件(persistence.xml 比方说)
- 找到参数(例如PASSWORD_PLACEHOLDER)
- 用我之前在 运行 我的测试
之前提供的密码交换它
- 运行 我的测试(通过 Maven)取决于密码用于
的数据库连接
问题:这可以轻松完成吗?如果可以,怎么做?这应该是 MAVEN 的职责还是 Jenkins 的职责?
您可以在测试资源(或资源,如果您愿意)上使用 Maven filtering 来实现它。
您可以按如下方式配置 POM:
<properties>
<secretPassword>xxxx</secretPassword>
</properties>
<build>
<testResources>
<testResource>
<filtering>true</filtering>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>
并将您的 persistence.xml
文件放在 src/test/resources
下,示例内容如下:
<test>
<password>${secretPassword}</password>
</test>
然后,您可以从命令行为该令牌传递一个值,如下所示:
mvn clean test -DsecretPasword="p4ssw0rd"
Maven 会自动用提供的值替换 persistence.xml
文件中的令牌。根据 Maven lifecycle,此替换将在任何测试执行之前发生。
一旦此机制到位,您就可以继续 Jenkins 设置:
- Jenkins 从版本控制中检出代码
- Jenkins 在工作区上运行 Maven 执行,将所需的密码值传递给 Maven,如上例所示
- Maven 将替换令牌并执行测试
一个常见的好做法也是将此行为放在专用的 Maven 配置文件中,例如 ID ci
,然后将其激活为 Jenkins 构建的一部分(通过 -Pci
选项,在这种情况下,传递给 maven)。
因此,回到你的问题:
Can this be done easily and if so, how?
是的,如上所述
Should this be a MAVEN responsibility or a Jenkins one?
Maven 和 Jenkins 一起工作
此外,请注意您传递的密码将成为 Jenkins 服务器上 Jenkins 构建输出的一部分(它将打印执行的 Maven 命令以及作为其中一部分的您传递的密码值,以明文形式显示)。
您可以检查 Mask Password Jenkins Plugin 以屏蔽构建输出中的密码。
我想有以下场景:
- Jenkins 获取我的 github 存储库(检查!)
- 在我的项目中找到一个特定文件(persistence.xml 比方说)
- 找到参数(例如PASSWORD_PLACEHOLDER)
- 用我之前在 运行 我的测试 之前提供的密码交换它
- 运行 我的测试(通过 Maven)取决于密码用于 的数据库连接
问题:这可以轻松完成吗?如果可以,怎么做?这应该是 MAVEN 的职责还是 Jenkins 的职责?
您可以在测试资源(或资源,如果您愿意)上使用 Maven filtering 来实现它。
您可以按如下方式配置 POM:
<properties>
<secretPassword>xxxx</secretPassword>
</properties>
<build>
<testResources>
<testResource>
<filtering>true</filtering>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>
并将您的 persistence.xml
文件放在 src/test/resources
下,示例内容如下:
<test>
<password>${secretPassword}</password>
</test>
然后,您可以从命令行为该令牌传递一个值,如下所示:
mvn clean test -DsecretPasword="p4ssw0rd"
Maven 会自动用提供的值替换 persistence.xml
文件中的令牌。根据 Maven lifecycle,此替换将在任何测试执行之前发生。
一旦此机制到位,您就可以继续 Jenkins 设置:
- Jenkins 从版本控制中检出代码
- Jenkins 在工作区上运行 Maven 执行,将所需的密码值传递给 Maven,如上例所示
- Maven 将替换令牌并执行测试
一个常见的好做法也是将此行为放在专用的 Maven 配置文件中,例如 ID ci
,然后将其激活为 Jenkins 构建的一部分(通过 -Pci
选项,在这种情况下,传递给 maven)。
因此,回到你的问题:
Can this be done easily and if so, how?
是的,如上所述
Should this be a MAVEN responsibility or a Jenkins one?
Maven 和 Jenkins 一起工作
此外,请注意您传递的密码将成为 Jenkins 服务器上 Jenkins 构建输出的一部分(它将打印执行的 Maven 命令以及作为其中一部分的您传递的密码值,以明文形式显示)。
您可以检查 Mask Password Jenkins Plugin 以屏蔽构建输出中的密码。