curl с плагином maven exec не работает из-за "Не могу обработать одинарные и двойные кавычки в одном аргументе"

Чтобы продвигать сборку после успешного развертывания образа док-станции артефакта, нам нужно выполнить следующее:

curl -k -I -u usr:pw -X POST https://company.com/artifactory/api/docker... - H "Content-Type: application/json" -d '{"targetRepo":"project-release","dockerRepository":"project/sample","tag":"1.0.0","copy":"false"}'

При попытке сделать это с maven используйте плагин exec:

...
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>1.2</version>
          <executions>
            <execution>
              <id>promote-image</id>
              <phase>deploy</phase>
              <goals>
                <goal>exec</goal>
              </goals>
              <configuration>
                <executable>curl</executable>
                <arguments>
                  <argument>-k</argument>
                  <argument>-i</argument>
                  <argument>-u ${USER}:{PWD}</argument>
                  <argument>-X POST https://company.com/artifactory/api/docker/docker-local/v2/promote</argument>
                  <argument>-H "Content-Type: application/json"</argument>
                  <argument>-d &apos;{&quot;targetRepo&quot;:&quot;${docker.repository.release}&quot;,&quot;dockerRepository&quot;:&quot;${docker.image.prefix}/${project.artifactId}&quot;,&quot;tag&quot;:&quot;${project.version}&quot;,&quot;copy&quot;:&quot;false&quot;}&apos;</argument>
                </arguments>
              </configuration>
            </execution>
          </executions>
        </plugin>
...

Но это приводит к неправильной сборке CI по причине:

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2:exec (promote-image) on project myproject: Execution promote-image of goal org.codehaus.mojo:exec-maven-plugin:1.2:exec failed: Can't handle single and double quotes in same argument -> [Help 1]

Я предполагаю, что это потому, что -d '" - как это можно решить?

0 ответов

Сначала я думаю, что вам нужно объявить свой аргумент вот так и посмотреть, что произойдет:

<plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2</version>
      <executions>
        <execution>
          <id>promote-image</id>
          <phase>deploy</phase>
          <goals>
            <goal>exec</goal>
          </goals>
          <configuration>
            <executable>curl</executable>
            <arguments>
              <argument>-k</argument>
              <argument>-i</argument>
              <argument>-u</argument> 
              <argument>${USER}:{PWD}</argument>
              <argument>-X</argument> 
              <argument>POST</argument> 
              <argument>-H</argument>
              <argument>"Content-Type: application/json"</argument>
              <argument>-d</argument>
              <argument>&apos;{&quot;targetRepo&quot;:&quot;${docker.repository.release}&quot;,&quot;dockerRepository&quot;:&quot;${docker.image.prefix}/${project.artifactId}&quot;,&quot;tag&quot;:&quot;${project.version}&quot;,&quot;copy&quot;:&quot;false&quot;}&apos;</argument>
              <argument>https://company.com/artifactory/api/docker/docker-local/v2/promote</argument>
            </arguments>
          </configuration>
        </execution>
      </executions>
    </plugin>
Другие вопросы по тегам