Apache Maven 通过执行外部命令获取服务器密码

bag*_*tte 9 maven aws-codeartifact

例如,AWS CodeArtifact 使用有效期为 12 小时的令牌进行身份验证。带有 CodeArtifact 的 maven 的典型设置是:

  <servers>
    <server>
      <id>my-domain--my-repo</id>
      <username>aws</username>
      <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
    </server>
  </servers>
Run Code Online (Sandbox Code Playgroud)

在 settings.xml 中并执行

export CODEARTIFACT_AUTH_TOKEN=$(aws codeartifact get-authorization-token --domain my-domain --domain-owner 123456789012 --query authorizationToken --output text)
Run Code Online (Sandbox Code Playgroud)

在调用 mvn 之前每 12 小时在终端中执行一次。

我以为我可以:

  <servers>
    <server>
      <id>swifttech--main</id>
      <username>aws</username>
      <password>${codeartifact.auth.token}</password>
    </server>
  </servers>
Run Code Online (Sandbox Code Playgroud)

在 settings.xml 中,然后有一个

  <plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.5</version>
    <executions>
      <execution>
        <phase>validate</phase>
        <goals>
          <goal>execute</goal>
        </goals>
        <configuration>
          <providerSelection>2.0</providerSelection>
          <properties>
            <script>aws codeartifact get-authorization-token --domain my-domain --domain-owner 123456789012 --query authorizationToken --output text</script>
          </properties>
          <source>
            def command = project.properties.script
            def process = command.execute()
            process.waitFor()

            def token = process.in.text.trim()

            project.properties.setProperty('codeartifact.auth.token', token)
          </source>
        </configuration>
      </execution>
    </executions>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

pom.xml 中的部分以自动检索 CodeArtifact 令牌。

除了它没有工作。我想知道我的想法是否完全有效,而不起作用的只是实现缺陷。或者是不可能在 maven 中实现这种自动化。

Ste*_*e C 0

  1. 苹果系统

    launchctl setenv CODEARTIFACT_AUTH_TOKEN $(aws codeartifact get-authorization-token --domain your-codeartifact-domain --domain-owner 12345678 --region your-codeartifact-region --query authorizationToken --output text --profile your-profile-if-needed)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 视窗

    setx CODEARTIFACT_AUTH_TOKEN $(aws codeartifact get-authorization-token --domain your-codeartifact-domain --domain-owner 12345678 --region your-codeartifact-region --query authorizationToken --output text --profile your-profile-if-needed)
    
    Run Code Online (Sandbox Code Playgroud)

这使得 CODEARTIFACT_AUTH_TOKEN 环境变量从那时起可用于所有新进程(例如 IDE),直至其过期。Maven 将${env.CODEARTIFACT_AUTH_TOKEN}正确解决。

我假设 Linux 用户知道如何设置他们的.profile或等效的。