在构建 git repo 时使用 Jenkins 交换密码参数

Use Jenkins to swap a password parameter out when building git repo

我想有以下场景:

问题:这可以轻松完成吗?如果可以,怎么做?这应该是 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 以屏蔽构建输出中的密码。